Тариф успешно добавлен в корзину
В корзину
url image

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

Fail2ban — инструмент командной строки, который используют для предотвращения атак на серверы. Утилита отслеживает логи служб и автоматически блокирует IP-адреса при обнаружении подозрительных действий — например, если зафиксирует много неудачных попыток входа. Интегрируясь с системами фильтрации сетевого трафика (iptables, nftables, firewalld), fail2ban временно или на постоянной основе изолирует нежелательные адреса, обеспечивая защиту SSH-доступа, веб-серверов, почтовых служб и других критически важных сервисов.

Fail2ban — один из наиболее эффективных и популярных решений для усиления безопасности Linux-серверов. В статье мы подробно рассмотрим процесс установки и настройки утилиты для протокола SSH и веб-сервера nginx.

Требования

Для установки и настройки fail2ban нам понадобится:

  • Сервер или виртуальная машина с ОС Linux. Минимальная конфигурация для тестирования: 1vCPU, 1 ГБ RAM, 20 ГБ SSD.
  • Тестовый сервер (опционально, но рекомендуется). С его помощью мы будем имитировать атаки для проверки блокировок, чтобы наглядно показать работу fail2ban.

Установка fail2ban

Утилита доступна для установки на большинство дистрибутивов Linux, а также FreeBSD.

Все приведённые ниже команды необходимо выполнять от имени пользователя root или с использованием привилегий sudo.

Дистрибутивы Debian/Ubuntu

Команда для установки:

apt update && apt -y install fail2ban

Дистрибутивы CentOS/RHEL/Fedora

Перед установкой пакета fail2ban на RPM-дистрибутивы необходимо подключить EPEL — репозиторий с дополнительных пакетов программного обеспечения.

Установите пакет epel-release:

dnf -y install epel-release

Введите команду для установки fail2ban:

dnf -y install fail2ban

FreeBSD

Команда для установки пакета fail2ban: 

pkg install fail2ban

Настройка fail2ban

Рассмотрим практические примеры настройки для защиты SSH-сервера и веб-сервера nginx. В качестве базовой системы в инструкции используется сервер с Ubuntu 24.04.

Настройка для SSH

Правило для SSH активировано по умолчанию. Базовая конфигурация предполагает блокировку IP-адреса на 10 минут после 5 неудачных попыток входа в течение 10 минут.

Чтобы убедиться, что правило для SSH работает, выведите список активных правил с помощью команды:

fail2ban-client status
Проверка включенных правил Fail2ban

Если в разделе Jail list есть запись sshd, значит, защита SSH работает. Для изменения параметров понадобится пользовательский конфигурационный файл:

  1. Создайте файл jail.local для хранения конфигурации fail2ban:
nano /etc/fail2ban/jail.local
  1. Введите настройки. Например:
[sshd]
ignoreip = 127.0.0.1
bantime = 10s
findtime = 1d
maxretry = 2 

Расшифровка параметров:

  • ignoreip — IP-адреса или подсети, исключённые из блокировки (по умолчанию — localhost).
  • maxretry — предельное число неудачных попыток до момента блокировки.
  • findtime — временной интервал (в секундах), в течение которого отслеживаются неудачные попытки. Превышение лимита maxretry в установленный период времени ведёт к блокировке.
  • bantime — срок блокировки адреса ( в секундах, минутах, часах, днях). Значение -1 означает постоянный бан.

В приведённом примере 2 неудачные попытки входа в течение 1 дня приведут к блокировке на 10 секунд.

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

  1. Примените изменения, перезапустив службу:
systemctl restart fail2ban
  1. Проверьте статус сервиса:
systemctl status fail2ban
Проверка статуса сервиса fail2ban

Если в статусе отображается active (running), сервис перезапущен.

  1. Попробуйте подключиться к серверу по SSH с другого устройства и дважды ввести неверный пароль. После второй ошибки ваш IP должен быть заблокирован.
ssh alex@192.168.234.128

Проверить список заблокированных IP можно с помощью команды:

fail2ban-client status sshd
Проверка заблокированных IP адресов в fail2ban

В строке Banned IP list появятся заблокированные адреса (в данном случае 192.168.234.1). В нашей конфигурации блокировка снимется автоматически через 10 секунд. Однако всегда можно разблокировать IP-адрес вручную с помощью команды:

fail2ban-client set sshd unbanip 192.168.234.128

Где: 

  • sshd — название службы (jail), в рамках которой была применена блокировка. Это имя соответствует заголовку в квадратных скобках [sshd] внутри конфигурационного файла.
  • 192.168.234.128 — конкретный IP-адрес, который необходимо исключить из чёрного списка и возобновить для него доступ.

Настройка для nginx

Помимо готовых фильтров, входящих в комплект Fail2Ban, можно создавать собственные. В качестве примера настроим обнаружение и блокировку IP-адресов, генерирующих множество ошибок 404.

Настроим fail2ban для веб-сервера nginx.

  1. Создайте пользовательский фильтр.
nano /etc/fail2ban/filter.d/nginx-404.conf

Содержимое файла:

[Definition]
failregex = ^<HOST> - .* "(GET|POST|HEAD) .*HTTP/.*" 404 .*
ignoreregex =

В данной конфигурации параметр failregex ищет строки в файле access.log с кодом 404. <HOST> — это значение для IP-адресов: fail2ban будет автоматически подставлять адреса, которые попадут под критерий поиска.

  1. Создайте правило блокировки:
nano /etc/fail2ban/jail.d/nginx-404.conf

Пример настроек:

[nginx-404]
enabled = true
port = http, https
filter = nginx-404
logpath = /var/log/nginx/access.log
maxretry = 5
findtime = 60
bantime = 1800
backend = polling
action = iptables-multiport[name=nginx-404, port="http,https", protocol=tcp]

Описание параметров:

  • [nginx-404] — уникальный идентификатор правила (jail), который используется для управления и мониторинга.
  • enabled — флаг активации: значение true включает правило, false — отключает его без удаления файла.
  • port = http, https — указывает сетевые порты, доступ к которым будет ограничен для заблокированных адресов. В данном случае это стандартные порты для HTTP (80) и HTTPS (443).
  • filter = nginx-404 — ссылка на файл с регулярными выражениями (/etc/fail2ban/filter.d/nginx-404.conf). Этот фильтр анализирует логи, выявляя шаблоны, соответствующие подозрительной активности (например, повторяющиеся запросы к несуществующим страницам).
  • logpath = /var/log/nginx/access.log — путь к файлу лога, в котором будет происходить поиск подозрительной активности. В нашем примере fail2Ban будет искать в нём строки с кодом 404.
  • maxretry — максимальное количество неудачных запросов (в нашем случае — запросов с кодом 404) перед блокировкой IP-адреса.
  • findtime — период в секундах, в течение которого происходит подсчёт неудачных запросов. В нашей конфигурации мы задали период в 60 секунд.
  • bantime — срок блокировки IP-адреса в секундах. По его окончании IP автоматически разблокируется.
  • backend = polling — способ мониторинга лог-файла. При методе polling, fail2Ban периодически опрашивает файл лога.
  • action = nftables-multiport[name=nginx-404, port="http,https", protocol=tcp] — действие при блокировке IP-адреса:
    • nftables-multiport — записывает правило nftables;
    • name=nginx-404 — имя цепочки в nftables;
    • port="http,https" — блокирует только указанные порты (80 и 443);
    • protocol=tcp — считает подозрительным только TCP-трафик.
  1. Перезапустите сервис fail2ban:
systemctl restart fail2ban
  1. Убедитесь, что новое правило nginx-404 появилось в списке:
fail2ban-client status
Проверка доступных правил
  1. С тестового сервера выполните серию запросов к несуществующим страницам:
for i in {1..30}; do curl -I http://109.23.194.243/test1.html-$i; done

Это цикл в bash, который последовательно выполняет 30 HTTP-запросов к несуществующим файлам с именами типа test1.html-1, test1.html-2 и т.д. до test1.html-30

  1. Вернитесь на сервер с установленным fail2ban и проверьте список заблокированных IP-адресов:

fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-404.conf
Заблокированные IP адреса

IP-адрес сервера, с которого мы выполняли команду curl, был заблокирован.

Настройка логов

Детальное логирование необходимо для аудита безопасности и отладки. Основные параметры настраиваются в файле /etc/fail2ban/fail2ban.conf

Параметры для работы с лог-файлами:

  • loglevel — задает уровни детализации логов. Поддерживаются уровни CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG. CRITICAL фиксирует только критические ошибки, которые влияют на работу утилиты. ERROR — ошибки выполнения, на которые нужно обратить внимание. WARNING — потенциальные проблемы. NOTICE — важные операционные события, такие как блокировки IP. INFO — подробная информация о работе системы; DEBUG — максимально детальные данные для отладки.
  • logtarget — путь к файлу логов (по умолчанию используется /var/log/fail2ban.log).
  • logformat — формат записи логов. Поддерживает опции, которые позволяют отображать дату и время —  %(asctime)s, уровень логирования — %(levelname)s, текст сообщения  —%(message)s, имя модуля — %(module)s.

Параметры для детального логирования:

loglevel = INFO
logtarget = /var/log/fail2ban.log
logformat = %(asctime)s [%(levelname)s] %(message)s

После правок перезапустите службу:

systemctl restart fail2ban

Мониторинг логов в режиме реального времени

Отслеживание логов в реальном времени:

tail -f /var/log/fail2ban.log

Просмотр последних 100 лог-записей:

tail -n 100 /var/log/fail2ban.log

Для фильтрации записей по блокировки IP-адресов (например, если нужно найти все записи с блокировкой (Ban) или разблокировкой (Unban) используйте команду:

grep -E "Ban|Unban" /var/log/fail2ban.log

Заключение

Fail2Ban — это эффективный и гибкий инструмент для защиты серверов от автоматизированных атак и подозрительной активности.

Основные преимущества fail2Ban:

  • Простота использования. Наличие готовых конфигурационных шаблонов для популярных служб (SSH, Nginx, Apache, WordPress) позволяет быстро организовать базовую защиту.
  • Гибкость настройки. Возможность тонкой настройки всех параметров блокировки и создания собственных фильтров под специфичные угрозы.
  • Минимальные накладные расходы: Программа работает в фоновом режиме с минимальным потреблением ресурсов, не влияя на производительность сервера.

Настройка защиты SSH является обязательным минимумом для любого сервера, доступного извне. Однако потенциал Fail2Ban гораздо шире: его можно адаптировать для защиты баз данных, веб-приложений, панелей управления и многих других сервисов. Полное описание параметров конфигурации fail2ban доступно в документации по ссылке.

Этот материал был полезен?

Скидка новым клиентам
Закажите сервер сегодня и получите скидку на первый месяц аренды!
Наш сайт использует cookies Вы можете отключить их в настройках браузера, но это может ограничить функционал. Оставаясь на сайте, вы соглашаетесь с использованием cookies.