
estou usando centos8 + fail2ban + haproxy
Eu tenho uma prisão especial "my-haproxy404" com estas configurações:
[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
e filtrar:
[Definition]
failregex = .*:<HOST>(?::\d+)?\s+.*\d* 404
minha linha de log de exemplo é:
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"
então, ... talvez isso funcione, mas em fail2ban.log vejo IP como:
INFO [my-haproxy404] Found 0.0.217.211 - 2021-09-19 14:38:21
este não é o IP real (o IP real é: 77.77.77.77), fail2ban bloqueia este IP (0.0.217.211) .... mas (77.77.77.77) ainda está funcionando
eu sei que tenho problemas com regexp
você pode me ajudar com a regra regexp correta para esta string 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
cumprimentos
Responder1
failregex = ^\s*\S+ haproxy\[\d+\]: <ADDR>:\d+(?: \[[^\]]+\])? \S+ \S+ \d+(?:/\d+)+ 404\b
você também pode substituir 404\b
por (?!401)[45]\d\d\b
para corresponder a qualquer código "ruim" 4xx
e 5xx
exceto 401
(são necessários alguns pré-requisitos para considerar os handshakes de autorização corretamente e há um filtro haproxy-http-auth
que pode ser usado para isso)