我正在尝试创建一个fail2ban过滤器,它会在30秒间隔内发送超过100个POST请求时禁止主机。
jail.local:
[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请求的任何主机。这意味着它可能没有考虑 findttime 或 maxretry 选项。在我看来,这是时间戳问题。
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"
任何帮助?
答案 0 :(得分:1)
我想这可能是迟到的答案,但无论如何......
您提出的摘录已禁用过滤器。
enabled = false
由于没有提及Fail2Ban版本,并且此jail缺少syslog / fail2ban日志。
我在fail2ban 0.9.3-1上测试了你的过滤器并且它工作正常但我必须启用它并且不得不放弃 action = myaction ,因为你没有提供你期望的东西fail2ban要做。
因此,此过滤器应该可以正常工作,因为它已启用并且操作也是正确的。
提供的示例中发生的情况是您的过滤器被禁用,fail2ban正在使用另一个过滤器,它检查相同的日志文件并匹配您的正则表达式但具有更多限制性规则,即在1个请求后禁止。