Я пытаюсь создать фильтр fail2ban, который будет блокировать хост, когда он отправляет более 100 запросов POST с интервалом в 30 секунд.
тюрьма.местный:
[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. Вероятно, это означает, что он не принимает во внимание параметры 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"
Любая помощь?