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

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


linux:administration:fail2ban

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


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

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

На VPS такие попытки особенно часты, поэтому важно настроить защиту заранее.

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

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

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

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

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

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.1787736934.txt.gz · Последнее изменение: — so_v_a