Fail2ban

Утилита 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

  • 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