Fail2ban: как защитить сервер от подбора пароля — инструкция для новичка
В этой инструкции из блога HostingFAQ вы разберёте, что такое fail2ban, и настроите его на Ubuntu или Debian примерно за 15 минут: установите службу, включите защиту SSH, подберёте число попыток и срок бана, научитесь проверять блокировки и снимать их. Подойдёт, если у вас свой VPS и в журнале входа появляются чужие попытки подобрать пароль.

Коротко
- Fail2ban читает журналы сервера и банит IP-адреса, с которых много раз подряд вводят неверный пароль.
- Установка на Ubuntu 24.04 и Debian 12 занимает одну команду: sudo apt install fail2ban.
- По умолчанию действуют значения: 5 попыток (maxretry), окно поиска 10 минут (findtime), бан на 10 минут (bantime).
- Свои настройки хранят в файле /etc/fail2ban/jail.local, а не в jail.conf: обновление пакета jail.conf перезаписывает.
- В примере из статьи: 3 попытки за 10 минут и бан на 1 час для SSH на порту 22.
- Состояние защиты показывает команда sudo fail2ban-client status sshd, снять бан — команда unbanip.
- Fail2ban дополняет, а не заменяет вход по SSH-ключам: вместе они закрывают большую часть подбора паролей.
Что такое fail2ban и зачем он нужен на сервере
Fail2ban — служба для Linux, которая читает журналы сервера и находит повторяющиеся неудачные входы. Когда с одного IP-адреса (адреса компьютера в сети) приходит слишком много неверных паролей подряд, служба временно блокирует этот адрес через файрвол. Вам не нужно следить за журналом вручную: бан срабатывает сам.
Проблема знакома каждому, у кого есть VPS (виртуальный сервер) с открытым портом 22. Боты сканируют интернет круглосуточно и начинают подбирать пароль в первые часы после запуска сервера. Файл журнала быстро заполняется строками Failed password for root from ..., а нагрузка и шанс угадать слабый пароль растут вместе с числом попыток. В примере этой статьи используется VPS на Ubuntu 24.04, вход по SSH (защищённому удалённому доступу, подробнее в материале про SSH-клиент) на порту 22 и подбор пароля к пользователю root.
Если вы только осваиваете администрирование, начните с материала про Linux для сервера, а ответы на базовые вопросы о выборе сервера соберены в разделе о VPS.
Что fail2ban защищает и что нет:
- защищает SSH от подбора пароля;
- закрывает повторные попытки входа в почтовые службы;
- реагирует на подозрительные запросы к веб-серверу, например к странице входа;
- не заменяет SSH-ключи: вместе они закрывают большую часть подбора паролей;
- не спасает от распределённых атак, где запросы идут с тысяч адресов, — об этом читайте в статье про DDoS-атаку;
- не исправляет слабые пароли и ошибки в настройках служб.
Как работает fail2ban: фильтры, jail и бан по IP
Fail2ban работает как цепочка из четырёх звеньев. Служба читает журнал, например записи SSH (Secure Shell, защищённого удалённого входа) о неверных паролях. Фильтр с регулярным выражением, то есть шаблоном поиска по тексту, вытаскивает из строки IP-адрес нарушителя. Счётчик считает неудачные попытки с этого адреса, а при превышении лимита файрвол получает правило блокировки.
Связку «журнал, фильтр, действие» fail2ban называет jail, то есть «тюрьма». Filter — файл с регулярными выражениями из каталога /etc/fail2ban/filter.d/. Action — реакция на нарушителя: по умолчанию в файрвол добавляется правило, которое закрывает адресу доступ к порту. На современных Ubuntu и Debian файла /var/log/auth.log может не быть, поэтому в нашем примере задан backend = systemd: fail2ban читает системный журнал systemd напрямую.
Бан временный. Когда срок bantime истекает, fail2ban сам удаляет правило, и адрес снова может подключаться. Значения по умолчанию такие:
maxretry = 5— 5 неудачных попыток;findtime = 10m— окно подсчёта 10 минут;bantime = 10m— бан на 10 минут.
Получается, что 5 неудачных входов за 10 минут отправляют адрес в бан на 10 минут. В нашем примере мы сделаем строже: 3 попытки и бан на 1 час. Fail2ban отсекает только подбор паролей, а общий уровень защиты сервера помогает оценить проверка сайта на безопасность.

Как установить и настроить fail2ban для защиты SSH
Установка занимает одну команду, а основная работа — короткий файл настроек. Все шаги проверены на VPS (virtual private server, виртуальном сервере) с Ubuntu 24.04 или Debian 12, где вход по SSH (Secure Shell, защищённое удалённое подключение) идёт на порту 22. Если сервера ещё нет, арендуйте виртуальный сервер, а систему поставьте по инструкции установки Debian на сервер.
Свои правила храните в /etc/fail2ban/jail.local, а не в jail.conf: обновление пакета перезаписывает второй файл. Подключитесь любым клиентом, например по инструкции как пользоваться PuTTY, и заранее узнайте свой внешний IP-адрес: он нужен для белого списка. Выполните шаги по порядку:
- Подключитесь к серверу по SSH и обновите список пакетов:
sudo apt update. - Установите службу:
sudo apt install fail2ban. - Откройте файл настроек:
sudo nano /etc/fail2ban/jail.local. - Впишите настройки, подставив вместо
203.0.113.10свой IP:[DEFAULT] ignoreip = 127.0.0.1/8 ::1 203.0.113.10 bantime = 1h findtime = 10m maxretry = 3 [sshd] enabled = true port = ssh backend = systemd - Сохраните файл (
Ctrl+O,Enter,Ctrl+X) и запустите службу:sudo systemctl enable --now fail2ban. - Проверьте тюрьму SSH:
sudo fail2ban-client status sshd. Вы увидите число неудачных входов и список забаненных адресов. - Посмотрите журнал службы:
sudo tail -n 20 /var/log/fail2ban.log.
Что означают параметры. maxretry = 3 — бан после третьей неудачной попытки (по умолчанию их 5). findtime = 10m — окно, в котором считаются попытки, то есть 10 минут. bantime = 1h — блокировка на 1 час вместо стандартных 10 минут. ignoreip защищает от бана вас самих, а backend = systemd заставляет читать системный журнал: файла /var/log/auth.log на свежих системах может не быть. После правок применяйте настройки командой sudo fail2ban-client reload. Если что-то не заработало, загляните в ответы на частые вопросы о VPS.

Параметры jail.local: bantime, findtime и maxretry
Три параметра работают вместе. maxretry задаёт число неудачных входов, findtime — окно, в которое они считаются, а bantime — срок блокировки. В нашем примере IP-адрес получает бан на 1 час, если сделал 3 ошибки за 10 минут. Если ошибки растянулись на 11 минут, счётчик не сработает. Fail2ban сверяет время записей в журнале, поэтому проверьте синхронизацию времени на сервере.
Ориентиры по сроку бана: от 10 минут для мягкой защиты до 1 недели для упорных перебирающих. Для тюрьмы recidive, которая банит повторных нарушителей, обычно ставят до 1 недели.
Не снижайте maxretry до 1: одна опечатка в пароле заблокирует вас самих. Добавьте свой адрес в ignoreip: узнайте внешний IP-адрес или IP компьютера и впишите его после 127.0.0.1/8 ::1.
Параметры из файла /etc/fail2ban/jail.local, их значения по умолчанию и в нашем примере:
| Параметр | Что делает | По умолчанию | В примере |
|---|---|---|---|
ignoreip |
Адреса, которые не банятся | 127.0.0.1/8 ::1 |
127.0.0.1/8 ::1 и ваш внешний IP |
bantime |
Срок блокировки | 10m | 1h |
findtime |
Окно подсчёта ошибок | 10m | 10m |
maxretry |
Допустимое число ошибок | 5 | 3 |
backend |
Откуда читать журналы | auto | systemd |
port, banaction |
Защищаемый порт и способ блокировки через файрвол | зависит от системы | порт 22, действие по умолчанию |
Как проверить работу fail2ban и разблокировать IP
Начните с команды sudo fail2ban-client status sshd. В выводе три ключевые строки: Currently failed показывает, сколько неудачных попыток сейчас учтено в окне findtime (10 минут), Total banned — сколько блокировок было с запуска службы, Banned IP list — какие адреса заблокированы прямо сейчас. Пустой список не ошибка: в данный момент никто не подбирает пароль.
Подробности хранит журнал службы. Выполните sudo grep -E "Ban|Unban" /var/log/fail2ban.log: строка Ban 203.0.113.10 означает блокировку IP (Internet Protocol, сетевой адрес), а Unban — снятие после истечения bantime, в нашем примере 1 часа. Чтобы следить за событиями вживую, запустите sudo tail -f /var/log/fail2ban.log. Для постоянного наблюдения за числом банов можно подключить систему мониторинга Zabbix.
Если ошиблись с паролем 3 раза и попали в бан, снимите блокировку вручную: sudo fail2ban-client set sshd unbanip 203.0.113.10. После правки /etc/fail2ban/jail.local примените настройки командой sudo fail2ban-client reload, перезапускать сервер не нужно.
Перед проверкой защиты учтите несколько вещей:
- Проверяйте бан с тестового адреса: другого VPS (Virtual Private Server, виртуальный сервер) или мобильного интернета. Со своего рабочего IP вы рискуете запереть себя.
- Рабочий адрес добавьте в
ignoreip, чтобы он не блокировался. - Делайте неверные попытки входа по SSH (Secure Shell) на порту 22, пока адрес не появится в
Banned IP list. - Если сервер стоит за маршрутизатором, сначала разберитесь, как работает проброс портов.

Частые ошибки при настройке fail2ban
Новички чаще всего спотыкаются на четырёх вещах: блокируют сами себя, видят пустую тюрьму sshd, оставляют в настройках старый порт SSH или правят не тот файл. Каждую ошибку можно исправить за 1–5 минут. Ниже у каждой указаны причина и порядок действий.
1. Вы заблокировали сами себя
Причина: вы ошиблись с паролем 3 раза за 10 минут, и fail2ban забанил ваш IP-адрес на 1 час. Решение: зайдите через консоль хостинга в панели VPS и снимите бан командой sudo fail2ban-client set sshd unbanip 203.0.113.10. Чтобы ситуация не повторилась, добавьте в /etc/fail2ban/jail.local строку ignoreip = 127.0.0.1/8 ::1 и свой внешний IP через пробел, затем выполните sudo fail2ban-client reload.
2. Тюрьма sshd пуста, хотя попытки входа были
Причина: fail2ban ищет файл /var/log/auth.log, а на современных Ubuntu и Debian его может не быть: события SSH пишутся в журнал systemd. Решение: в секции [sshd] файла jail.local укажите backend = systemd, перезагрузите конфигурацию и проверьте результат командой sudo fail2ban-client status sshd.
3. Сменили порт SSH, а в jail.local остался порт 22
Причина: правило бана закрывает порт из параметра port, поэтому новый порт остаётся открытым для перебора. Решение: впишите в секцию [sshd] актуальный номер, например port = 2222, и выполните sudo fail2ban-client reload. Порты других служб, например порт 25 для почты или порт HTTPS, указывают так же.
4. Правки внесены в jail.conf и пропали после обновления
Причина: пакет перезаписывает /etc/fail2ban/jail.conf при каждом обновлении. Решение: перенесите свои значения в /etc/fail2ban/jail.local, оставив там только изменённые параметры. Перед переносом сделайте резервную копию рабочих настроек.
sudo fail2ban-client reload и держите открытой вторую SSH-сессию. Если в конфигурации опечатка, вы сразу заметите её и сохраните доступ к серверу.Все четыре ошибки сводятся к одному правилу: настройки живут в jail.local, а исключения, порт и источник журнала нужно проверять сразу после изменения.
Альтернативы fail2ban и для кого он не подходит
Fail2ban — не единственный способ защитить сервер от подбора паролей, и ни один способ не работает идеально сам по себе. Сравните варианты в таблице.
Новичку подойдёт связка: вход по SSH-ключам (Secure Shell) с отключённым паролем плюс fail2ban. Ключи делают подбор пароля бессмысленным, а fail2ban банит нарушителей, например на 1 час после 3 неудачных попыток за 10 минут, и разгружает журнал.
| Способ | Что закрывает | Сложность | Минусы |
|---|---|---|---|
| fail2ban | Повторный подбор пароля, бан по IP | Средняя, около 15 минут | Не защищает от распределённого DDoS |
| SSH-ключи, пароль отключён | Подбор пароля целиком | Низкая | Потеряли ключ — потеряли доступ |
| Смена порта с 22 | Часть автоматических сканеров | Низкая | Это маскировка, а не защита |
| Ограничение по IP в файрволе | Вход только с ваших адресов | Средняя | Неудобно при меняющемся IP |
| CrowdSec | Бан по общей базе нарушителей | Средняя | Отдельная служба и больше настроек |
Fail2ban не стоит ставить в трёх случаях:
- IP у вас часто меняется, а консоли хостинга нет: ошибочный бан закроет доступ к серверу.
- Десятки пользователей сидят за одним NAT (Network Address Translation): ошибки одного заблокируют общий адрес для всех.
- Нужна защита от распределённого DDoS (Distributed Denial of Service): это задача провайдера, начните с настройки Cloudflare.
Перед любыми правками доступа сделайте резервную копию VPS через restic. Если сомневаетесь в типе сервера, сравните варианты в материале про VDS, а затем выберите VPS с доступом к консоли.
Частые вопросы
Что такое fail2ban простыми словами?
Как установить fail2ban на Ubuntu?
Какие настройки fail2ban по умолчанию?
Где находится конфигурационный файл fail2ban?
Как посмотреть список заблокированных IP в fail2ban?
Как разблокировать IP в fail2ban?
Почему fail2ban не банит, хотя в журнале есть неудачные входы?
Нужен ли fail2ban, если я использую SSH-ключи?
Защитит ли fail2ban от DDoS-атаки?
Как защитить себя от случайной блокировки в fail2ban?
Можно ли банить повторных нарушителей надолго?
Проверьте себя
- Fail2ban установлен, служба fail2ban включена и запущена.
- Настройки лежат в jail.local, а не в jail.conf.
- В блоке [sshd] указано enabled = true и верный порт SSH.
- Ваш IP добавлен в ignoreip, а доступ к консоли хостинга под рукой.
- Команда fail2ban-client status sshd показывает работающую тюрьму.
- В /var/log/fail2ban.log видны строки Ban и Unban, когда срабатывает защита.
На сайте есть партнёрские ссылки: если вы оформите заказ по ним, мы получим вознаграждение от провайдера. Это не влияет на цену для вас и на место в рейтинге.