我正在尝试创建一个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 我能够测试正则表达式,它确实匹配 Host 和 POST 请求。
问题是它禁止任何至少执行一个 POST 请求的主机。这意味着它可能不会采取寻找时间或者最大重试次数选项予以考虑。在我看来,这是时间戳问题。
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"
有什么帮助吗?