У меня настроен fail2ban, как показано ниже:
Это работает отлично, и я хочу сохранить его таким образом, чтобы у действительного пользователя была возможность повторить попытку входа в систему после тайм-аута. Теперь я хочу реализовать правило, согласно которому, если один и тот же IP-адрес обнаружен как атака и заблокирован, разблокирован 5 раз, навсегда заблокировать IP-адрес и никогда больше не разблокировать. Можно ли этого добиться только с помощью fail2ban, или мне нужно написать для этого свой собственный скрипт?
Я делаю это в centos.
До версии 0.11 было нет функции по умолчанию или настройки в fail2ban для достижения этой цели. Но начиная с грядущего релиза 0.11 время бана автоматически рассчитывается и увеличивается экспоненциально с каждым новым нарушением, что в долгосрочной перспективе будет означать более или менее постоянный блок.
А пока ваш лучший подход, вероятно, настроить fail2ban для мониторинга собственного файла журнала. Это двухэтапный процесс ...
Нам может понадобиться создать фильтр проверить БАНв файле журнала (файл журнала fail2ban)
Нам нужно определить тюрьму, аналогично следующему ...
[fail2ban] enabled = true filter = fail2ban action = iptables-allports[name=fail2ban] logpath = /path/to/fail2ban.log # findtime: 1 day findtime = 86400 # bantime: 1 year bantime = 31536000
Технически это не постоянный блок, но только блоки на год (которые мы тоже можем увеличить).
В любом случае, на ваш вопрос (можно ли этого достичь только с помощью fail2ban или мне нужно написать свой собственный скрипт для этого?) ... написание собственного скрипта может сработать. Настройка скрипта для извлечения часто забанил IP-адреса, а затем поместил их в /etc/hosts.deny
я бы порекомендовал.
Я верю, если вы положите bantime = -1
в этом разделе конфигурации это постоянный блок.
Фил Хаген написал отличную статью на эту тему. "Постоянно запрещать повторных нарушителей с помощью fail2ban".
Его предложение такое же, как у Поти, но дает пошаговое руководство.
Это включало:
В fail2ban уже есть тюрьма для бана рецидива. Если вы посмотрите /etc/fail2ban/jail.conf
, вы найдете:
# Jail for more extended banning of persistent abusers
# !!! WARNING !!!
# Make sure that your loglevel specified in fail2ban.conf/.local
# is not at DEBUG level -- which might then cause fail2ban to fall into
# an infinite loop constantly feeding itself with non-informative lines
[recidive]
enabled = false
filter = recidive
logpath = /var/log/fail2ban.log
action = iptables-allports[name=recidive]
sendmail-whois-lines[name=recidive, logpath=/var/log/fail2ban.log]
bantime = 604800 ; 1 week
findtime = 86400 ; 1 day
maxretry = 5
[recidive]
enabled = true
bantime = 31536000 ; 1 year
findtime = 18144000 ; 1 month
maxretry = 2
Для проверки вашего логического уровня вы можете: fail2ban-client get loglevel
.
Со старой версией fail2ban вы можете получить эта ошибка.
Чтобы расширить ответ Чина, это довольно просто. Просто отредактируйте 2 настройки в /etc/fail2ban/jail.local
чтобы соответствовать вашим предпочтениям.
# ban time in seconds. Use -1 for forever. Example is 1 week.
bantime = 604800
# number of failures before banning
maxretry = 5
Заходим в vim, открываем /etc/fail2ban/jail.conf
и просто измените после fail2ban service restart
:
# "bantime" is the number of seconds that a host is banned.
bantime = ***1296000***
# A host is banned if it has generated "maxretry" during the last "findtime"
# seconds.
findtime = ***60000***
# "maxretry" is the number of failures before a host get banned.
maxretry = ***3***