Брутфорс по SSH, подбор паролей к панели и шум в auth-логах – обычная картина для VPS в открытой сети. Fail2Ban читает логи, ловит повторяющиеся сбои авторизации и временно банит IP через firewall. Ниже – установка и базовая настройка на Ubuntu: jail для SSH, пример для Nginx, почтовые алерты.
Зачем Fail2Ban
Утилита следит за журналами и реагирует на паттерны вроде:
- много неудачных входов по SSH;
- попытки HTTP basic auth на веб-сервере;
- типичный «шум» сканеров, который оставляет следы в error/auth логах.
При превышении порога IP попадает в бан (через iptables/nftables/firewalld, в зависимости от backend). Это не замена сильным ключам и firewall, а слой, который снижает давление автоматических атак.
Установка на Ubuntu
Пакет есть в стандартных репозиториях:
sudo apt update sudo apt install fail2ban
Конфигурация: jail.local
Основной файл /etc/fail2ban/jail.conf при обновлениях пакета может перезаписаться. Рабочие правки лучше держать в jail.local (или в drop-in файлах в jail.d/):
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Jail для SSH
В /etc/fail2ban/jail.local секция [sshd] (порт и путь к логу подставьте свои):
[sshd] enabled = true port = 22 filter = sshd logpath = /var/log/auth.log maxretry = 5
- enabled = true – jail включён.
- port – порт SSH (если не 22, укажите фактический).
- logpath – журнал, который разбирает фильтр (на Ubuntu обычно
/var/log/auth.log). - maxretry – сколько неудачных попыток до бана.
Полезно также задать bantime и findtime глобально в [DEFAULT] или в самом jail: сколько секунд держать бан и в каком окне считать попытки.
Перезапуск и проверка
sudo systemctl restart fail2ban sudo fail2ban-client status sudo fail2ban-client status sshd
status без аргументов покажет список jail, status sshd – счётчики и уже забаненные адреса. Если jail не в списке, проверьте синтаксис jail.local и логи journalctl -u fail2ban.
Пример: Nginx HTTP auth
Для basic auth на Nginx в том же jail.local:
[nginx-http-auth] enabled = true filter = nginx-http-auth port = http,https logpath = /var/log/nginx/error.log maxretry = 3
Фильтр смотрит ошибки авторизации в error-логе Nginx. Путь к логу должен совпадать с вашим error_log в конфиге сайта. Есть и другие готовые jail (apache, postfix и т.д.) – включайте только то, что реально крутится на сервере.
Уведомления на почту
В секции по умолчанию или в конкретном jail можно слать письма при бане (нужен рабочий MTA, например sendmail/postfix):
destemail = your-email@example.com sendername = Fail2Ban mta = sendmail action = %(action_mwl)s
action_mwl – бан плюс письмо с whois и фрагментом лога. Адрес и MTA замените на свои; без настроенной доставки писем action упадёт в ошибку.
На что обратить внимание
- Не баньте свой постоянный IP «вслепую»: whitelist через
ignoreipв[DEFAULT]. - Fail2Ban не заменяет ключи SSH, отключение password auth, UFW/nftables и обновления.
- Слишком короткий
bantimeи большойmaxretryпочти не давят атаку; слишком жёсткие значения рискуют забанить легитимных пользователей за NAT.
В связке с firewall, сильной аутентификацией и обновлениями Fail2Ban заметно снижает фоновый шум брутфорса на публичном сервере.

