Даже при надёжных паролях брутфорс-атаки всё равно представляют угрозу для любого сервера. В новой статье разбираем, как настроить Fail2ban на Ubuntu 24.04 — инструмент для автоматической блокировки подозрительных IP. Вы узнаете, как правильно настроить время блокировки, частоту срабатывания и интеграцию с UFW.
Fail2ban — это утилита, которая отслеживает системные журналы. Обнаружив подозрительную активность, он временно блокирует IP-адреса, с которых поступают попытки взлома. Чаще всего его применяют для защиты SSH, но он умеет работать и с другими сервисами: FTP, почтовыми демонами, веб-серверами. На VPS такие попытки особенно часты, поэтому важно заранее настроить защиту. Главное условие — чтобы сервис писал логи, по которым можно определить неудачные попытки входа или атаки.
Как работает Fail2ban
Принцип работы Fail2ban прост. Он запускает демона, который следит за логами (например, /var/log/auth.log для SSH), и если за определённое время с одного и того же IP идёт слишком много попыток войти, заканчивающихся неудачей, этот IP блокируется через брандмауэр. По умолчанию в Ubuntu 24.04 Fail2ban взаимодействует именно с UFW, но может использовать и iptables напрямую, если нужно.
Установка и настройка Fail2ban
Для установки Fail2ban на Ubuntu 24.04 никаких сторонних источников подключать не нужно. Сначала обновляем индекс:
sudo apt update
Затем устанавливаем пакет:
sudo apt install fail2ban
Во время установки все необходимые зависимости будут установлены автоматически. После завершения сервис запускается сам, но на этом этапе он ещё не делает ничего полезного: все фильтры по умолчанию выключены.
Стандартные настройки находятся в файле:
/etc/fail2ban/jail.conf
Не изменяйте файл 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), и путь к логу. Используемая переменная %(sshd_log)s берёт путь из глобальных настроек, и в Ubuntu 24.04 она указывает на journal, так как systemd — основной менеджер журналов. Поэтому параметр backend = systemd или auto здесь уместен.
Теперь настроим параметры срабатывания. Самые важные из них:
- bantime — на сколько времени блокируется IP, по умолчанию это 10 минут (600 секунд). Можно указать в удобной форме, например bantime = 1h, чтобы блокировка длилась час.
- findtime — период, за который анализируются попытки входа. Если за это время было слишком много ошибок, то IP блокируется. Например, findtime = 10m.
- maxretry — максимальное число попыток до бана. Часто используется значение 5.
Все эти параметры можно задать глобально или для конкретного jail. Лучше задавать явно в той же секции:
[sshd]
bantime = 1h
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
Заключение
Мы рассмотрели установку Fail2ban на Ubuntu 24.04, настройку конфигурации на примере SSH, интеграцию с UFW и проверку логов. Один раз настроенный Fail2ban обеспечивает автоматическую защиту сервера от перебора паролей и других атак.
Читайте в блоге:
- Как защитить сайт на Bitrix от DDoS-атак и кражи данных
- Как настроить SSH-доступ в Ubuntu 24.04 LTS: пошаговое руководство
- Эффективная политика брандмауэра: базовая защита