Fail2ban для nginx после флуда игнорирует временные интервалы

Я пытаюсь создать фильтр 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"

Любая помощь?


person Mark    schedule 05.08.2014    source источник
comment
ты смог это решить?   -  person Hassan Baig    schedule 01.03.2016


Ответы (1)


Я думаю, что, возможно, уже поздно для ответа, но в любом случае...

Выдержка, которую вы представили, имеет отключенный фильтр.

включено = ложь

Поскольку версия Fail2Ban не упоминается, а журналы syslog/fail2ban для этого джейла отсутствуют.

Я проверил ваш фильтр на fail2ban 0.9.3-1, и он работает нормально, хотя мне пришлось включить его и убрать строку с action = myaction, так как вы не указали, что вы ожидаете от fail2ban. .

Следовательно, этот фильтр должен работать нормально, если он включен и действие правильное.

В приведенном примере происходит то, что ваш фильтр отключен, а fail2ban использует другой фильтр, который проверяет тот же файл журнала и соответствует вашему регулярному выражению, но имеет более строгие правила, то есть бан после 1 запроса.

person MMT    schedule 29.04.2016