VDS · Безопасность

Fail2ban против перебора паролей

Как поставить и настроить fail2ban: блокировка перебора SSH и веб-форм, белый список своих адресов, проверка работы и разблокировка себя.

Обновлено 23 августа 2026 г.

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

Установка и базовая настройка

apt install -y fail2ban

Собственный файл /etc/fail2ban/jail.local — правки в jail.conf затираются обновлением:

[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
ignoreip = 127.0.0.1/8 203.0.113.5
banaction = ufw

[sshd]
enabled = true
port = 22
maxretry = 3
bantime = 24h
systemctl enable --now fail2ban
fail2ban-client status
fail2ban-client status sshd

Впишите в ignoreip свой домашний или офисный адрес — это страховка от того, чтобы забанить самого себя. Если адрес меняется, страховкой остаётся консоль в панели /hosting/vds/<id>: она работает независимо от сети и правил.

Значение banaction должно соответствовать вашему брандмауэру: ufw для ufw, nftables-multiport для nftables.

Где смотреть результат

fail2ban-client status sshd
tail -f /var/log/fail2ban.log
journalctl -u fail2ban -n 50

В статусе видно число неудачных попыток и список заблокированных адресов. На публичном адресе счётчик за сутки в сотнях — это норма, а не признак целевой атаки.

Разблокировать адрес (в том числе свой):

fail2ban-client set sshd unbanip 203.0.113.5

Защита не только SSH

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

[nginx-http-auth]
enabled = true

[nginx-limit-req]
enabled = true
logpath = /var/log/nginx/error.log

[postfix-sasl]
enabled = true

Для своего приложения понадобится фильтр — файл в /etc/fail2ban/filter.d/ с регулярным выражением, в котором адрес обозначен как <HOST>:

[Definition]
failregex = ^.*login failed.*ip=<HOST>.*$
ignoreregex =

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

fail2ban-regex /var/log/myapp.log /etc/fail2ban/filter.d/myapp.conf

Эта команда показывает, сколько строк совпало. Ноль совпадений означает, что правило написано неверно, — а тихо неработающая защита хуже отсутствующей.

Частые ошибки

ОшибкаПоследствиеРешение
Правки в jail.confПропадут при обновленииПисать в jail.local
Свой адрес не в ignoreipОднажды забаните себяДобавить или заходить через консоль панели
banaction не совпадает с брандмауэромБлокировки не применяютсяСогласовать с ufw или nftables
Фильтр не совпадает с форматом журналаТишина вместо защитыПроверить fail2ban-regex
Служба не читает журнал systemdПустой статусУказать backend = systemd

Проверьте работу вживую: намеренно ошибитесь паролем нужное число раз с постороннего адреса и убедитесь, что он попал в список заблокированных. Ненастроенный fail2ban создаёт ложное чувство защищённости.

Дополняет его ограничение частоты подключений в самом брандмауэре — ufw limit 22/tcp.