Fail2ban supervisa los registros de los servicios y bloquea temporalmente las IP que se comportan de forma abusiva (fallos repetidos de SSH, sondeo HTTP, etc.). Complementa UFW y el refuerzo de SSH.
Requisitos previos
- Ubuntu/Debian (o derivado) con
sudo - El servicio a proteger ya en ejecución (p. ej.
sshd,nginx)
Instalación
Bashsudo apt update && sudo apt install -y fail2ban sudo systemctl enable fail2ban sudo systemctl start fail2ban
Configuración básica
Coloque los archivos personalizados en /etc/fail2ban/jail.d/ para que las actualizaciones no los sobrescriban.
Cree /etc/fail2ban/jail.d/local.conf:
INI1[DEFAULT] 2bantime = 1h 3findtime = 10m 4maxretry = 5 5ignoreip = 127.0.0.1/8 ::1 6 7[sshd] 8enabled = true 9port = ssh 10logpath = %(sshd_log)s 11backend = %(sshd_backend)s
Si cambió el puerto SSH, establezca port = 2222 (ejemplo) en lugar de ssh.
Recargue Fail2ban:
Bashsudo systemctl restart fail2ban sudo fail2ban-client status sudo fail2ban-client status sshd
Nginx (patrones HTTP agresivos)
Añada por ejemplo:
INI[nginx-http-auth] enabled = true port = http,https logpath = /var/log/nginx/error.log
Ajuste las rutas de registro según su configuración.
Buenas prácticas
- Añada su IP fija a
ignoreipdurante las pruebas. - Compruebe
sudo fail2ban-client status sshdtras el despliegue. - Los bloqueos son temporales (
bantime); ajústelos según su tolerancia.
Desbloquear una IP manualmente
Bashsudo fail2ban-client set sshd unbanip 198.51.100.10
Solución de problemas
- Sin bloqueos: asegúrese de que
enabled = true, quelogpathes correcto y que el servicio registra los fallos. - Bloqueado fuera: use la consola / IPMI de su proveedor u otra IP, luego corrija
ignoreipo desbloquee.