
Estoy usando centos8 +fail2ban + haproxy
Tengo una cárcel especial "my-haproxy404" con esta configuración:
[my-haproxy404]
enabled = true
port = http,https
filter = my-haproxy404
logpath = /var/log/my-haproxy.log
backend = poller
journalmatch =
maxretry = 3
bantime = 86400
findtime = 3600
y filtrar:
[Definition]
failregex = .*:<HOST>(?::\d+)?\s+.*\d* 404
mi línea de registro de ejemplo es:
Sep 19 14:38:21 localhost haproxy[53925]: 77.77.77.77:55763 [19/Sep/2021:14:38:21.483] backend1 line1/test1 0/0/12/88/100 404 687 - - ---- 1/1/0/0/0 0/0 "GET /test/string HTTP/1.1"
Entonces... tal vez esto funcione, pero en fail2ban.log veo una IP como:
INFO [my-haproxy404] Found 0.0.217.211 - 2021-09-19 14:38:21
esta no es una IP real (la IP real es: 77.77.77.77), fail2ban bloquea esta IP (0.0.217.211) ....pero (77.77.77.77) sigue funcionando
Sé que tengo un problema con la expresión regular.
¿Puedes ayudarme con la regla de expresión regular correcta para esta cadena 404?
Sep 19 14:38:21 localhost haproxy[53925]: 77.77.77.77:55763 [19/Sep/2021:14:38:21.483] backend1 line1/test1 0/0/12/88/100 404
saludos
Respuesta1
failregex = ^\s*\S+ haproxy\[\d+\]: <ADDR>:\d+(?: \[[^\]]+\])? \S+ \S+ \d+(?:/\d+)+ 404\b
también puede reemplazar 404\b
con (?!401)[45]\d\d\b
para que coincida con cualquier código "incorrecto" 4xx
y 5xx
excepción 401
(se necesitan algunos requisitos previos para considerar los apretones de manos de autorización correctamente y hay un filtro haproxy-http-auth
que se puede usar para eso)