# 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 Установка пакета: ```bash sudo apt install fail2ban ``` если есть необходимость добавить какие-то зависимые пакеты установщик обычно делает это сам. После завершения установки сервис запускается самостоятельно, но на этом этапе он ещё не делает ничего полезного, т.к. _по умолчанию все фильтры выключены_. Стандартные настройки находятся в файле: ```bash /etc/fail2ban/jail.conf ``` > **(!)Note**: Не следует изменять файл **jail.conf** — это основной конфигурационный файл, и при обновлении пакета _он может быть перезаписан_. Настраивать утилиту следует через файл **jail.local**, он создаётся вручную на основе примера **jail.conf** и в нём переопределяются только нужные параметры: ```bash sudo nano /etc/fail2ban/jail.local ``` Пример добавления самой простой рабочей конфигурации для защиты SSH: ```bash [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**. Лучше задавать явно в соответствующей же секции: ```bash [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 адресов-исключений, которые не должны попадать в бан. После внесения изменений в файл конфигурации службу следует перезапустить: ```bash sudo systemctl restart fail2ban ``` Проверка, работает ли **jail**: ```bash sudo fail2ban-client status ``` Данная команда покажет, какие вообще **jails** включены. Для просмотра конкретного — например, **sshd** — используется: ```bash sudo fail2ban-client status sshd ``` Если всё настроено правильно, то увидим информацию о забаненных IP и количестве попыток. Так же можно посмотреть, какие именно адреса были забанены. При необходимости забаненные адреса можно разблокировать: ```bash 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**: ```bash [sshd] action = ufw ``` После этого Fail2ban будет применять команды `ufw deny from to any` для бана и `ufw delete deny from to any` для разблокировки. Такой подход удобен, если вы уже полностью управляете файрволом через UFW и хотите, чтобы все действия логировались в одном месте. Однако учитывайте, что UFW и Fail2ban могут конфликтовать, если одновременно использовать несколько разных способов управления правилами. Например, если используются нестандартные iptables-действия в других **jails**, то правила могут накладываться некорректно. Лучше придерживаться *одного метода на всём сервере* — или только **UFW**, или только **iptables**. Когда настройка завершена, следует убедиться, что защита системы работает. Самый простой способ — попытаться войти по SSH с другого IP, несколько раз введя неправильный пароль. После пяти неудачных попыток IP-адрес должен быть заблокирован. Для контроля используется команда: ```bash 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 можно проверить с помощью: ```bash sudo ufw status ``` ------ Ссылка на [статью-источник](https://adminvps.ru/blog/nastrojka-fail2ban-na-ubuntu-24-04-lts-i-zashhita-ot-brutforsa/?ysclid=mt9s1tza43162135215) {{tag>fail2ban}}