Установка и настройка Fail2ban

Fail2Ban – это сервис для блокировки хостов, вызывающих множественные ошибки при попытках аутентификации.

Fail2Ban работает путем мониторинга файлов журналов (например, /var/log/auth.log, /var/log/apache/access.log и др.) для выбранных записей и запуска сценариев на их основе. Чаще всего это используется для блокировки выбранных IP-адресов, которые могут принадлежать хостам, пытающимся нарушить безопасность системы. Он может запретить любой IP-адрес хоста, который делает слишком много попыток входа в систему или выполняет любые другие нежелательные действия в течение периода времени, определенного администратором. Включает поддержку как IPv4, так и IPv6. Опционально более длительные запреты могут быть настроены специально для нарушителей, которые продолжают возвращаться.

Для установите Fail2Ban, необходимо открыть терминал.

Как открыть терминал PuTTY?

выполните команды:

sudo apt update
sudo apt install fail2ban
sudo apt install python3-systemd

После успешной установки плагина, выполните команду чтобы открыть конфигурационный файл

nano /etc/fail2ban/jail.local

Далее, добавьте конфигурацию с вашими данными

[DEFAULT]
ignoreip = ip_addresses
bantime  = 36000
banaction = iptables-multiport
mta = sendmail
sender = sender_email
destemail = recipient_email
action = %(action_mwl)s

[sshd]
enabled = true
bantime  = 36000

[ssh]
enabled  = true
port = ssh
filter   = sshd
bantime  = 36000
findtime = 120  
maxretry = 3  
backend = systemd
logpath  = /var/log/auth.log

ip_addresses — замените на белый список ip адресов на которых не будет действовать правило

Например: 127.0.0.1 (Если хотите добавить несколько 127.0.0.1 127.0.0.2)

sender_email — укажите email с которого будет отправляться сообщение

recipient_email — укажите e-mail, куда будет получение сообщение

Для включение выполните команды

systemctl start fail2ban
systemctl enable fail2ban
systemctl restart fail2ban

Структура файлов Fail2ban

Все конфигурационные файлы Fail2ban хранятся в директории /etc/fail2ban. Структура файлов всегда одинаковая:

  • action.d — директория, в которой содержатся файлы для настройки исполняемых действий (actions);

  • fail2ban.conf — файл с настройками сервиса fail2ban;

  • fail2ban.d — директория, в которой хранятся файлы с пользовательскими настройками fail2ban, по умолчанию пустая;

  • filter.d — директория с шаблонами, которые предназначены для анализа лог-файлов;

  • jail.conf — файл с настройками по умолчанию для защиты сервисов (Apache, Nginx, SSH и т. д.);

  • jail.d — директория для файлов с пользовательскими настройками для защиты сервисов (Apache, Nginx, SSH и т. д.);

  • paths-arch.conf, paths-debian.conf, paths-opensuse.conf, paths-common.conf — файлы для различных операционных систем (Arch Linux, Debian, openSUSE и других), содержащие настройки путей для операционной системы, например пути расположения лог-файлов.

Настройка Fail2ban для защиты SSH

Переходим к настройке Fail2ban для защиты SSH.

1. Открываем файл на редактирование при помощи любого текстового редактора:

nano /etc/fail2ban/jail.local

Нам необходимо отредактировать следующие параметры:

[DEFAULT]
ignoreip = 127.0.0.1
[sshd]  
enabled  = true  
findtime = 180  
maxretry = 2  
bantime = 50400
filter   = sshd
logpath  = /var/log/auth.log

Значение и смысл параметров:

  • [DEFAULT] — секция по умолчанию. Параметры из нее применяются ко всем остальным секциям, если не будут переопределены заранее;

  • ignoreip — список IP-адресов, подсетей или DNS-имен, для которых не будут действовать правила Fail2ban. Эти адреса не будут блокироваться даже при неудачных попытках подключения. Список адресов указывается через пробел;

  • [sshd] — указывается секция с наименованием сервиса, для которого будут созданы параметры блокировки адресов. Для каждого сервиса необходимо создавать свою секцию. В этом примере мы настраиваем параметры для демона sshd;

  • enabled — параметр, предназначенный для включения или отключения секции с сервисом. Для включения секции необходимо задать значение true, для отключения — false;

  • findtime — время в секундах, в течение которого определенное действие (неудачная попытка подключения) должно повториться определенное количество раз (параметр maxretry), после чего адрес будет заблокирован;

  • maxretry — количество неудачных попыток в течение периода findtime, после которых адреса нужно заблокировать;

  • bantime — продолжительность блокировки хоста в секундах;

  • filter — название фильтра, содержащее регулярные выражения для поиска подозрительных действий в лог-файлах сервиса. Фильтры для различных сервисов хранятся в директории /etc/fail2ban/filter.d/;

  • logpath — полный путь до лог-файла, который Fail2ban будет использовать для поиска сетевых адресов. По умолчанию SSH записывает все попытки входа в файл /var/log/auth.log.

Теперь сохраняем изменения в файле и выходим из редактора.

3. Перезапускаем сервис fail2ban и добавляем его в автозагрузку:

systemctl restart fail2ban
systemctl enable fail2ban

4. Проверяем статус Fail2ban:

systemctl status fail2ban

Проверка работоспособности Fail2ban

После того как программа запустится, она сразу начнет выявлять подозрительные хосты и блокировать их.

Для начала проверим, какие зоны присутствуют в нашей системе. Для этого выполняем команду:

fail2ban-client status

Чтобы получить более подробную информацию о конкретной зоне, а также отобразить количество заблокированных IP-адресов, необходимо выполнить команду:

fail2ban-client status sshd

В разделе Filter отображено общее количество срабатываний фильтра: каждая неудачная попытка подключения увеличивает параметр Total failed на один. В примере фильтр сработал три раза и после этого был заблокирован (Currently banned) один IP-адрес 192.168.126.1 (Banned IP list).

Fail2ban ведет свой лог-файл — fail2ban.log, в котором также записывается информация о заблокированных IP-адресах. Посмотреть ход работы Fail2ban можно, воспользовавшись командой:

tail -f /var/log/fail2ban.log

IP-адрес будет заблокирован столько времени, сколько было указано в параметре bantime конфигурационного файла jail.local, но адрес можно разбанить раньше срока вручную. Для этого надо выполнить команду:

fail2ban-client set sshd unbanip 192.168.126.1

Sshd — это имя зоны, которая заблокировала адрес, а 192.168.126.1 — это IP-адрес, который необходимо разблокировать.

Чтобы узнать, какая зона заблокировала необходимый IP-адрес, надо выполнить команду:

iptables -L -n

В выводе команды необходимо найти цепочку. В имени цепочки указана ранее созданная зона, например sshd. В этом примере цепочка называется f2b-sshd, в ней есть адрес 192.168.126.1.

Заблокировать IP-адрес тоже можно в ручном режиме. Для этого надо задать зону и IP-адрес. Команда для блокировки IP-адреса 192.168.126.1 для зоны sshd будет выглядеть следующим образом:

fail2ban-client set sshd banip 192.168.126.1

Last updated