Настройка fail2ban на Debian
Fail2ban блокирует IP после N неудачных попыток входа. На Debian 12+ есть подвох: journald вместо классического /var/log/auth.log.
Установка
sudo apt install -y fail2banПосле установки стартует сам, но без настроенных jail-ов ничего не делает.
Главная gotcha: Debian 12 и journald
Debian 12 (Bookworm) пишет логи в systemd journal, а не в /var/log/auth.log. Если настроить fail2ban по старым гайдам с logpath, он упадёт:
ERROR Failed during configuration: Have not found any log file for sshd jail
Решение — backend = systemd вместо logpath:
[sshd]
enabled = true
backend = systemd # <-- ключевой момент для Debian 12+Проверьте свою систему
Если файл
/var/log/auth.logсуществует — можно использовать классическийlogpath. Если нет (стандарт для Debian 12 minimal) — толькоbackend = systemd.
Конфигурация
Конфиг — в /etc/fail2ban/jail.local (jail.conf не трогать — перезатрётся при обновлении):
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = ufw
[sshd]
enabled = true
port = 22
filter = sshd
backend = systemd
maxretry = 3
bantime = 86400Параметры
| Параметр | Описание | Пример |
|---|---|---|
bantime | Время бана в секундах | 86400 (24 часа) |
findtime | Окно поиска неудачных попыток | 600 (10 минут) |
maxretry | Число попыток до бана | 3 |
banaction | Действие при бане | ufw или iptables-multiport |
backend | Источник логов | systemd для Debian 12+ |
port | Порт сервиса | Если SSH на нестандартном порту — указать |
Выбор banaction
Проверка
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
sudo fail2ban-client set sshd unbanip 1.2.3.4 # разбанить вручнуюfail2ban в Docker?
Для SSH — ставить на хосте. В контейнере нужны --net=host, --cap-add=NET_ADMIN, монтирование /var/log — теряется смысл изоляции.
Для Docker-сервисов (nginx, веб-приложения) есть crazymax/fail2ban, но это сложнее: проброс логов, настройка chain в iptables.