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
- Если Вы используете Cloudflare то Читайте настройку Fail2ban и Cloudflare Настройка Nginx и Apache для правильной работы Cloudflare с вашим Nginx или Apache
- Узнайте как подключить Telegram к Fail2Ban в этой статье.
После внесения изменений в 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 выйти
- Изучите Дополнительные фильтры Fail2Ban которые помогут защитить ваш сервер Linux
- Если вы используете Nginx в качестве своего сервера то почитайте Настройка Fail2Ban для Nginx
- Если вы используете Apache в качестве своего сервера то почитайте Настройка Fail2Ban для Apache
- Узнайте как можно защитить ваш WordPress с Fail2Ban. Читайте статью Fail2Ban Защита WordPress