# Как защитить свой почтовый сервер от брутфорса при помощи Fail2ban

Брутфорс — очень распространённый метод получения доступа к чужим серверам. Специально написанная программа перебирает наиболее популярные сочетания параметров «пользователь-пароль» и в какой-то момент угадывает их. Так она получает доступ к серверу и передаёт управление стороннему оператору.

В сети «бродит» огромное количество автономно работающих ботов, сканирующих все доступные серверы и порты на предмет уязвимости. Такие атаки производятся в автоматическом режиме, владелец ботов в них даже не участвует.

В этой инструкции мы расскажем, как защитить свой почтовый сервер от брутфорс-атак при помощи стандартной утилиты Fail2ban. Мы будем отслеживать и анализировать логи Postfix и Dovecot, активируем встроенную защиту почты Fail2ban и создадим собственные фильтры.

Важно помнить, что Fail2ban работает в связке с iptables — таблицами правил для фаервола. Если по каким-то причинам ваш фаервол остановлен, то Fail2ban будет работать неправильно. IP-адреса будут добавляться в список заблокированных, но реально они начнут блокироваться только после запуска фаервола.

# Установка Fail2ban

Fail2ban устанавливается стандартной командой dnf из репозиториев CentOS:

sudo dnf install fail2ban

После установки проведём стандартные операции — запустим приложение и добавим его в автозагрузку:

sudo systemctl start fail2ban

sudo systemctl enable fail2ban

# Предустановленные фильтры

В Fail2ban есть ряд заранее созданных фильтров, которые можно подключать для защиты большинства стандартных сервисов: SSH-подключение, веб-серверы, почтовые серверы и т.д.

Структура таких фильтров стандартная и включает в себя несколько разделов:

  • [INCLUDES], в нём указывают другие файлы фильтров, которые должны сработать до или после этого фильтра для обеспечения более сложной фильтрации;

  • [Definition], он определяет правила, по которым происходит отбор и блокировка IP-адресов;

  • [Init], этот раздел нужен для описания сервиса, к которому применяется фильтр.

Также внутри раздела [Definition] во встроенных фильтрах присутствует параметр mode, отвечающий за агрессивность политики безопасности Fail2ban. В зависимости от выбранного уровня — auth, normal, rbl, ddos, extra или aggressive (комбинация всех перечисленных уровней) — к фильтрам в разделе regexp добавляются различные строки, позволяющие применять более агрессивную политику к незнакомым IP-адресам.

Мы будем работать с фильтрами, созданными для защиты Postfix и Dovecot. Мы не будем создавать новые, но при необходимости модифицируем уже имеющиеся.

# Защита Postfix

Все встроенные фильтры расположены в директории etcfail2banfilter.d.

Список всех фильтров можно посмотреть командой ls, просто перейдя в папку с фильтрами:

cd /etc/fail2ban/filter.d

ls

Список фильтров очень большой. Нам нужен postfix.conf.

Можно сразу же проверить его работу на лог-файле Postfix:

sudo fail2ban-regex /var/log/maillog /etc/fail2ban/filterd./postfix.conf

# Output
…
Lines: 20134 lines, 0 ignored, 2 matched, 20132 missed
[processed in 2.45 sec]

В результате получаем два срабатывания фильтра в файле лога. Значит, его можно запускать — к нашему серверу были подключения, отвечающие условиям фильтра.

Создадим jail, который будет запускать наш фильтр. Создадим его в стандартной папке для jail’ов со стандартным расширением .conf:

sudo vi /etc/fail2ban/jail.d/ postfix.conf

В открывшемся окне добавим информацию о нашем фильтре и об условиях блокирования IP-адресов:

[postfix]
enabled  = true
port = all
filter = postfix
logpath = /var/log/maillog
maxretry = 2
findtime = 60m
bantime = 60d

Подробнее о создании jail’ов и их структуре можно прочитать в нашей отдельной инструкции по установке и настройке Fail2ban.

Здесь просто скажем, что этим jail’ом мы активируем фильтр Postfix, который будет читать maillog и блокировать все IP-адреса, которые соответствуют его условиям, на 60 дней.

После этого можно перезапускать Fail2ban и следить за работой нашего фильтра, но мы продолжим настройку и подключим такой же фильтр для Dovecot.

# Защита Dovecot

Принцип защиты Dovecot будет отличаться от защиты Postfix только путём к лог-файлам. Основная информация о подключении к Dovecot находится по адресу varlogdovecotinfo.log. Именно этот путь мы будем указывать в нашем Jail’е:

sudo vi /etc/fail2ban/jail.d/dovecot.conf

В открывшийся файл добавим аналогичную информацию для блокировки IP-адресов:

[dovecot]
enabled  = true
port = all
filter = dovecot
logpath = /var/log/dovecot/info.log
maxretry = 2
findtime = 60m
bantime = 60d

Здесь мы указали, что используем фильтр dovecot и все IP-адреса, которые подпадают под его действие, блокируем на 60 дней.

# Создание фильтров для защиты от нестандартных атак

Мы отдельно описывали создание фильтров для Fail2ban и рассказывали, как их применять. Здесь же расскажем о ситуации, когда работает уже имеющийся фильтр, но при этом попытки взлома сервера продолжаются.

Продолжающиеся попытки взлома можно отследить в одном из логов (для Postfix или Dovecot). В этом случае нужно будет создать отдельное правило для фильтрации подобных попыток проникновения и добавить его к остальным правилам фильтра.

Ищем в лог-файле повторяющуюся строчку, IP-адрес из которой продолжает попытки доступа, но при этом до сих пор не попал в список заблокированных.

Создаём на основе этой строки правило для блокирования и добавляем её в наш фильтр в раздел failregex.

После этого перезапускаем Fail2ban командой:

sudo systemctl restart fail2ban

Далее проверяем, как работает наш обновлённый фильтр:

sudo fail2ban-client status jail_name

Если всё было сделано правильно, IP-адрес добавится в список заблокированных, и его можно будет увидеть. В логах также перестанут появляться записи с этим адресом.

# Работа с заблокированными IP-адресами

Посмотреть список всех заблокированных IP-адресов можно в логе Fail2ban. Сам лог достаточно большой, поскольку туда записываются абсолютно все события в программе. Мы посмотрим только список заблокированных IP:

sudo zgrep 'Ban' /var/log/fail2ban.log*

Эта команда выведет на экран все записи с IP-адресами и пометкой Ban из лога Fasil2ban.

Там будут стандартные записи вроде таких:

2022-04-12 09:16:05,992 fail2ban.actions        [2387]: NOTICE  [dovecot] Ban 5.34.207.58

Также вам могут встретиться записи следующего формата:

2022-04-12 09:16:08,050 fail2ban.actions        [2387]: NOTICE  [postfix] Restore Ban 94.102.61.22

Здесь комментарий restore означает, что блокировка адреса была восстановлена. Это происходит, например, при перезапуске Fail2ban — он отключается, затем снова включается, проверяет список заблокированных IP и обновляет его.

Удалить случайно попавший в список заблокированных IP-адрес можно командой unban:

sudo fail2ban-client unban IP-address

Теперь ваш сервер защищён от брутфорс-атак. Вы можете периодически проверять работу Fail2ban, чтобы убедиться, что фильтры работают и исправно блокируют «сомнительные» подключения.