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-адреса и через некоторое время сам снимает ограничение. Если атака продолжается, адрес снова отправляется в бан. Это позволяет держать хакеров под контролем и при этом не мешать обычным пользователям.

Основные возможности 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 — альтернативные действия при необходимости блокировать все порты или усиливать бан (если поддерживается вашей версией).

Установка fail2ban
Fail2ban включен в стандартные репозитории многих дистрибутивов Linux, поэтому его можно установить напрямую через пакетный менеджер.
Ubuntu / Debian :
|
1 2 |
sudo apt update sudo apt install fail2ban -y |
CentOS / RHEL:
|
1 2 |
sudo dnf install epel-release -y sudo dnf install fail2ban -y |
Fedora:
|
1 |
sudo dnf install fail2ban -y |
Arch Linux / Manjaro:
|
1 |
sudo pacman -S fail2ban |
После установки Fail2ban автоматически создает системный сервис и регистрируется в systemd, но по умолчанию он остается выключенным, чтобы администратор успел внести необходимые настройки. Проверить статус можно так:
|
1 |
systemctl status fail2ban.service |
Пример вывода:

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

Как видно, первые строки содержат комментарии (#), и сразу же дается важное предупреждение: не изменяйте jail.conf напрямую. Этот файл обновляется вместе с пакетами Fail2ban и может быть перезаписан.
Вместо этого настройки нужно вносить в отдельные файлы:
- jail.local — основной локальный файл, куда можно скопировать и изменить параметры;
- файлы внутри директории jail.d/, если хотите разделить конфигурации по сервисам.
Сначала создадим копию стандартного файла:
|
1 |
sudo cp jail.conf jail.local |
Теперь откроем его для редактирования:
|
1 |
sudo nano jail.local |

Параметры, которые задаются в секции [DEFAULT], применяются ко всем сервисам. Ключевые настройки:
|
1 2 3 4 |
[DEFAULT] bantime = 10m findtime = 10m maxretry = 5 |
Где:
- bantime — время блокировки IP после превышения лимита (по умолчанию 10 минут, значение указывается в секундах или минутах/часах, например 600 или 1h).
- findtime — интервал времени, в течение которого считаются неудачные попытки входа (10 минут).
- maxretry — количество попыток до блокировки (по умолчанию 5).

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

Где:
- enabled = true — активирует защиту для SSH;
- port = ssh — указывает порт, по умолчанию 22 (если вы изменили порт SSH, укажите его здесь);
- filter = sshd — задает фильтр для логов;
- logpath — путь к файлу логов аутентификации.
В секции [DEFAULT] вы также можете включить уведомления по email:
|
1 2 3 |
destemail = root@localhost sender = root@ mta = sendmail |
А также изменить действие при блокировке IP:
|
1 |
action = %(action_)s |
По умолчанию Fail2ban просто обновляет правила файрвола и блокирует IP. Но есть и другие варианты — например, отправка уведомлений на почту (action_mw, action_mwl) или интеграция с Cloudflare (action_cf_mwl).
Важно! Каждый раз, когда вы меняете настройки, нужно перезапускать службу:
|
1 |
sudo systemctl restart fail2ban |
Проверка и тестирование защиты Fail2ban
После настройки Fail2ban полезно убедиться, что политика блокировок действительно работает. Для этого можно:
Способ 1. Протестировать блокировку с другого сервера
На втором сервере попробуйте подключиться к Fail2ban-серверу с несуществующим пользователем:
|
1 |
ssh fakeuser@my_server |
Вместо корректного пароля введите случайные символы несколько раз подряд. Сначала вы будете видеть стандартное сообщение об ошибке:
|
1 |
Permission denied, please try again. |
Но после нескольких неудачных попыток (согласно параметрам maxretry и findtime) сообщение изменится на:
|
1 |
ssh: connect to host your_server port 22: Connection refused |
Это означает, что Fail2ban успешно заблокировал IP-адрес вашего второго сервера.
Способ 2. Проверить активные jail и заблокированные IP
Мы уже знаем, что Fail2ban работает через так называемые jail — наборы правил, которые отвечают за защиту конкретного сервиса (например, sshd, nginx, postfix). Чтобы посмотреть, какие jail сейчас активны, выполните:
|
1 |
sudo fail2ban-client status |
В выводе будут указан список активных jail и количество текущих блокировок по каждому jail.

Способ 3. Посмотреть заблокированные IP в конкретном jail
Чтобы посмотреть все IP-адреса, заблокированные для определенного сервиса, используйте команду:
|
1 |
sudo fail2ban-client status sshd |
В выводе вы получите общее количество заблокированных IP и список всех текущих заблокированных адресов:

Если нужно проверить другой сервис, замените sshd на название нужного jail — например, nginx-http-auth, postfix и так далее.
Способ 4. Проверить мониторинг логов Fail2ban
Fail2ban ведет собственный лог, где фиксируются все события: попытки входа, срабатывания правил и блокировки IP-адресов.
Посмотреть журнал можно, выполнив:
|
1 |
cat /var/log/fail2ban.log |

Чтобы отслеживать новые записи в реальном времени, используйте:
|
1 |
sudo tail -f /var/log/fail2ban.log |

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