Содержание

Fail2Ban

Служба для отслеживания и блокирования брутфорса.
Для проверки анализирует журналы авторизации, обычно это- /var/log/auth.log, путь указывается в конфигах.
Для блокировки используется системный firewall. Правила поведения можно гибко настраивать скриптами.

Конфигурация

Стандартная конфигурация прописана в файле /etc/fail2ban/jail.conf, его менять не следует, для настройки нужно создавать собственные файлы (*.conf или *.local) и размещать их в каталоге /etc/fail2ban/jail.d, эти файлы будут иметь приоритет перед стандартной конфой.

Собственные правила можно создавать в отдельных файлах или в общем, правила все равно разбиваются на секции.
Общие для всех правил параметры, можно вынести в секцию [DEFAULT] (верхний регистр!).
Для работы нужно активировать как минимум одну секцию, не считая дефолтной.

В файле /etc/fail2ban/fail2ban.conf задается общая конфигурация службы.

Время и часовой пояс, на сервере, должны быть корректными, по крайней мере локальное время должно совпадать со временем в логах.

Управление

Если после бана вручную удалить IP-адрес из файервола, fail2ban не будет его банить повторно, только делать пометки в логе «already-banned», но после перезапуска службы, IP снова попадет в бан сразу же, без попыток входа.

Для разблокировки хоста следующая команда:

# fail2ban-client set [name-jail] unbanip [ip-addr]

Посмотреть перечень установленных «name-jail» (т.е. заданных правил)

# fail2ban-client status

Результаты своей работы служба пишет в свой лог, обычно- /var/log/fail2ban.log

Пример конфигурации

Время указывается в секундах, вроде можно использовать идентификаторы типа m, h и т.д., стоит уточнять.
Для вечного бана нужно указать -1.

:!: Пример конфигурации ssh
[DEFAULT]
maxretry = 3
findtime = 480
bantime = -1
action = iptables-allports
# ignoreip = 127.0.0.1 # исключение, можно указать сегментом сети, типа 192.168.0.0/24
 
[sshd]
enabled = true
port = ssh
filter = sshd
action = iptables[name=sshd, port=ssh, protocol=tcp, blocktype="DROP"]
logpath = /var/log/auth.log
:!: Еще пример, ssh+ apache
[DEFAULT]
maxretry = 3
findtime = 480
bantime = -1
action = iptables-allports
ignoreip = 92.124.136.88
 
[sshd]
enabled = true
port = ssh
filter = sshd
action = iptables[name=sshd, port=ssh, protocol=tcp, blocktype="DROP"]
logpath = /var/log/auth.log
 
[apache]
enabled = true
port = http,https
filter = apache-auth
action = iptables[name=apache-auth, port=http,https, protocol=tcp, blocktype="DROP"]
logpath = /var/log/apache*/*error.log
 
[apache-overflows]
enabled = true
port = http,https
filter = apache-overflows
action = iptables[name=apache-overflows, port=http,https, protocol=tcp, blocktype="DROP"]
logpath = /var/log/apache*/*error.log
 
[apache-badbots]
enabled = true
port = http,https
filter = apache-badbots
action = iptables[name=apache-badbots, port=http,https, protocol=tcp, blocktype="DROP"]
logpath = /var/log/apache*/*error.log