
私はcentos8 +fail2ban + haproxyを使用しています
私は特別な jail「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