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
2
apt-get -y update
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.

You may also like...

8 Responses

  1. Carlos Garcia dice:

    Buen articulo, voy a instalarlo en mi servidor remoto basado en Centos, ya que he detectado este tipo de ataques y en cualquier momento le llegan con la clave.

  2. Armando Rodas dice:

    Interesante, gracias por compartir el dato, voy a probarlo…
    Ademas, ¿Cuál cree que es la principal razón por la que Linux es poco utilizado?, desde tu punto de vista,
    yo te agradezco por este excelente blog…

    • Hola Armando,

      Pues lo primero creo que GNU Linux al contrario de lo que piensas es ampliamente utilizado, de hecho ésta web, al igual que la mayoría de webs del mundo, funcionan sobre servidores con éste sistema operativo. De hecho el CERN, la NASA, la Bolsa de New York, y el 95 % de supercomputadoras del mundo también funcionan con él. Si te refieres a equipos de sobremesa, aunque todavía de manera lenta, poco a poco se va utilizando más. Sistemas operativos como Ubuntu o LinuxMint ayudan mucho. Incluso, Android, el famoso sistema operativo para smartphones y tabletas, funciona con un núcleo Linux.

      Esa es mi respuesta 🙂

      Gracias por pasarte y comentar.

  3. Eugenio dice:

    Una pregunta: en Debian la documentación recomienda utilizar /etc/fail2ban/jail.local en vez de jail.conf. ¿Hay alguna diferencia?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR