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

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


freebsd:network:fail2ban

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
freebsd:network:fail2ban [2020/06/17 14:44] andreifreebsd:network:fail2ban [2020/06/17 19:34] (текущий) – [Jail] andrei
Строка 20: Строка 20:
 ==== PF ==== ==== PF ====
  
 +В дистрибутиве идет очень мудреный конфиг для pf. Да и на FreeBSD 12.1 он у меня не запустился (вылетал с ошибкой при запуске fail2ban). Поэтому я написал свой простенький набор действий.
  
 +Создаем файл /usr/local/etc/fail2ban/action.d/my-pf.local со следующим содержанием:
 +
 +<code>
 +[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
 +</code>
 +
 +Где:
 +  * **actionban** команда для блокировки ip адреса;
 +  * **actionunban** команда для разблокировки;
 +  * **tablename** имя таблицы в конфиге pf.
 +
 +Осталось только настроиться сам pf. В файл /etc/pf.conf добавляем:
 +
 +<code>
 +table <fail2ban> persist
 +
 +block return in quick from <fail2ban>
 +</code>
 +
 +==== Sendmail ====
 +
 +Так же в состав fail2ban не входят скрипты для блокировки буртефорса паролей в sendmail-е. Но это можно легко исправить. =) По умолчанию в лог /var/log/auth.log не записывается ip злоумышленника, а только сам факт ошибки авторизации. Но нужный нам адрес можно получить другим способом. Для этого необходимо добавить следующую директиву в конфиг sendmail-а:
 +
 +<code>
 +define(`confLOG_LEVEL', `10')dnl
 +</code>
 +
 +И пересобрать его:
 +
 +<code>
 +cd /etc/mail
 +make install
 +service sendmail restart
 +</code>
 +
 +Теперь в файле /var/log/maillog будут записываться примерно такие строчки:
 +
 +<code>
 +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]
 +</code>
 +
 +Вот их мы и будем отслеживать. Для чего напишем наш собственный фильтр. Создаем файл /usr/local/etc/fail2ban/filter.d/sendmail-sasl.conf со слудующим содержанием:
 +
 +<code>
 +# 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 =
 +</code>
 +==== Jail ====
 +
 +Переходим к настройки самого fail2ban. Создаем файл /usr/local/etc/fail2ban/jail.local:
  
-jail.local: 
 <code> <code>
 [DEFAULT] [DEFAULT]
 banaction = my-pf banaction = my-pf
-action = my-pf[table=bruteforce] +ignoreip = 127.0.0.1 10.1.1.0/24 
-ignoreip = 127.0.0.1 10.30.10.0/24 +bantime 2h 
-bantime 7200 +findtime = 1h
-findtime  259200+
  
 maxretry = 3 maxretry = 3
- 
  
 [ssh] [ssh]
Строка 55: Строка 123:
 [sendmail-sasl] [sendmail-sasl]
 enabled  = true enabled  = true
 +bantime  = 24h
 filter   = sendmail-sasl filter   = sendmail-sasl
-action = my-pf[table=bruteforce] 
-port="submission,465,smtp", protocol=tcp] 
 logpath  = /var/log/maillog logpath  = /var/log/maillog
 </code> </code>
  
-my-pf.conf+Где
-<code> +  * **banaction** подключение нашего конфиги для работы с pf; 
-[Definition] +  * **ignoreip** список адресов, которые не надо блокировать; 
-actionstart = +  * **bantime** на какое время блокировать ip; 
-actionstop = +  * **findtime** промежуток времени в который учитываются повторения.
-actioncheck = +
-actionban = /sbin/pfctl -t <tablename> -T add <ip>/32 +
-actionunban = /sbin/pfctl -t <tablename> -T delete <ip>/32+
  
-[Init] +Поумолчанию я блокирую ip на 2 часа, но для нашего правила sendmail-sasl я делал исключение - в таблицу они попадают на сутки.
-tablename = fail2ban +
-</code>+
  
-sendmail-sasl.conf: +===== Запуск и отладка =====
-<code> +
-# Fail2Ban filter for sendmail authentication failures +
-#+
  
-[INCLUDES]+Запускаем:
  
-before = common.conf +<code
- +service fail2ban start
-[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 =+
 </code> </code>
  
-sendmail:+Проверить работу можно изучая лог файл /var/log/fail2ban.log. А так же припомощи специальной команды:
 <code> <code>
-define(`confLOG_LEVEL', `10')dnl +fail2ban-client status 
-</code> +fail2ban-client status ssh 
 +</code> 
freebsd/network/fail2ban.1592405069.txt.gz · Последнее изменение: andrei