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

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


linux:administration:fail2ban

Это старая версия документа!


Fail2ban. Настройка на Ubuntu 24.04 для защиты от брутфорса.

Fail2ban — это утилита, которая отслеживает системные журналы. Обнаружив подозрительную активность, fail2ban временно блокирует IP-адреса, с которых поступают попытки взлома.

Чаще всего fail2ban применяют для защиты SSH, но он умеет работать и с другими сервисами: FTP, почтовыми демонами, веб-серверами.
На VPS такие попытки особенно часты, поэтому важно настроить защиту заранее.

(!)Note: Главное условие — чтобы сервис писал логи, по которым можно определить неудачные попытки входа или ат аки.

Как работает Fail2ban

Для работы Fail2ban запускает демона, который следит за логами (например для SSH это /var/log/auth.log), и если за определённое время с одного и того же IP идёт слишком много попыток входа, заканчивающихся неудачей, то этот IP блокируется через брандмауэр.
По умолчанию в Ubuntu 24.04 Fail2ban взаимодействует с UFW, но если нужно, то может использовать и iptables напрямую .

Установка и пример настройки Fail2ban для защиты SSH

Установка пакета:

sudo apt install fail2ban

если есть необходимость добавить какие-то зависимые пакеты установщик обычно делает это сам.

После завершения установки сервис запускается самостоятельно, но на этом этапе он ещё не делает ничего полезного, т.к. по умолчанию все фильтры выключены.

Стандартные настройки находятся в файле:

/etc/fail2ban/jail.conf
(!)Note: Не следует изменять файл jail.conf — это основной конфигурационный файл, и при обновлении пакета он может быть перезаписан.

Настраивать утилиту следует через файл jail.local, он создаётся вручную на основе примера jail.conf и в нём переопределяются только нужные параметры:

sudo nano /etc/fail2ban/jail.local

Пример добавления самой простой рабочей конфигурации для защиты SSH:

[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
backend = systemd

В этой секции настроек включаем защиту сервиса sshd, указываем порт, на котором работает SSH (если используется нестандартный порт, то это следует указать явно, например port = 2222), и путь к отслеживаемому логу.

Настройки параметров срабатывания могут быть заданы глобально или для конкретного jail. Лучше задавать явно в соответствующей же секции:

[sshd]
bantime = 1h
findtime = 10m
maxretry = 5

здесь:

  • bantime — на сколько времени блокируется IP, по умолчанию это 10 минут (600 секунд). Можно указать в удобной форме, например bantime = 1h, чтобы блокировка длилась час.
  • findtime — период, за который анализируются попытки входа. Если за это время было слишком много ошибок, то IP блокируется. Например, findtime = 10m.
  • maxretry — максимальное число попыток до бана. Часто используется значение 5.

То есть с указанными выше настройками Fail2ban будет блокировать IP на час, если за 10 минут с него поступит 5 неудавшихся попыток входа.

После внесения изменений в файл конфигурации службу следует перезапустить:

sudo systemctl restart fail2ban

Проверка, работает ли jail:

sudo fail2ban-client status

Данная команда покажет, какие вообще jails включены.

Для просмотра конкретного — например, sshd — используется:

sudo fail2ban-client status sshd

Если всё настроено правильно, то увидим информацию о забаненных IP и количестве попыток. Так же можно посмотреть, какие именно адреса были забанены.

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

sudo fail2ban-client set sshd unbanip 1.2.3.4

Приведенного выше примера настроек достаточно, чтобы защитить SSH от атак перебора паролей.

Если есть и другие сервисы, которые могут быть атакованы, включите для них аналогичные секции в файле jail.local — например, [nginx-http-auth] или [postfix].

Но важно настраивать только то, что реально используется, иначе можно легко заблокировать легитимный трафик.

Интеграция Fail2ban с UFW и тестирование защиты

Когда Fail2ban фиксирует подозрительную активность — например, серию неудачных попыток входа по SSH, — он блокирует IP-адрес источника. Для этого используются действия (action), которые указывает, каким способом банить IP. В большинстве случаев это добавление правила в файрволл.

По умолчанию Fail2ban на Ubuntu 24.04 умеет работать с UFW. Чтобы активировать именно этот способ блокировки, нужно в секции нужного jail (например, [sshd]) задать действие ufw. Это делается через параметр action:

[sshd]
action = ufw

После этого Fail2ban будет применять команды ufw deny from <ip> to any для бана и ufw delete deny from <ip> to any для разблокировки.

Такой подход удобен, если вы уже полностью управляете файрволом через UFW и хотите, чтобы все действия логировались в одном месте.
Однако учитывайте, что UFW и Fail2ban могут конфликтовать, если одновременно использовать несколько разных способов управления правилами. Например, если используются нестандартные iptables-действия в других jails, то правила могут накладываться некорректно.

Лучше придерживаться одного метода на всём сервере — или только UFW, или только iptables.

Когда настройка завершена, следует убедиться, что защита системы работает.
Самый простой способ — попытаться войти по SSH с другого IP, несколько раз введя неправильный пароль. После пяти неудачных попыток IP-адрес должен быть заблокирован.

Для контроля используется команда:

sudo fail2ban-client status sshd

Она покажет, сколько IP-адресов в бане, и с какого момента они в разделе «Banned IP list».

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

Для Fail2ban соответствующий лог-файл это /var/log/fail2ban.log. В нём будет видно, что IP попал в бан, с указанием jail и действия.

UFW, в свою очередь, ведёт собственный лог (если логирование включено), который можно просматривать через journalctl или напрямую в /var/log/ufw.log.

Если защита не работает, следует проверить:

  • Активен ли jail (fail2ban-client status), и действительно ли он мониторит логи.
  • Корректно ли задан путь к логу, правильный ли backend. Например, в Ubuntu, где логи идут через journald, почти всегда нужен backend = systemd.
  • Проверьте, не конфликтуют ли правила Fail2ban и UFW — особенно если ранее вручную изменялись цепочки iptables.

Если Fail2ban сообщает, что IP заблокирован, но доступ к серверу по-прежнему возможен, скорее всего, дело в action: либо действие настроено неправильно, либо UFW не включён.

Активен ли UFW можно проверить с помощью:

sudo ufw status

Ссылка на статью-источник

/var/www/html/dokuwiki/data/attic/linux/administration/fail2ban.1787771575.txt.gz · Последнее изменение: — so_v_a