Утилита Fail2ban работает с логами и при нахождении определённых событий добавляет IP адреса в правила блокировки iptables.
sudo apt update && sudo apt upgrade sudo dnf install fail2ban sudo apt install fail2ban sudo systemctl start fail2ban sudo systemctl enable fail2ban
В Fail2ban есть ряд заранее созданных фильтров, которые можно подключать для защиты большинства стандартных сервисов: SSH-подключение, веб-серверы, почтовые серверы и т.д.
Структура таких фильтров стандартная и включает в себя несколько разделов:
Также внутри раздела [Definition] во встроенных фильтрах присутствует параметр mode, отвечающий за агрессивность политики безопасности Fail2ban. В зависимости от выбранного уровня — auth, normal, rbl, ddos, extra или aggressive (комбинация всех перечисленных уровней) — к фильтрам в разделе regexp добавляются различные строки, позволяющие применять более агрессивную политику к незнакомым IP-адресам.
Мы будем работать с фильтрами, созданными для защиты Postfix и Dovecot. Мы не будем создавать новые, но при необходимости модифицируем уже имеющиеся.
Конфигурационный файл по умолчанию
vi /etc/fail2ban/jail.d/default.conf
Встроенные фильтры расположены в директории /etc/fail2ban/filter.d.
cd /etc/fail2ban/filter.d ls
sudo fail2ban-regex /var/log/maillog /etc/fail2ban/filterd./postfix.conf
Создадим наш фильтр
sudo vi /etc/fail2ban/jail.d/ postfix.conf
[postfix] enabled = true port = all filter = postfix logpath = /var/log/maillog maxretry = 2 findtime = 60m bantime = 60d ignoreip = 127.0.0.1/8 23.34.45.56 destemail=admin@example.com
* В данном примере, если в течение 60 минут будет найдено 3 строки (maxretry = 2), содержащих критерий фильтра, Fail2ban заблокирует IP-адрес, с которого идет подключение на 60 дней;
Чтобы в уведомлениях были детали о блокировке, необходимо установить whois
sudo apt install whois
Команда для вывода на экран сведений о работе jail-а, отвечающего за службу sshd:
sudo fail2ban-client status sshd
Status for the jail: sshd |- Filter | |- Currently failed: 0 | |- Total failed: 0 | `- File list: /var/log/auth.log `- Actions |- Currently banned: 0 |- Total banned: 0 `- Banned IP list:
После изменения необходимо перезагрузить fail2ban
sudo systemctl restart fail2ban
fail2ban-client status fail2ban-client status <имя правила> iptables -L -n --line
Посмотреть заблокированный адрес
sudo zgrep 'Ban' /var/log/fail2ban.log*
Удалить случайно попавший в список заблокированных IP-адрес можно командой unban
sudo fail2ban-client unban IP-address sudo fail2ban-client set <имя правила> unbanip <IP-адрес>
iptables -D <цепочка правил> -s IP-адрес iptables -D fail2ban-ssh -s 10.212.245.29