Fail2ban и Exim в Ubuntu

()

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

На этом всё. Приятной работы!

Ключевые слова: fail2ban, exim, exim4.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

Комментарии:

Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2019 Вадим Калинников aka MooSE