Al comenzar a operar un servidor, te enfrentas a una multitud de ataques externos. Los ataques de fuerza bruta SSH, los intentos de inicio de sesión indiscriminados dirigidos a aplicaciones web, y el escaneo de puertos son amenazas cotidianas. Si estas amenazas se desatienden, pueden llevar a la penetración del sistema. Fail2Ban es una solución de prevención de intrusiones basada en Linux, ligera y potente, que aborda estos problemas.

Fail2Ban detecta automáticamente las IP sospechosas y las bloquea. Esto permite que el administrador proteja el servidor sin mucho esfuerzo.

Cómo instalar Fail2Ban

Fail2Ban está disponible como paquete en la mayoría de las distribuciones de Linux, por lo que su instalación es muy sencilla.

Distribuciones Ubuntu/Debian

sudo apt update
sudo apt install fail2ban

Una vez finalizada la instalación, configura el inicio del servicio y el arranque automático.

sudo systemctl start fail2ban
sudo systemctl enable fail2ban

Descripción general de Fail2Ban

Cómo configurar Fail2Ban

Fail2Ban utiliza el archivo /etc/fail2ban/jail.conf como su archivo de configuración predeterminado, sin embargo, se recomienda crear el archivo /etc/fail2ban/jail.local para personalizarlo sin modificar el archivo original.

Creación del archivo jail.local:

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

Elementos clave de configuración: - bantime: Tiempo de bloqueo (en segundos) - findtime: Rango de tiempo considerado para ataques (en segundos) - maxretry: Número máximo de intentos fallidos permitidos

[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 5

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log

Ejemplos de aplicación práctica

1. Bloqueo de fuerza bruta SSH

Al configurar el jail [sshd] como se indica, si hay más de 5 intentos fallidos de inicio de sesión, esa IP será bloqueada durante 1 hora.

2. Bloqueo de ataques de inicio de sesión Apache

[apache-auth]
enabled = true
filter = apache-auth
logpath = /var/log/apache2/error.log
maxretry = 3

Bloqueará después de 3 intentos de autenticación fallidos en el servidor web.

Métodos para monitorear Fail2Ban

Existen varias maneras de monitorear si Fail2Ban está funcionando correctamente.

1. Verificación del estado mediante fail2ban-client

Puedes verificar el estado de un jail específico (por ejemplo, sshd).

sudo fail2ban-client status sshd

Ejemplo de salida:

Status for the jail: sshd
|- Filter
|  |- Currently failed: 2
|  |- Total failed: 15
|  `- File list:    /var/log/auth.log
`- Actions
   |- Currently banned: 1
   |- Total banned: 3
   `- Banned IP list: 192.168.1.100

2. Monitoreo de archivos de registro

La actividad de Fail2Ban se registra en el archivo /var/log/fail2ban.log.

tail -f /var/log/fail2ban.log

Esto permite monitorear en tiempo real los eventos de bloqueo y liberación.

Cómo funciona Fail2Ban

  1. Monitoreo de registros: Fail2Ban supervisa continuamente los archivos de registro configurados. (ej: /var/log/auth.log, /var/log/apache2/error.log)

  2. Aplicación de filtros: Detecta patrones específicos (intentos fallidos de inicio de sesión, errores de autenticación, etc.) como filtros.

  3. Ejecución de acciones: Si se supera el valor de maxretry, se bloquea la IP correspondiente mediante iptables o se ejecutan comandos de firewall como firewall-cmd o nftables.

  4. Desbloqueo automático: Después de transcurrido el bantime, se desbloquea automáticamente.

Fail2Ban tiene una estructura modular que permite configurar la monitorización y el bloqueo de manera independiente para diversos servicios (jail), lo que refuerza la seguridad más allá de la simple protección SSH.

Cómo configurar un bloqueo permanente para ataques SSH

Es crucial tratar a los atacantes de SSH con firmeza. En Fail2Ban, puedes configurar bantime a -1 para bloquear permanentemente.

[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
bantime = -1
findtime = 600
maxretry = 5

Con esta configuración, si hay más de 5 intentos fallidos de autenticación SSH, la IP será bloqueada permanentemente, impidiendo el acceso al servidor.

[Consejo avanzado] Entendiendo el funcionamiento básico de bloqueo de Fail2Ban

Fail2Ban funciona de manera predeterminada incluso sin definir action por separado. Esto se debe a que la configuración predeterminada incluye comandos de bloqueo utilizando iptables.

  • Si no se especifica una action por separado, se aplica la configuración action = %(action_)s de la sección [DEFAULT].
  • %(action_)s realiza la acción de bloquear direcciones IP maliciosas utilizando el comando iptables internamente.
  • Por lo tanto, incluso sin redactar action por separado, se llevará a cabo el bloqueo de IP mediante iptables.

Ejemplo de comando de bloqueo predeterminado (ver action_.conf)

iptables -I INPUT -s <ip> -j REJECT

Es decir, Fail2Ban controlará automáticamente iptables para bloquear las IP atacantes.

Advertencia: - Si deseas utilizar otras herramientas de firewall como UFW o firewalld, debes configurar action explícitamente. - Además, las reglas de bloqueo pueden desaparecer tras el reinicio del servidor, por lo que es recomendable configurar el servicio Fail2Ban para que se inicie automáticamente al arrancar.


Adicionalmente, es posible crear y aplicar diversos filtros personalizados o configurar alertas por correo electrónico, así como otras configuraciones avanzadas.


Desde el momento en que expusiste tu servidor al mundo de internet, la seguridad no es una opción, sino una necesidad.
Un momento de descuido puede resultar en consecuencias fatales.
Fail2Ban será un sólido escudo que bloqueará dichas amenazas a tiempo.
No olvides que en este mismo instante, alguien está atacando tu servidor.