2

我正在尝试创建一个 fail2ban 过滤器,当它在 30 秒的间隔内发送超过 100 个 POST 请求时将禁止主机。

监狱本地:

[nginx-postflood]

enabled = false
filter = nginx-postflood
action = myaction
logpath = /var/log/nginx/access.log
findtime = 30
bantime = 100
maxretry = 100

nginx-postflood.conf

[Definition]
failregex = ^<HOST>.*"POST.*
ignoreregex =

使用 GREP 我能够测试正则表达式,并且确实匹配主机和 POST 请求。

问题是它禁止任何执行至少一个 POST 请求的主机。这意味着它可能没有考虑findttimemaxretry选项。在我看来,这是时间戳问题。

nginx 日志示例行:

5.5.5.5 - user [05/Aug/2014:00:00:09 +0200] "POST /auth HTTP/1.1" 200 6714 "http://referer.com" "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:31.0) Gecko/20100101 Firefox/31.0"

有什么帮助吗?

4

1 回答 1

1

我想答案可能为时已晚,但无论如何......

您提出的摘录已禁用过滤器。

启用 = 假

由于没有提及 Fail2Ban 版本,因此该监狱缺少 syslog/fail2ban 日志。

我在 fail2ban 0.9.3-1 上测试了你的过滤器,它工作正常,尽管我必须启用它并且不得不放弃action = myaction行,因为你没有提供你期望 fail2ban 做的事情。

因此,此过滤器应该可以正常工作,前提是它已启用并且操作也是正确的。

提供的示例中发生的情况是您的过滤器被禁用,fail2ban 正在使用另一个过滤器,它检查相同的日志文件并匹配您的正则表达式,但具有更多限制性规则,即在 1 个请求后禁止。

于 2016-04-29T14:19:22.653 回答