¿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.