¿Qué es Fail2ban?

Fail2ban es un software escrito en Python que nos ayuda a prevenir ataques de fuerza bruta o ataques DDoS. Utiliza los intentos de acceso fallidos logeados en el sistema para detectar las IPs maliciosas. Después estas direcciones IP son bloqueadas para evitar más intentos. Es un software que recomiendo tener instalado en un sistema expuesto a Internet.

¿Cómo funciona Fail2ban?

Fail2ban es un demonio que está monitorizando cada acceso al sistema a los diferentes servicios que tienen puertos abiertos (principalmente SSH, HTTPS…). Monitoriza el número de intentos de acceso de una dirección IP, y detecta cuando el número de intentos son sospechos de ser un ataque. Una vez identificado un posible atacante Fail2ban utiliza el Firewall del sistema (IPtables en sistemas Linux) para bloquear la dirección IP. Desde ese momento esa dirección IP no tendrá permitido el acceso al sistema.

Instalar Fail2ban

Para instalar Fail2ban en un sistema basado en Debian (como Ubuntu) simplemente ejecuta el siguiente comando en tu terminal:

sudo apt install fail2ban

Verificar instalación

Para verificar si la aplicación se ha instalado satisfactoriamente, simplemente escribe este comando:

fail2ban-client -h

el cual debería devolver la información de ayuda de Fail2ban.

También podrías revisar la versión instalada de Fail2ban…

sudo fail2ban-client -V

Iniciar Fail2ban

Ahora podemos iniciar la aplicación.

sudo service fail2ban start

Configurar Fail2ban

Configuración General

Fail2ban incluye un fichero de configuración por defecto llamado jail.conf, pero es recomendable no editar este fichero. En su lugar, copia el fichero en otro fichero (jail.local), en el que podremos hacer cualquier modificación necesaria.

cd /etc/fail2ban
sudo cp jail.conf jail.local

En nuestro caso, no vamos a modificar nada de momento.

Jails

El siguiente paso es configurar los jails. En mi caso como estoy utilizando un sistema basado en Debian, tengo el fichero /etc/fail2ban/jail.d/defaults-debian.conf creado por defecto con esta configuración:

[sshd]
enabled = true

Esto significa que tengo habilitado el jail sshd. Este jail tiene los parámetros de configuración por defecto. podemos ver estos valores con estos comandos.

Parámetros por defecto

Bantime

El periodo de tiempo que una dirección IP está bloqueada (o baneada)

sudo fail2ban-client get sshd bantime
600
Findtime

El periodo de tiempo durante el cuál Fail2ban busca intentos de acceso.

sudo fail2ban-client get sshd findtime
600
Maxretry

El número de intentos necesarios para ejecutar el bloqueo durante los segundos de findtime (600).

sudo fail2ban-client get sshd maxretry
5

Cambiar los parámetros del jail

Los parámetros por defecto anteriores podría ser buenos para ti, pero en mi caso para el jail de sshd prefiero cambiarlos. Para el jail voy a definir estos parámetros en el fichero de configuración del jail (/etc/fail2ban/jail.d/defaults-debian.conf).

  • bantime: 24 horas
  • findtime: 30 segundos
  • maxretry: 1 intento

Para ello edito el fichero /etc/fail2ban/jail.d/defaults-debian.conf con ellos. Voy también a cambiar la acción (action) definida para recibir un e-mail cada vez que una IP es baneada.

[sshd]
enabled = true
bantime = 24h
findtime = 30
maxretry = 1

action = %(action_mwl)s

Validar la configuración del jail

Fail2ban tiene un comando para validar la configuración hecha de Fail2ban. Para esta validación, tienes que usar este comando:

sudo fail2ban-client --test

Recarga

Una vez hecha la validación, podemos recargar el servicio para cargar los cambios de configuración.

sudo service fail2ban reload

Comprobar el estado de Fail2ban

Para comprobar el estado del servicio, puedes usar este comando:

sudo fail2ban-client status

Y para obtener el estado del jail:

sudo fail2ban-client status sshd

Comprobar las IPs baneadas por Fail2ban

En la comprobación anterior has podido ver las IPs baneadas por la aplicación del firewall. Con este comando podrás ver las IPs baneadas con el valor REJECT en la tabla.

sudo iptables -L -n -v --line-numbers

Habilitar al arranque

Finalmente, por defecto Fail2ban no se inicia al arranque. Para habilitarlo:

sudo systemctl enable fail2ban

Conclusión

Cuando Fail2ban se instala, tenemos una capa extra de seguridad para evitar que un sistema sea atacado. Es muy recomendable tener una solución como ésta en cualquier sistema expuesto a Internet.

Ahora te recomiendo revisar cómo integrar AbuseIPDB con Fail2ban.