fail2ban vigila un archivo de registro buscando un patrón, cuenta las coincidencias por dirección y añade una regla de cortafuegos cuando se supera la cuenta. Eso es todo lo que hace, y saberlo te dice exactamente en qué puede y en qué no puede ayudarte.
Qué detiene
- Los intentos repetidos de contraseña por SSH, aunque las claves ya los detienen.
- Los inicios de sesión fallidos y repetidos en un formulario, si esos fallos se registran.
- Los escáneres simples que recorren una lista de rutas conocidas.
Qué no detiene
Es reactivo: actúa tras varios fallos, así que un único acierto no se ve nunca. Tampoco sirve contra un intento repartido entre mil direcciones que prueban dos veces cada una, y así es exactamente como se ve un intento serio.
Una cárcel para un inicio de sesión web
# /etc/fail2ban/filter.d/mysite-login.conf
[Definition]
failregex = ^<HOST> .* "POST /login" 401
ignoreregex =
# /etc/fail2ban/jail.local
[mysite-login]
enabled = true
filter = mysite-login
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 600
bantime = 3600
Prueba el patrón antes de activarlo
fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/mysite-login.conf
Imprime cuántas líneas han coincidido. Cero coincidencias significa que la cárcel no se disparará nunca y que te creerás protegido.
No te bloquees a ti mismo
ignoreip = 127.0.0.1/8 ::1 YOUR.OFFICE.IP.HERE
Detrás de una CDN cada petición lleva la dirección del proxy, así que el primer bloqueo bloquea el proxy y con él a todos tus visitantes. Configura primero la dirección real del cliente; consulta el artículo sobre estar detrás de una CDN.
fail2ban-client status mysite-login
fail2ban-client set mysite-login unbanip 1.2.3.4
Empieza con un bloqueo de una hora, no permanente. Una lista de bloqueos permanentes crece, nunca se revisa y acaba conteniendo a un cliente.