Operar Fail2Ban de manera efectiva: Guía de optimización de seguridad basada en casos prácticos

1. Introducción

Al administrar un servidor Linux, a menudo experimentarás múltiples intentos de inicio de sesión simplemente por tener el puerto SSH abierto. Una herramienta que muchos utilizan para prevenir esto es Fail2Ban. Sin embargo, simplemente instalarlo y configurarlo no es suficiente. Con el tiempo, la lista de bloqueados puede acumularse en cientos o miles, impactando el rendimiento del servidor.

Este artículo comparte cómo operar Fail2Ban de manera más efectiva y eficiente basado en experiencias reales de administración de servidores.

Si te preguntas sobre los métodos de instalación y configuración básica de Fail2Ban, consulta nuestro artículo anterior: El guardián de los servidores Linux, Fail2Ban


2. Experiencia práctica: 1,113 IP bloqueadas en 3 semanas

Tras aproximadamente 3 semanas de haber configurado fail2ban en mi servidor Linux de prueba, un día ejecuté el siguiente comando:

sudo fail2ban-client status sshd

Los resultados fueron los siguientes:

Actualmente fallidos: 1
Total fallidos: 5330
Actualmente bloqueados: 1110
Total bloqueados: 1113

En 3 semanas, se bloquearon 1,113 IPs, de las cuales 1,110 todavía estaban bloqueadas. Esto se debió a que configuré bantime = -1 para un bloqueo permanente.

Al principio, configuré con la mentalidad de “¡no perdonaré a quienes intenten una sola vez!”, pero después de ver miles de IPs bloqueadas acumulándose en iptables, comencé a preocuparme por el consumo de recursos del sistema y la eficiencia de la gestión.

Finalmente, comencé a reflexionar sobre un modo de operación sostenible y estratégico para Fail2Ban.


Tux cuidando la cárcel de reincidencia

3. Estrategia de mejora en la configuración de Fail2Ban

✅ Ajustemos bantime de forma flexible

  • El bloqueo temporal es más realista que el bloqueo permanente.
  • Ejemplo:
  • bantime = 86400        # Bloqueo de 1 día
    findtime = 600         # En 10 minutos
    maxretry = 3           # 3 fallos

Flujo de bloqueo de Fail2Ban

✅ Utilizar la cárcel de reincidencia

🔎 ¿Qué es la cárcel de reincidencia?

Es una función avanzada que fail2ban emplea para monitorear el archivo fail2ban.log. Cuando una IP es bloqueada repetidamente en múltiples cárceles, esta IP es bloqueada a largo plazo. En otras palabras, es un 'sistema de control de reincidencia' que castiga más severamente a los reincidentes.

Generalmente, las cárceles individuales como sshd, nginx, ftp bloquean solo por un corto periodo de tiempo, pero la cárcel de recidive selecciona solo las IPs con 'historial delictivo acumulativo' y las bloquea por más tiempo.

  • Aplicar bloqueo a largo plazo solo a las IPs que son bloqueadas repetidamente
  • Los atacantes comunes desaparecen en un día, pero los reincidentes pueden ser filtrados
  • Ejemplo de configuración:
  • [recidive]
    enabled = true
    logpath = /var/log/fail2ban.log
    bantime = 604800        # 1 semana
    findtime = 86400
    maxretry = 5

✅ Automatización de la gestión de registros

  • Configurar logrotate para limpiar automáticamente antes de que /var/log/fail2ban.log se vuelva grande
  • Usar cron o systemd timer para resumir y enviar por correo los resultados de fail2ban-client status

4. Ejemplo de script de referencia

#!/bin/bash
fail2ban-client status sshd > /tmp/sshd-status.log
echo "Cuenta de bloqueos actuales: $(grep 'Actualmente bloqueados' /tmp/sshd-status.log)" | mail -s "Estado de Fail2Ban SSHD" your@email.com

5. Conclusión: Fail2Ban es una herramienta, no un arma

Fail2Ban es una herramienta muy útil para detener ataques aleatorios, pero una gestión excesiva puede convertirse en una causa de sobrecarga del servidor en lugar de un simple bloqueo.

Al implementar políticas de bloqueo realistas junto con herramientas de gestión automatizadas, Fail2Ban se transforma de una carga a un sólido socio de seguridad.


Próximo artículo

Exploraremos la configuración de logrotate para prevenir que el archivo de log /var/log/fail2ban.log se vuelva excesivamente grande. Aquellos interesados, ¡suscríbanse!