Evitar ataques de fuerza bruta con Fail2ban

Uno de los ataques más habituales contra servidores son los llamados de fuerza bruza. Se refiere a la forma de recuperar una clave probando todas las combinaciones posibles hasta encontrar aquella que permite el acceso. El artículo de hoy va precisamente sobre eso. Trataremos la herramienta fail2ban, que nos ayudará a fortificar nuestros servidores, para evitar esta serie de ataques.

fail2ban

Sobre fail2ban

Se trata de una aplicación escrita en Python para la prevención de intrusos. Su forma de funcionar es penalizar o bloquear ciertas conexiones remotas, que intentan accesos por fuerza bruta. Para ello utiliza la información de los archivos de registro del sistema, como por ejemplo /var/log/auth.log en el caso de servidores Debian. Es software libre. Utiliza la licencia GNU y funciona con sistemas tipo UNIX.

Hay que tener en cuenta que para dar respuesta a los ataques de fuerza bruta el servidor debe utilizar recursos del sistema, como ciclos de CPU y memoria. Esto puede ser un problema muy grave, ya que nos pueden tumbar los servicios o incluso la propia máquina. Para evitar esto fail2ban penaliza o bloquea dichas conexiones.

Su forma básica de funcionamiento es aplicar una serie de reglas, definidas por el usuario, cuando se intenta acceder a determinado puerto y servicios, y se producen sucesivos intentos fallidos de acceso. Para ello se bloquea el acceso de la IP remota durante un tiempo prudencial o bien la propia aplicación. Generalmente se utilizan filtros para los servicios sshd, Postfix, qmail, entre otros. Importante destacar que en los servidores web Apache, nos puede ayudar a evitar ataques de denegación de servicio o DDoS

Instalación y configuración

Se puede instalar el programa de dos maneras. Una de ellas es desde las fuentes, ubicadas en GitHub. La otra, y que es comptable con ciertas distribuciones como Debian, Gentoo o Fedora es desde sus propios repositorios. Justo es esa la forma que utilizaremos para su instalación en éste tutorial, sobre el sistema operativo de la espiral, en su última versión, llamada «Jessie«.

La instalación es bien sencilla, desde los propios repositorios por defecto o main.

  1. apt-get -y update
  2. apt-get -y install fail2ban

Y con esto ya lo tendríamos listo. Si queremos saber más sobre las diferentes formas de instalación, podemos consultar el siguiente enlace.

Una vez instalado los ficheros de configuración están ubicados en el directorio /etc/fail2ban/, el más importante, en lo que a configuración de parámetros se refiere es el fichero llamado jail.conf. Antes de empezar a trabajar con el fichero debemos realizar una copia o backup, por ejemplo:

  1. cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.conf.back

A nivel teórico, debemos saber, que los scripts que utiliza la herramienta, y que están definidos para filtrar los diferentes tipos de servicios, se encuentram ubicados en /etc/fail2ban/filter.d A modo de ejemplo vamos a ver el filtro para el servicio ssh, que utiliza el daemon sshd. Si utilizamos un editor como nano, utilizando el atajo de teclado CTRL+W, escribimos sshd, y nos llevará justo a la línea del filtro.

fail2ban-jail-conf-sshd

Vamos a revisar línea por línea el filtro. Al principio, entre corchetes, el nombre del servicio, en el siguiente línea, si el filtro está activo o no, vemos que pone «true», esto es, está activo. Las siguientes líneas son el tipo de puerto y después del demonio a filtrar. Dicho puerto se puede cambiar. Ya he comentado que el programa para funcionar analiza los ficheros de registro de sistema, en concreto, en este caso, sería /var/log/auth.log. Por último el número máximo de intentos, que por defecto es 6, quizás un número demasiado elevado. Quizás con 3 es más que suficiente. Cada vez que hacemos cualquier cambio, debemos reiniciar el servicio.

  1. service fail2ban restart

Veamos un ejemplo, desde una segunda máquina voy a intentar acceder, imaginando que es un ataque, no utilizaré la contraseña real.

fail2ban-ssh-login-fail

Tal y como hemos visto antes sólo permite seis intentos. Si revisamos el fichero /var/log/auth.log del host, veremos los intentos.

fail2ban-ssh-login-log

De ésta manera ya ha quedada bloqueada la IP de origen del intento de acceso. Por último, revisando el fichero /var/log/fail2ban.log, comprobaremos que efectivamente la IP se ha «baneado»

fail2ban-ssh-ban

Tal y como se observa, justo al pasar diez minutos, la IP vuelve a estar disponible para el acceso.

La herramienta es muy configurable, para multitud de servicios. También podemos decirle que cada vez que haya un intento fallido de acceso nos envie un correo electrónico. Para finalizar os dejo un interesante artículo que explica como configurarlo para evitar ataques DDoS a servidores web con Apache. También podéis visitar la Wiki oficial en castellano. Espero que os haya resultado interesante. Cualquier comentario será bienvenido.