Fail2Ban es una aplicación para protegernos contra intentos de acceso malintencionados de fuerza bruta mediante distintos protocolos como SSH o FTP. Lo que hace Fail2Ban es buscar en los archivos de log y ejecutar una serie de comandos para cuando se cumplen las reglas de acceso especificadas como por ejemplo, que se hayan realizado 5 intentos de acceso SSH fallidos en menos de media hora.
Nuestro objetivo es configurar Fail2Ban para que ciertas IPs que realizan intentos de acceso recurrentemente sean bloquedas permanentemente o, al menos, un tiempo más que prudencial. Lo primero que necesitamos es, obviamente instalar y configurar Fail2Ban, para lo cual podéis seguir la guía del enlace.
Vamos a basarnos en este tutorial tal útil para lograr los objetivos, pero modificaremos algo el código para adaptarlo a nuestras necesidades.
Contenidos
Creación del archivo de configuración de Fail2Ban
Lo primero que haremos será crear el archivo /etc/fail2ban/action.d/iptables-recurrente.conf
#nano /etc/fail2ban/action.d/iptables-recurrente.conf
Seguidamente introducimos la siguiente configuración que lo que hará, será buscar las IPs recurrentes en nuestro archivo del log y almacenarlas en /etc/fail2ban/ip.blocklist.<nombre que decidamos poner>. Con esta configuración se bloqueará todo el tráfico que provenga de la IP baneada, por lo que en caso de realizar cambios, debemos hacerlos cuidadosamente.
# Archivo de configuración de Fail2ban [Definition] # Option: actionstart # Nota: Este comando se ejecuta nada más iniciar Fail2Ban. # Values: CMD # actionstart = iptables -N fail2ban-REPEAT-<name> iptables -A fail2ban-REPEAT-<name> -j RETURN iptables -I INPUT -j fail2ban-REPEAT-<name> # set up from the static file cat /etc/fail2ban/ip.blocklist.<name> |grep -v ^\s*#|awk '{print $1}' | while read IP; do iptables -I fail2ban-REPEAT-<name> 1 -s $IP -j DROP; done # Option: actionstop # Notas: Este comando se ejecuta una vez Fail2Ban finaliza # Values: CMD # actionstop = iptables -D INPUT -j fail2ban-REPEAT-<name> iptables -F fail2ban-REPEAT-<name> iptables -X fail2ban-REPEAT-<name> # Option: actioncheck # Notas: Este comando se ejecuta justo antes de cada acción de baneo # Values: CMD # actioncheck = iptables -n -L INPUT | grep -q fail2ban-REPEAT-<name> # Option: actionban # Notas: Este comando se ejecuta cuando se banea a una IP. # El comando se ejecuta con permisos de usuario de Fail2Ban # Tags: <ip> IP address # <failures> number of failures # <time> unix timestamp of the ban time # Values: CMD # actionban = iptables -I fail2ban-REPEAT-<name> 1 -s <ip> -j DROP # also put into the static file to re-populate after a restart ! grep -Fq <ip> /etc/fail2ban/ip.blocklist.<name> && echo "<ip> # fail2ban/$( date '+%%Y-%%m-%%d %%T' ): auto-add for repeat offender" >> /etc/fail2ban/ip.blocklist.<name> # Option: actionunban # Notes.: El comando se ejecuta cuando se desea desbloquear una IP bloqueada. # El comando se ejecuta con permisos de usuario de Fail2Ban # Tags: <ip> IP address # <failures> number of failures # <time> unix timestamp of the ban time # Values: CMD # actionunban = /bin/true [Init] # Defaut name of the chain # name = REPEAT
Edición del archivo jail.conf
El siguiente paso será editar nuestro archivo jail.conf, pero, si habéis seguido la guía del enlace publicada en este blog, deberéis editar en su lugar el archivo jail.local. Para cualquiera de los dos archivos anteriores, si queremos detectar intentos de acceso recurrentes SSH y aplicar la configuración y acciones que hemos especificado en el archivo /etc/fail2ban/action.d/iptables-recurrente.conf, habrá que agregar:
[ssh-recurrente] enabled = true filter = sshd action = iptables-recurrente[name=ssh] sendmail-whois[name=SSH-repeater, dest=root, sender=root] logpath = /var/log/secure maxretry = 16 findtime = 31536000 bantime = 31536000
En esta configuración se usa el filtro SSHD ya existente pero esperando a que haya 16 intentos fallidos en el periodo de un año. Hay que tener en cuenta que en el parámetro logpath tendréis que poner la ruta a vuestro log de acceso SSH que por defecto está en /var/log/secure pero que en distribuciones como Ubuntu se encuentra en en /var/log/auth.log. Podéis cambiar también los parámetros de sendmail-whois para que Fail2Ban os avise cuando realiza alguna acción de bloqueo.
Reiniciando Fail2Ban
Después de realizar los cambios anteriores, reiniciamos Fail2Ban con el siguiente comando:
#service fail2ban restart
Ahora, veremos que cuando se bloquee alguna IP, se creará el archivo /etc/fail2ban/ip.blocklist.ssh, el cual si todo va bien, crecerá cada vez más.
Excelente articulo, más claro no puede estar, gracias.
Muy buen articulo
1 – Cuando dices /etc/fail2ban/ip.blocklist.. se debe crear o se crea automático con el nombre «name»?
2- Esto es solo para intentos fallidos a ssh? se puede usar para intentos de inicio de cesión a PHP, MariaDB inicio de sesión en nuestro ISP y otros?
Gracias
muchas gracias por su manual, en este momento bloqueo todas las ip que atacan el servidor por ssh