Это старая версия документа!
Содержание
Fail2Ban: ударим банхаммером по брутефорсу!
Введение
Bruteforce ( перебор паролей) - это плохо и с ним надо бороться. Для решение этой задачи был разработан набор скриптов fail2ban. Из коробки он у меня отказался работать с pf, и не смог удовлетворить все мои потребности: в частности не хватало скриптов для блокировки подбора паролей в sendmail.
Установка
Для установки нам надо знать какая версия python, и выбрать подходящий пакет с fail2ban. В моем случает это py37-fail2ban. Устанавливаем его и включаем в rc.conf:
pkg install py37-fail2ban service fail2ban enable
Настройка
PF
В дистрибутиве идет очень мудреный конфиг для pf. Да и на FreeBSD 12.1 он у меня не запустился (вылетал с ошибкой при запуске fail2ban). Поэтому я написал свой простенький набор действий.
Создаем файл /usr/local/etc/fail2ban/action.d/my-pf.local со следующим содержанием:
[Definition] actionstart = actionstop = actioncheck = actionban = /sbin/pfctl -t <tablename> -T add <ip>/32 actionunban = /sbin/pfctl -t <tablename> -T delete <ip>/32 [Init] tablename = fail2ban
Где:
- actionban команда для блокировки ip адреса;
- actionunban команда для разблокировки;
- tablename имя таблицы в конфиге pf.
Осталось только настроиться сам pf. В файл /etc/pf.conf добавляем:
table <fail2ban> persist block return in quick from <fail2ban>
Sendmail
Так же в состав fail2ban не входят скрипты для блокировки буртефорса паролей в sendmail-е. Но это можно легко исправить. По умолчанию в лог /var/log/auth.log не записывается ip злоумышленника, а только сам факт ошибки авторизации. Но нужный нам адрес можно получить другим способом. Для этого необходимо добавить следующую директиву в конфиг sendmail-а:
define(`confLOG_LEVEL', `10')dnl
И пересобрать его:
cd /etc/mail make install service sendmail restart
Теперь в файле /var/log/maillog будут записываться примерно такие строчки:
Jun 17 17:58:14 gw3 sm-mta[37333]: 05HEve20037333: AUTH failure (LOGIN): authentication failure (-13) SASL(-13): authentication failure: checkpass failed, relay=[46.38.145.247]
Вот их мы и будем отслеживать. Для чего напишем наш собственный фильтр. Создаем файл /usr/local/etc/fail2ban/filter.d/sendmail-sasl.conf со слудующим содержанием:
# Fail2Ban filter for sendmail authentication failures
#
[INCLUDES]
before = common.conf
[Definition]
_daemon = sendmail
failregex = ^%(__prefix_line)s\w{12,14}: AUTH failure \(LOGIN\): authentication failure \(-13\) SASL\(-13\): authentication failure: checkpass failed, relay=(\S+ )?\[<HOST>\]( \(may be forged\))?$
ignoreregex =
Jail
Переходим к настройки самого fail2ban. Создаем файл /usr/local/etc/fail2ban/jail.local:
[DEFAULT] banaction = my-pf action = my-pf[table=bruteforce] ignoreip = 127.0.0.1 10.1.1.0/24 bantime = 2h findtime = 259200 maxretry = 3 [ssh] enabled = true filter = bsd-sshd logpath = /var/log/auth.log [dovecot] enabled = true filter = dovecot [sendmail] enabled = true filter = bsd-sendmail [sendmail-auth] enabled = true [sendmail-reject] enabled = true [sendmail-sasl] enabled = true bantime = 24h filter = sendmail-sasl action = my-pf[table=bruteforce] port="submission,465,smtp", protocol=tcp] logpath = /var/log/maillog
