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.