Это старая версия документа!
Содержание
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 mode = aggressive port = ssh logpath = %(sshd_log)s backend = systemd
здесь:
- enabled — включение/отключение защиты
- mode = aggressive — агрессивный режим, ловит больше ошибок SSH включая ошибки при аутентификации по ключу
- port — порт на котором работает SSH (если используется нестандартный порт, то это следует указать явно, например port = 2222)
- logpath — путь до отслеживаемого лога (здесь указан в виде системной переменной, но м.б. указан и явно, в виде
/var/log/auth.log)
Настройки параметров срабатывания могут быть заданы глобально, в секции [DEFAULT], или для конкретного jail. Лучше задавать явно в соответствующей же секции:
[sshd] bantime = 1h findtime = 10m maxretry = 5
здесь:
- bantime — на сколько времени блокируется IP, по умолчанию это 10 минут (600 секунд). Можно указать в удобной форме, например bantime = 1h, чтобы блокировка длилась час.
- findtime — период, за который анализируются попытки входа. Если за это время было слишком много ошибок, то IP блокируется. Например, findtime = 10m.
- maxretry — максимальное число попыток до бана. Часто используется значение 5.
То есть с указанными выше настройками Fail2ban будет блокировать IP на час, если за 10 минут с него поступит 5 неудавшихся попыток входа.
Пример указания настроек параметров срабатывания в секции [DEFAULT]:
[DEFAULT] # IP-адреса, которые НИКОГДА НЕ БАНИМ (добавьте свои IP) ignoreip = 127.0.0.1/8 ::1 ВАШ_IP_1 ВАШ_IP_2 # Время блокировки (1 час = 3600 сек, 'm' - минуты, 'h' - часы) bantime = 1h # Время поиска (смотрим попытки за последние 10 минут) findtime = 10m # Количество ошибок для блокировки maxretry = 5
здесь ignoreip - список IP адресов-исключений, которые не должны попадать в бан.
После внесения изменений в файл конфигурации службу следует перезапустить:
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
Ссылка на статью-источник
