我正在尝试创建一个 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 请求的主机。这意味着它可能没有考虑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"
有什么帮助吗?