Регулярное выражение фильтра Fail2ban

Регулярное выражение фильтра Fail2ban

я использую centos8 +fail2ban + haproxy

У меня есть специальный джейл "my-haproxy404" с такими настройками:

[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

и фильтр:

[Definition]
failregex = .*:<HOST>(?::\d+)?\s+.*\d* 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 687 - - ---- 1/1/0/0/0 0/0 "GET /test/string HTTP/1.1"

так, ...может быть, это и работает, но в fail2ban.log я вижу такой IP:

INFO    [my-haproxy404] Found 0.0.217.211 - 2021-09-19 14:38:21

это не настоящий IP (настоящий IP: 77.77.77.77), fail2ban блокирует этот IP (0.0.217.211) ....но (77.77.77.77) все еще работает

Я знаю, что у меня проблема с регулярным выражением.

можете ли вы помочь мне с правильным правилом регулярного выражения для этой строки 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

с уважением

решение1

failregex = ^\s*\S+ haproxy\[\d+\]: <ADDR>:\d+(?: \[[^\]]+\])? \S+ \S+ \d+(?:/\d+)+ 404\b

вы также можете заменить 404\bна , (?!401)[45]\d\d\bчтобы соответствовать любому «плохому» коду 4xxи 5xxза исключением 401(нужны некоторые предварительные требования для правильного рассмотрения рукопожатий авторизации, и есть фильтр haproxy-http-auth, который можно использовать для этого)

Связанный контент