fail2ban в systemd: почему не запускается
fail2ban падает в основном из-за того, за чем он следит: если указанного файла журнала нет, служба не стартует целиком. Вторая причина — расхождение между настроенным способом блокировки и тем, что есть в системе: nftables против iptables.
О службе
fail2ban читает настройки из /etc/fail2ban с наложением: файлы *.conf идут от пакета, *.local — ваши. Правки нужно вносить только в .local, иначе обновление пакета их затрёт. Ошибка в любом включённом файле останавливает запуск службы, а не отдельного правила.
Каждое правило (jail) указывает файл журнала. Если файла нет — например настроено наблюдение за журналом apache, который не установлен, — служба откажется стартовать. В современных сборках вместо файлов используется чтение журнала systemd, и тогда нужен параметр backend=systemd.
Способ блокировки задаётся действием. На системах с nftables действие для iptables может не работать, и служба запустится, но блокировать не будет. Это самый неприятный вариант: внешне всё в порядке, а защиты нет.
Как устроена
| Настройки | файлы .local в /etc/fail2ban поверх .conf от пакета |
|---|---|
| Проверка настроек | fail2ban-client -t — разбирает все правила и печатает ошибки |
| Источник событий | файл журнала или журнал systemd при backend=systemd |
| Состояние правил | fail2ban-client status и fail2ban-client status ИМЯ |
| Частая поломка | отсутствующий файл журнала в правиле останавливает всю службу |
Частые ошибки
6 записей базы отмечены за этой службой.
Коды выхода
- status=1/FAILURE в systemdКод 1/FAILURE означает, что программа запустилась и сама завершилась с ошибкой. Как найти настоящую причину в журнале службы.
Сообщения журнала
- No such file or directory в журнале службыСлужба не находит файл или каталог. Разбор: путь, момент запуска, изоляция unit-файла, символические ссылки, приватный /tmp.
- Permission denied в журнале службыОтказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
Состояния результата
- start-limit-hit: служба заблокирована после серии перезапусковСостояние start-limit-hit и сообщение start request repeated too quickly: systemd перестал перезапускать службу. Как разблокировать и найти исходную причину.
Ошибки служб
- fail2ban: Failed during configuration и отсутствующий файл журналаfail2ban не запускается: в правиле указан файл журнала, которого нет. Переход на чтение журнала systemd.
- fail2ban: правила создаются, но не блокируютСлужба работает и «блокирует» адреса, а доступ остаётся: действие настроено под другой брандмауэр.
Коды выхода этой службы
Числа в status=N ниже 200 назначает сама программа, 200 и выше — systemd, когда не смог подготовить запуск.
Диагностика
Проверка всех настроек: печатает файл, правило и ошибку.
sudo fail2ban-client -tСостояние службы и последние строки журнала.
systemctl status fail2ban --no-pager -lСписок активных правил: пустой список при активной службе — тревожный признак.
sudo fail2ban-client statusСообщения об отсутствующих файлах журналов и ошибках действий.
journalctl -u fail2ban -n 40 --no-pager | grep -iE "error|failed|not found"Параметры unit, которые тут важны
- Type=simple или notify в зависимости от версии
- Restart=on-failure: защита должна возвращаться после сбоя
- RuntimeDirectory=каталог в /run для сокета управления
Источники
- Документация fail2ban
- Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)