![Fail2ban 过滤器正则表达式](https://linux22.com/image/770585/Fail2ban%20%E8%BF%87%E6%BB%A4%E5%99%A8%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F.png)
我使用 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
可以用于此)