fail2ban читает журналы, находит повторяющиеся неудачные входы и на время блокирует адрес фаерволом. Если вход по паролю уже отключён, fail2ban не обязателен, но снижает шум и нагрузку. Для сервисов с паролями — панелей, почты, WordPress — он особенно полезен.
Установка
$ apt install -y fail2ban python3-systemdПакет python3-systemd позволяет fail2ban читать журнал systemd напрямую. В Debian 12 это обязательно: там по умолчанию нет файла /var/log/auth.log, и без этого защита SSH не запустится.
Настройка
Не правьте jail.conf — он перезапишется при обновлении. Создайте свой файл:
$ nano /etc/fail2ban/jail.local[DEFAULT]# Свои адреса — никогда не банитьignoreip = 127.0.0.1/8 ::1 198.51.100.7bantime = 1hfindtime = 10mmaxretry = 5[sshd]enabled = truebackend = systemd# port = 2222 — если SSH на другом порту$ systemctl enable --now fail2ban$ systemctl restart fail2banПроверьте результат
$ fail2ban-client status$ fail2ban-client status sshdВо втором выводе видно число неудачных попыток и список забаненных адресов. Через некоторое время после запуска он обычно уже не пустой.
Разбанить адрес
$ fail2ban-client set sshd unbanip 198.51.100.7Повторные нарушители
Встроенный jail recidive банит на долгий срок тех, кого уже банили несколько раз. Добавьте в jail.local:
[recidive]enabled = truebantime = 1wfindtime = 1dЧастые ошибки
- fail2ban не стартует с ошибкой про отсутствующий /var/log/auth.log — не указан backend = systemd или не установлен python3-systemd.
- Забанили себя — зайдите с другого адреса или через VNC-консоль, разбаньте и добавьте свой IP в ignoreip.
- Сменили порт SSH, но не указали его в jail — бан ставится на порт 22 и не мешает перебору.