Regexp do filtro Fail2ban

Regexp do filtro Fail2ban

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\bpor (?!401)[45]\d\d\bpara corresponder a qualquer código "ruim" 4xxe 5xxexceto 401(são necessários alguns pré-requisitos para considerar os handshakes de autorização corretamente e há um filtro haproxy-http-authque pode ser usado para isso)

informação relacionada