Утилита fail2ban является популярным инструментом для защиты от перебора паролей. Принцип действия относительно просто и эффективен: если с какого-то хоста зафиксировано большое количество ошибок авторизации в течении короткого времени то этот хост блокируется на некоторое время. Дополнительно радует возможность легко добавлять поддержку новых сервисов и большой набор пресетов, идущих в комплекте.
Определённым недостатком является тот факт, что многие пресеты либо устарели, либо расчитаны на формат логов по умолчанию, и не работают с форматами логов, которые предлагают майнтайнеры популярных дистрибутивов. В качестве примера подобного сервиса можно привести MTA Exim, логи которого уже несколько лет не соответствуют правилам из комплекта fail2ban. Далее будет приведён пример конфигурации fail2ban с поддержкой актуального формата логов MTA Exim.
Всё нижеописанное мы будем делать на сервере под управлением Ubuntu 18.04 LTS с запущенным на нём MTA Exim. Для начала установим fail2ban:
apt install fail2ban
Затем создадим файл "/etc/fail2ban/filter.d/exim-new.conf", следующего содержания:
[INCLUDES] before = exim-common.conf [Definition] failregex = SMTP syntax error in \".+\" H=\[<HOST>\] NULL character\(s\) present \(shown as \'\?\'\)*$ authenticator failed for (?:[^\[\( ]* )?(?:\(\S*\) )?\[<HOST>\](?::\d+)?(?: I=\[\S+\](:\d+)?)?: 535 Incorrect authentication data \(set_id=.*\).*$ SMTP protocol error in \"[^"]*\" H=\([^)]*\) \[<HOST>\] \w+ authentication mechanism not supported SMTP protocol synchronization error \([^)]*\): rejected (?:connection from|"\S+") %(host_info)s(?:next )?input=".*"\s*$ %(host_info)srejected RCPT [^@]+@\S+: (?:relay not permitted|Sender verify failed|Unknown user|Unrouteable address)\s*$ mode = normal ignoreregex =
Здесь учитываются не только прямые попытки перебора, но и попытки отправки почты на несуществующие адреса. Причина этого достаточно проста, хотя и не совсем очевидно: вместо перебора большого количества пар "логин+пароль" взломщик перебирает получателей, составляя базу потенциальных логинов и дальше может уже целенаправленно подбирать к ним пароли.
В качестве альтернативы можно настроить ловушку ("catchmail"), собирающую все письма для несуществующих ящиков в какой-то один ящик. Но об этом как-нибудь в другой раз.
Протестировать шаблон можно командой:
fail2ban-regex /var/log/exim4/mainlog /etc/fail2ban/filter.d/exim-new.conf
Эта команда покажет сколько раз какое регулярное выражение сработало на указанном логе. Разумеется тестировать стоит не на пустом логе. Убедившись что регулярные выражения срабатывают переходим к включению нашего нового фильтра. Создаём файл "/etc/fail2ban/jail.local" если он ещё не существует и дописываем в него следующие строки:
[exim-new] port = smtp,465,submission logpath = %(exim_main_log)s enabled = true bantime = 6h findtime = 15m
После этого перезапускаем fail2ban:
systemctl restart fail2ban
Просмотреть списки забаненых адресов и общую статистику для нашего фильтра можно командой:
fail2ban-client status exim-new
На этом всё. Приятной работы!
Anonymous 2022-09-13 13:05:47 (#)