Инструменты пользователя

Инструменты сайта


freebsd:network:fail2ban

Это старая версия документа!


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=fail2ban]
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
freebsd/network/fail2ban.1592414813.txt.gz · Последнее изменение: andrei