Это старая версия документа!
Содержание
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 и тестирование защиты
Когда Fail2ba n фиксирует подозрительную активность — например, серию неудачных попыток входа по 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
Ссылка на статью-источник
