Bloquear IPs permanentemente con Fail2Ban

Fail2BanLinux

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.

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.


Avatar de Edu Lazaro

Edu Lázaro: Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

Si quieres conocer mis proyectos, sígueme en Twitter.

3 comentarios en “Bloquear IPs permanentemente con Fail2Ban

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

Deja una respuesta

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

“- Hey, Doc. No tenemos suficiente carretera para ir a 140/h km. - ¿Carretera? A donde vamos, no necesitaremos carreteras.”