Fail2ban
Утилита Fail2ban работает с логами и при нахождении определённых событий добавляет IP адреса в правила блокировки iptables.
Установка fail2ban
sudo apt update && sudo apt upgrade sudo dnf install fail2ban sudo apt install fail2ban sudo systemctl start fail2ban sudo systemctl enable fail2ban
Компоненты fail2ban
- Jails: Набор правил, определяющих когда и как запретить IP-адрес с помощью Fail2ban. Jail состоит из файлов журналов, за которыми нужно следить, фильтров, использующих regex для выявления сбоев, и действий, которые запускаются при возникновении этих сбоев. Fail2ban поставляется с набором стандартных конфигураций Jail, расположенных в /etc/fail2ban/jail.conf
- Filters: Вы можете использовать регулярные выражения для проверки журналов служб на наличие признаков подозрительной деятельности, например попыток вторжения. Необходимые инструменты вы найдете в разделе /etc/fail2ban/filter.d/.
- Actions: Вы можете выполнять различные действия, например блокировать IP-адрес, оповещать с помощью уведомлений или запускать определенные сценарии. Команды, позволяющие блокировать или разблокировать IP-адрес, хранятся в файле /etc/fail2ban/action.d/ directory.
Предустановленные фильтры
В Fail2ban есть ряд заранее созданных фильтров, которые можно подключать для защиты большинства стандартных сервисов: SSH-подключение, веб-серверы, почтовые серверы и т.д.
Структура таких фильтров стандартная и включает в себя несколько разделов:
- [INCLUDES], в нём указывают другие файлы фильтров, которые должны сработать до или после этого фильтра для обеспечения более сложной фильтрации;
- [Definition], он определяет правила, по которым происходит отбор и блокировка IP-адресов;
- [Init], этот раздел нужен для описания сервиса, к которому применяется фильтр.
Также внутри раздела [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 дней;
Структура конфигурационного файла
- maxretry - максимальное количество попыток подключения
- findtime - время, за которое эти попытки были произведены
- bantime - время, на которое нужно запретить доступ с этого IP
- ignoreip - IP адреса, которые надо игнорировать
- destemail - адрес для уведомлений о блокировке
Чтобы в уведомлениях были детали о блокировке, необходимо установить 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