Fail2ban Основные понятия и базовые настройки

Как правильно настроить Fail2ban со всеми фильтрами. Подробная инструкция по настройке Fail2ban на серверах Linux. Основные понятия Fail2ban.

Fail2ban Основные понятия и базовые настройки
4 мин
Автор PINTA IT

Fail2ban Основные понятия и базовые настройки

Основная конфигурация выполняется в файлах определяющих «фильтры» или «тюрьмы» или «джейлы». Fail2ban настраивается с помощью файлов расположенных в /etc/fail2ban и /etc/action.d

Fail2ban читает файлы конфигурации в следующем порядке

/etc/fail2ban/jail.conf
/etc/fail2ban/jail.d/.conf
/etc/fail2ban/jail.local
/etc/fail2ban/jail.d/.local

Каждый файл .local отменяет настройки из файла .conf

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

action.d/. - конфигурация выполняемых действий
fail2ban.conf - дефолтный конфигурационный файл
fail2ban.d/. - пользовательские настройки администратора для Fail2ban
filter.d/. - шаблоны для анализа логов и настройки шаблонов
jail.conf   - дефолтные настройки сервисов
jail.d/. - пользовательские настройки администратора для сервисов

Файлы paths-arch.conf, paths-common.conf, paths-debian.conf и paths-opensuse.conf хранят в себе настройки путей для различных операционных систем семейства Linux.

Fail2ban Основные понятия и базовые настройки

* Установка Fail2ban
--- $ sudo apt-get install fail2ban

* Включить в автозагрузку при рестарте системы
--- $ sudo systemctl enable fail2ban
* Логи Fail2ban
--- $ sudo nano /var/log/fail2ban.log
--- $ sudo nano /var/log/auth.log
*** Папка /etc/fail2ban/filter.d для управления активными фильтрами
--- $ sudo cd /etc/fail2ban/filter.d

* Ознакомиться со списком фильтров
--- $ sudo ls

Основные команды Fail2ban

* Статус сервиса
--- $ sudo systemctl status fail2ban

* Получение информации о включенных фильтрах
--- $ sudo sudo fail2ban-client status

* Чтобы увидеть статистику тюрьмы к примеру sshd
--- $ sudo fail2ban-client status sshd

* Остановить сервис
--- $ sudo service fail2ban stop

* Запустить сервис
--- $ sudo service fail2ban start

* Перезапустить сервис
--- $ sudo service fail2ban restart

* Чтобы просмотреть все доступные команды
--- $ sudo fail2ban-client -h

Инструмент Fail2ban для блокировки и разблокировки IP-адресов

* Инструмент fail2ban-client
--- $ sudo fail2ban-client -h

* Проверьте статус тюрьмы к примеру sshd
--- $ sudo fail2ban-client status sshd

* Разблокировать IP sshd
--- $ sudo fail2ban-client set sshd unbanip xx.xx.xx.xx

* Заблокировать IP
--- $ sudo fail2ban-client set sshd banip xx.xx.xx.xx

Начало работы с Fail2ban Первоначальная настройка

* Создайте файл jail.local
--- $ sudo nano /etc/fail2ban/jail.local

Основные значения Fail2ban

maxretry - количество действий, которые разрешено совершить до бана
findtime - время в секундах, в течение которого учитывается maxretry
bantime  - время, на которое будет блокироваться IP-адрес
action   - действия, которое будет выполняться, если Fail2ban обнаружит активность
ignoreip - игнорировать защиту, если запросы приходят с перечисленных адресов

enabled  - включать (true) или отключать (false) правило
port     - порт целевого сервиса. Принимается буквенное или цифирное обозначение
filter   - фильтр (критерий поиска), который будет использоваться для поиска подозрительных действий файл из каталога /etc/fail2ban/filter.d без .conf
action   - действие, совершаемое в случае срабатывания правила. В квадратных скобках указаны название для правила, сетевой порт и протокол для блокирования
logpath  - расположение лог-файла, в котором фильтр будет искать подозрительную активность на основе описанных критериев

Не рекомендуется оставлять параметр ignoreip со значением по умолчанию 127.0.0.1/8 в jail.conf это создаёт очевидную угрозу в многопользовательских системах если злоумышленник получил доступ хотя бы к одному shell аккаунту, то он имеет возможность беспрепятственно запустить bruteforce–программу для атаки на root или других пользователей прямо с этого же сервера.

Действия и фильтры Fail2ban

iptables - создание простого правила в netfilter с помощью одноименной утилиты
iptables-multiport  - позволяет добавлять диапазоны портов для блокировки
iptables-ipset  - использование ipset для придания более лаконичного вида правилам
iptables-allports - блокирует для адреса все порты
firewallcmd-new - создание простого правила в netfilter с помощью firewall-cmd
firewallcmd-ipset - добавляет правила с помощью утилиты firewall-cmd, используя ipset
firewallcmd-rich-rules - создает rich-rules при помощи firewall-cmd

Стандартные пути логов NGINX
logpath   = /var/log/nginx/error.log
logpath   = /var/log/nginx/access.log

Указать путь для всех лог файлов
logpath   = %(nginx_error_log)s
logpath   = %(nginx_access_log)s

Стандартные пути логов APACHE
logpath   =  /var/log/apache2/error.log
logpath   = /var/log/apache2/access.log

Указать путь для всех лог файлов
logpath   = %(apache2_error_log)s
logpath   = %(apache2_access_log)s


Fail2ban Основные параметры jail.local

* Редактируйте файл jail.local
--- $ sudo nano /etc/fail2ban/jail.local
-----------------------------------------------------------------------
--- Основные параметры jail.local -------------------------------------
-----------------------------------------------------------------------
# Указанные правила в [DEFAULT] автоматически применяются ко всем фильтрам если в фильтрах не указано иное правило

[DEFAULT]

ignoreip    = XX.XX.XX.0/24           # IP-адрес через пробел
findtime    = 3600                    # если в течении 1 часа
maxretry    = 3                       # произведено 3 неудачных попыток
bantime     = 86400                   # банить IP на 24 часа
backend     = auto                    # как fail2ban будет отслеживать файлы журналов
usedns      = warn                    # определяет, используется ли обратный DNS для запретов
banaction   = iptables-multiport      # устанавливает действие которое будет использоваться          
protocol    = tcp                     # тип трафика
chain       = INPUT                   # цепочка с правилом перехода для отправки трафика

mta         = sendmail                # агент передачи почты
destemail   = [email protected]       # будут приходить уведомления
sendername  = [email protected]         # отправитель
action      = %(action_mw)s           # выполнить действие banaction и отправить письмо на почту


#########################################################################################
# *** Варианты уведомлений
# 
# action      = %(action_mw)s           # заблокировать и отправить письмо на почту
# 
# action      = %(action_mw)s           # заблокировать и отправить письмо на почту и telegram
#               telegram
# 
# action      = %(action_)s             # заблокировать и отправить уведомление в telegram
#               telegram


# Фильтр для SSH
 
[ssh]

enabled  = true                           # статус
port     = ssh                            # порт ssh или ваш порт ХХХХ
maxretry = 2                              # количевтво неудачных попыток
filter   = sshd                           # фильтр
logpath  = /var/log/auth.log              # файл логов

#########################################################################################
# *** Варианты уведомлений при срабатывании фильтра 
# 
# action   = iptables-allports[name=sshd]    # заблокировать клиента
#            telegram                        # отправить уведомление в telegram
#            sendmail                        # отправить уведомление на email
#            sendmail[name=SSH, [email protected]]
#            sendmail[name = SSH, [email protected], [email protected]]
# 
#########################################################################################
# *** Варианты работы блокировки
# 
# action   = iptables[name=SSH, port=ssh]
# action   = iptables-multiport[name=SSH, port=ssh]
# action   = iptables[name=SSH, port=ssh, protocol=tcp]
# action   = iptables-multiport[name=SSH, port=ssh, protocol=tcp]
# 
#########################################################################################
# *** Вы можете так же можете изменить параметры срабатывания фильтра
# 
# findtime    = 86400                   # если в течении 24 часов
# maxretry    = 3                       # произведено 3 неудачных попыток
# bantime     = 172800                  # банить IP на 48 часов

-----------------------------------------------------------------------
-----------------------------------------------------------------------

Важно! Следите за тем, чтобы путь к файлу хранения логов logpath был указан корректно.

* Обязательно назначьте необходимые права доступа
--- $ sudo chmod 755 /var/log/XXX.log

После внесения изменений в Fail2ban

* Проверить состояние fail2ban
--- $ sudo systemctl status fail2ban
* Перезапустить сервис
--- $ sudo service fail2ban restart
* Получение информации о включенных джейлах
--- $ sudo fail2ban-client status

Проверка срабатывания правил

Общий инструмент для тестирования регулярных выражений Fail2Ban — это fail2ban-regex. Чтобы увидеть, как его использовать, запустите:
--- $ sudo fail2ban-regex --help
*** Проверка срабатывания правил
--- $ sudo fail2ban-regex /var/log/ХХХ.log /etc/fail2ban/filter.d/ХХХ.conf

*** В случае проблем, логи можно посмотреть следующим образом
--- $ sudo tail -F /var/log/fail2ban.log
--- $ sudo Cntr + Z выйти

Похожие публикации