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.