# Как защитить свой почтовый сервер от брутфорса при помощи 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, чтобы убедиться, что фильтры работают и исправно блокируют «сомнительные» подключения.