Cómo bloquear direcciones IP usando Fail2ban e IPTables

Fail2ban escanea los archivos de registro para varios servicios (SSH, FTP, SMTP, Apache, etc.) y prohíbe las IP’s que genera demasiadas fallas de contraseña. También actualiza las reglas del firewall para rechazar estas direcciones IP.

Fail2ban es un framework de prevención de intrusiones escrito en el lenguaje de programación Python.

El objetivo principal de Fail2ban es prevenir ataques de inicio de sesión de fuerza bruta.

Además, te recomiendo consultar nuestro artículo anterior sobre Snort (sistema de detección de intrusos que puedes usar en Linux).

Instalar Fail2ban

Para instalar fail2ban desde la fuente, descárgalo desde sourceforge.

Usa apt-get para instalar Fail2ban en un sistema basado en Debian como se muestra a continuación.

También puedes instalar Fail2ban manualmente descargando el paquete deb de fail2ban.

Cómo configurar fail2ban

Todos los archivos de configuración de Fail2ban se encuentran en el directorio /etc/fail2ban.

/etc/fail2ban/fail2ban.conf

El objetivo principal de este archivo es configurar las directivas relacionadas con el registro fail2ban.

  • Loglevel: establece la salida del nivel de registro.
  • logtarget: especifica la ruta del archivo de registro

Las acciones tomadas por Fail2ban se registran en el archivo /var/log/fail2ban.log. Puedes cambiar lo escrito en el archivo conf a uno de: 1 – ERROR, 2 – WARN, 3 – INFO or 4 – DEBUG.

/etc/fail2ban/jail.conf

El archivo jail.conf contiene la declaración de las configuraciones del servicio. Este archivo de configuración se divide en diferentes contextos. La configuración DEFAULT se aplica a todas las secciones.

La siguiente sección DEFAULT de jail.conf dice que después de cinco intentos fallidos de acceso desde una sola dirección IP en 600 segundos o 10 minutos (findtime), esa dirección se bloqueará automáticamente durante 600 segundos (bantime).

  • ignoreip: Esta es una lista de direcciones IP separadas por espacios que no pueden ser bloqueadas por fail2ban.
  • maxretry: número máximo de intentos fallidos de inicio de sesión antes de que un host sea bloqueado por fail2ban.
  • bantime: Tiempo en segundos que un host está bloqueado si fue capturado por fail2ban (600 segundos = 10 minutos).

Configuraciones de servicio

Por defecto, algunos servicios se insertan como plantillas. El siguiente es un ejemplo de la sección de servicios ssh.

  • enabled: habilita la comprobación de fail2ban para el servicio ssh
  • port: puerto de servicio (referido en el archivo /etc/services)
  • filter: nombre del filtro que utilizará el servicio para detectar coincidencias. Este nombre corresponde a un nombre de archivo en ‘/etc/fail2ban/filter.d‘; sin la extensión ‘.conf’. Por ejemplo: ‘filter = sshd‘ se refiere a ‘/etc/fail2ban/filter.d/sshd.conf‘.
  • logpath: el archivo de registro en el que fail2ban busca intentos fallidos de inicio de sesión.
  • Action: Esta opción le dice a fail2ban qué acción tomar una vez que un filtro coincide. Este nombre corresponde a un nombre de archivo en ‘/etc/fail2ban/action.d/’ sin la extensión ‘.conf’. Por ejemplo: ‘action = iptables‘ se refiere a /etc/fail2ban/action.d/iptables.conf‘.

Fail2ban supervisará el archivo /var/log/auth.log en busca de intentos de acceso fallidos, y si encuentra intentos repetidos de inicio de sesión ssh fallidos desde la misma dirección IP o host, fail2ban detiene otros intentos de inicio de sesión desde esa dirección IP/host bloqueándolo con regla del firewall fail2ban iptables.

Filtros Fail2ban

El directorio /etc/fail2ban/filter.d contiene expresiones regulares que se utilizan para detectar intentos de intrusión, fallas de contraseña, etc., para varios servicios.

Por ejemplo:

  • sshd.conf: filtros relacionados con Fail2ban ssh
  • apache-auth.conf – Filtros de servicio de apache Fail2ban

También podemos agregar nuestra propia expresión regular para encontrar acciones no deseadas.

Acciones Fail2ban

El directorio /etc/fail2ban/action.d contiene diferentes scripts que definen acciones que se ejecutarán una vez que coincida un filtro. Solo se permite un filtro por servicio, pero es posible especificar varias acciones, en líneas separadas.

Por ejemplo:

  • IPtables.conf – bloquear y desbloquear la dirección IP
  • Mail.conf: envío de correo al usuario configurado

Iniciar/detener el servicio Fail2ban

Después de realizar los cambios de configuración, puedes detener e iniciar el demonio Fail2ban como se muestra a continuación.