Быть в курсе
Аватарка автора Редакция Рег.облако
Облако

Fail2ban: простая защита от подбора паролей

26 сентября 2025

12 минут

Телеграм

ВКонтакте

SSH (Secure Shell) — это один из самых распространенных протоколов удаленного управления серверами. С его помощью администраторы получают защищенный доступ к командной строке, выполняют настройки, переносят файлы и управляют сервисами. Однако популярность SSH делает его основной целью для атак методом брутфорса — полного перебора паролей.

Злоумышленники запускают автоматические скрипты, которые перебирают тысячи комбинаций логинов и паролей, пытаясь получить доступ к серверу. Даже если пароль достаточно надежный, постоянные атаки создают нагрузку на систему и засоряют логи.

Чтобы защитить SSH от подобных угроз, администраторы используют специальные инструменты, среди которых один из самых эффективных — Fail2ban.

Кроме того, для надежной защиты и стабильной работы серверов используйте облачные решения. Продукты Рег.облако обеспечивают безопасность, масштабируемость и удобное управление инфраструктурой для бизнеса любого уровня.

Что такое Fail2ban

Fail2ban — это инструмент для автоматической защиты серверов Linux и Unix-подобных систем от взлома методом подбора пароля и других видов несанкционированного доступа. Он отслеживает подозрительную активность в логах сервисов (чаще всего SSH, но не только) и реагирует на повторяющиеся ошибки входа.

Принцип работы Fail2ban

Fail2Ban реализует защиту за счет постоянного мониторинга логов различных сервисов в реальном времени.

В первую очередь он анализирует журналы аутентификации (например, /var/log/auth.log), а также журналы веб-сервера, почтовых служб и других демонов. Для каждой службы в конфигурации прописан шаблон поиска ошибок — failregex. Эти регулярные выражения определяют, какие строки в журнале считаются подозрительными: повторные ошибки при вводе пароля, неверные ключи SSH, слишком частые запросы и так далее.

Когда количество совпадений с шаблоном от одного IP-адреса превышает установленный порог (maxretry), Fail2Ban срабатывает и временно блокирует нарушителя. Блокировка происходит за счет добавления правила в файрвол сервера: это может быть iptables, nftables, firewalld или ufw. Через заданный промежуток времени (bantime) правило автоматически удаляется, и IP получает второй шанс. Но если атака продолжается, адрес снова попадает под бан.

Ключевые элементы Fail2Ban — jails (с англ. «тюрьмы»). Это отдельные правила защиты для разных сервисов. Каждая jail включает:

  • фильтр (failregex), который описывает, что считать атакой;
  • параметры реакции (maxretry, findtime, bantime), которые задают число попыток, временной интервал их подсчета и длительность блокировки;
  • действие (action), которое определяет способ блокировки — от добавления правила в iptables до вызова внешнего скрипта или отправки уведомления администратору.

В итоге Fail2Ban просто берет на себя рутинную работу администратора: он следит за попытками входа, блокирует подозрительные IP-адреса и через некоторое время сам снимает ограничение. Если атака продолжается, адрес снова отправляется в бан. Это позволяет держать хакеров под контролем и при этом не мешать обычным пользователям.

Источник: Freepik. В первую очередь Fail2Ban анализирует журналы аутентификации

Основные возможности Fail2ban

У Fail2Ban есть целый набор функций, которые помогают администратору держать сервер под контролем. Он:

  • Следит за логами. Fail2Ban в реальном времени проверяет системные журналы — например, /var/log/auth.log или логи веб-сервера. Если один и тот же IP слишком часто ошибается при вводе пароля или шлет подозрительные запросы, система это замечает.
  • Блокирует нарушителей через файрвол. Когда правило срабатывает, Fail2Ban автоматически добавляет IP-адрес в список блокировки. Для этого он может использовать iptables, nftables, firewalld или ufw. Через указанное время блок снимается, но если атака продолжается, IP снова попадает в бан.
  • Настраивает правила отдельно для каждого сервиса. Для каждого сервиса можно задать свои условия: сколько ошибок допускается, за какой промежуток их считать и на сколько минут или часов банить.
  • Отправляет уведомления и запускает действия. Помимо блокировок Fail2Ban умеет отправлять письма администратору, вызывать скрипты или интегрироваться с внешними системами. Так админ сразу узнает о подозрительных активностях.
  • Использует готовые фильтры для популярных сервисов. В комплекте идут шаблоны для SSH, Apache/Nginx, почтовых серверов, FTP и других. Это позволяет быстро начать работу, не разбираясь в регулярных выражениях.
  • Предлагает удобные инструменты для управления. С помощью fail2ban-client можно посмотреть список заблокированных адресов, разбанить IP или перезапустить отдельное правило. А с fail2ban-regex легко проверить фильтры на реальных логах.

Таким образом, Fail2ban работает в качестве дополнительного уровня защиты: он не заменяет стандартные средства аутентификации и файрвол, а усиливает безопасность сервера, помогая оперативно реагировать на попытки взлома, не требуя постоянного вмешательства администратора.

Есть и другой вариант: Fail2ban + DDoS-защита = максимальная безопасность. Fail2ban защищает от подбора паролей, а DDoS-защита — от попыток "положить" сервер.

Где хранятся настройки Fail2ban

Все параметры работы Fail2ban задаются в директории /etc/fail2ban/. В ней находятся как основные файлы настроек, так и вспомогательные каталоги с фильтрами, действиями и правилами для разных сервисов.

Путь Назначение Особенности
/etc/fail2ban/jail.conf Конфигурация по умолчанию Редактировать этот файл не рекомендуется, так как он будет перезаписан при обновлении пакета.
/etc/fail2ban/jail.local Локальные изменения и собственные правила Обычно создается копированием jail.conf:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
/etc/fail2ban/jail.d/ Каталог для отдельных конфигураций сервисов Удобно создавать отдельные файлы — например, ssh.local, nginx.local.
/etc/fail2ban/filter.d/ Шаблоны регулярных выражений (фильтры), по которым анализируются логи Содержит готовые фильтры, например sshd.conf, nginx-http-auth.conf.
/etc/fail2ban/action.d/ Набор действий, выполняемых при блокировке Здесь описаны варианты интеграции с firewall и уведомления: iptables.conf, nftables.conf, ufw.conf, sendmail.conf.

Структура jail.local

Файл jail.local — это основное место для настройки защиты. Он содержит два типа секций:

[DEFAULT] — глобальные значения, которые будут применяться ко всем сервисам, если они не переопределены в конкретных правилах.

В этой секции можно указать:

  • bantime — продолжительность блокировки IP-адреса;
  • findtime — временной интервал, в течение которого считаются неудачные попытки;
  • maxretry — количество ошибок входа до применения бана.

Секции для сервисов — отдельные блоки для каждого приложения, например [sshd], [nginx-http-auth], [postfix].

Какие параметры могут быть в сервисных секциях:

  • enabled — включение/выключение jail для сервиса (true/false);
  • port — номер порта или алиас (например, 22, ssh, http,https);
  • filter — имя файла фильтра из filter.d без расширения (sshd, nginx-http-auth);
  • logpath — путь к логам; можно перечислять через переносы строк;
  • backend — способ чтения логов: systemd, polling, auto;
  • journalmatch — доп. фильтр по journald при backend=systemd;
  • maxretry — число неудачных попыток до бана;
  • findtime — окно времени для подсчета попыток;
  • bantime — длительность блокировки; поддерживает суффиксы m/h/d;
  • ignoreip — список IP/подсетей, которые никогда не банятся (например, 127.0.0.1/8 10.0.0.0/8);
  • banaction — механизм блокировки: iptables, nftables, ufw и их варианты (*multiport, *_allports); action — шаблон действия при бане/разбане (например, %(action)s, %(action_mw)s, %(action_mwl)s);
  • protocol — tcp/udp (обычно tcp для SSH);
  • chain — имя цепочки firewall, куда будут добавлены правила;
  • mode — режим фильтра, если предусмотрен фильтром (например, для некоторых веб-фильтров);
  • banaction_allports / banaction_abusive — альтернативные действия при необходимости блокировать все порты или усиливать бан (если поддерживается вашей версией).
Источник: Freepik. Во многих дистрибутивах Linux Fail2ban можно установить напрямую через пакетный менеджер

Установка fail2ban

Fail2ban включен в стандартные репозитории многих дистрибутивов Linux, поэтому его можно установить напрямую через пакетный менеджер.

Ubuntu / Debian :

CentOS / RHEL:

Fedora:

Arch Linux / Manjaro:

После установки Fail2ban автоматически создает системный сервис и регистрируется в systemd, но по умолчанию он остается выключенным, чтобы администратор успел внести необходимые настройки. Проверить статус можно так:

Пример вывода:

Настройка fail2ban для защиты SSH

Все конфигурационные файлы Fail2ban находятся в директории /etc/fail2ban. Основной файл с настройками по умолчанию называется jail.conf. Чтобы убедиться в этом, перейдите в директорию и выведите первые 20 строк:

Пример вывода:

Как видно, первые строки содержат комментарии (#), и сразу же дается важное предупреждение: не изменяйте jail.conf напрямую. Этот файл обновляется вместе с пакетами Fail2ban и может быть перезаписан.

Вместо этого настройки нужно вносить в отдельные файлы:

  • jail.local — основной локальный файл, куда можно скопировать и изменить параметры;
  • файлы внутри директории jail.d/, если хотите разделить конфигурации по сервисам.

Сначала создадим копию стандартного файла:

Теперь откроем его для редактирования:

Параметры, которые задаются в секции [DEFAULT], применяются ко всем сервисам. Ключевые настройки:

Где:

  • bantime — время блокировки IP после превышения лимита (по умолчанию 10 минут, значение указывается в секундах или минутах/часах, например 600 или 1h).
  • findtime — интервал времени, в течение которого считаются неудачные попытки входа (10 минут).
  • maxretry — количество попыток до блокировки (по умолчанию 5).

В том же файле найдите секцию [sshd] и убедитесь, что она выглядит примерно так:

Где:

  • enabled = true — активирует защиту для SSH;
  • port = ssh — указывает порт, по умолчанию 22 (если вы изменили порт SSH, укажите его здесь);
  • filter = sshd — задает фильтр для логов;
  • logpath — путь к файлу логов аутентификации.

В секции [DEFAULT] вы также можете включить уведомления по email:

А также изменить действие при блокировке IP:

По умолчанию Fail2ban просто обновляет правила файрвола и блокирует IP. Но есть и другие варианты — например, отправка уведомлений на почту (action_mw, action_mwl) или интеграция с Cloudflare (action_cf_mwl).

Важно! Каждый раз, когда вы меняете настройки, нужно перезапускать службу:

Проверка и тестирование защиты Fail2ban

После настройки Fail2ban полезно убедиться, что политика блокировок действительно работает. Для этого можно:

Способ 1. Протестировать блокировку с другого сервера

На втором сервере попробуйте подключиться к Fail2ban-серверу с несуществующим пользователем:

Вместо корректного пароля введите случайные символы несколько раз подряд. Сначала вы будете видеть стандартное сообщение об ошибке:

Но после нескольких неудачных попыток (согласно параметрам maxretry и findtime) сообщение изменится на:

Это означает, что Fail2ban успешно заблокировал IP-адрес вашего второго сервера.

Способ 2. Проверить активные jail и заблокированные IP

Мы уже знаем, что Fail2ban работает через так называемые jail — наборы правил, которые отвечают за защиту конкретного сервиса (например, sshd, nginx, postfix). Чтобы посмотреть, какие jail сейчас активны, выполните:

В выводе будут указан список активных jail и количество текущих блокировок по каждому jail.

Способ 3. Посмотреть заблокированные IP в конкретном jail

Чтобы посмотреть все IP-адреса, заблокированные для определенного сервиса, используйте команду:

В выводе вы получите общее количество заблокированных IP и список всех текущих заблокированных адресов:

Если нужно проверить другой сервис, замените sshd на название нужного jail — например, nginx-http-auth, postfix и так далее.

Способ 4. Проверить мониторинг логов Fail2ban

Fail2ban ведет собственный лог, где фиксируются все события: попытки входа, срабатывания правил и блокировки IP-адресов.

Посмотреть журнал можно, выполнив:

Чтобы отслеживать новые записи в реальном времени, используйте:

Здесь вы увидите, какой IP пытался подключиться, сколько раз были совершены неудачные попытки и был ли этот IP заблокирован.

Заключение

Fail2ban — это простой в установке и гибкий инструмент, который значительно повышает безопасность SSH-сервера. Его основное преимущество в том, что он работает автоматически. Это освобождает администратора от необходимости постоянно отслеживать логи вручную.

Однако не стоит полагаться только на Fail2ban. Для максимальной защиты SSH рекомендуется комбинировать его с другими мерами безопасности: использовать ключи вместо паролей, ограничивать доступ к серверу по IP-адресам, изменять стандартный порт SSH, а при необходимости — внедрять двухфакторную аутентификацию. Вместе эти меры позволяют создать многоуровневую защиту, при которой взлом SSH становится крайне трудоемким и маловероятным.

Новые статьи