fail2ban: правила создаются, но не блокируют
Самый неприятный случай: fail2ban показывает заблокированные адреса, а фактической блокировки нет. Так бывает, когда действие настроено под iptables, а в системе работает nftables — или правила вставляются после разрешающего правила.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Действие не соответствует брандмауэру системы
На системах с nftables действие для iptables может создавать правила в таблице, которую никто не смотрит.
-
Правило вставлено после разрешающего
Порядок правил решает всё: если выше стоит разрешающее правило, блокировка не сработает.
-
Блокировка проверяется неверно
Проверять надо не список fail2ban, а фактические правила и доступность порта для адреса.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Список правил и заблокированных адресов.
sudo fail2ban-client status sshdФактические правила брандмауэра.
sudo nft list ruleset 2>/dev/null | grep -i f2b | head -20Записи о блокировках и действиях.
journalctl -u fail2ban -n 30 --no-pager | grep -iE "ban|action"Решение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- На системах с nftables действие для iptables может создавать правила в таблице, которую никто не смотрит.
- Как проверить
-
Посмотрите действие и фактические правила.
sudo fail2ban-client get sshd action 2>/dev/null | head sudo nft list ruleset 2>/dev/null | grep -i f2b | head
- Как исправить
- Выберите действие под ваш брандмауэр. В современных дистрибутивах это действие для nftables.
- Почему происходит
- Порядок правил решает всё: если выше стоит разрешающее правило, блокировка не сработает.
- Как проверить
-
Посмотрите порядок правил в цепочке.
sudo nft list chain inet filter input 2>/dev/null | head -20
- Как исправить
- Правила блокировки должны стоять выше разрешающих. Действия fail2ban обычно вставляют их в начало — проверьте, не мешает ли ваша схема.
- Почему происходит
- Проверять надо не список fail2ban, а фактические правила и доступность порта для адреса.
- Как проверить
-
Посмотрите список заблокированных и правила.
sudo fail2ban-client status sshd 2>/dev/null | tail -3 sudo nft list ruleset 2>/dev/null | grep -A5 f2b | head
- Как исправить
- Сверяйте два источника: список fail2ban и правила брандмауэра. Расхождение и есть ответ.
Пример вывода
Служба блокирует, правил в брандмауэре нет. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
$ sudo fail2ban-client status sshd | tail -3
|- Total banned: 14
`- Banned IP list: <адрес> <адрес>
$ sudo nft list ruleset | grep -c f2b
0
Связанные ошибки
- fail2ban: Failed during configuration и отсутствующий файл журнала fail2ban не запускается: в правиле указан файл журнала, которого нет. Переход на чтение журнала systemd.
- Docker: правила брандмауэра конфликтуют с вашими После перезапуска брандмауэра контейнеры теряют сеть: Docker управляет своими правилами сам.
- Address already in use при запуске службы Порт или адрес уже занят: bind() failed (98: Address already in use). Как найти владельца порта и что делать с остатками прежнего процесса.
- Automount: каталог монтируется не вовремя или отваливается Автомонтирование через .automount: как работает TimeoutIdleSec, почему ресурс отваливается и когда лучше обычный .mount.
- Broken pipe в журнале службы Запись в закрытый канал или соединение: клиент отключился, обработчик завершился, конвейер разорван.
- Cannot assign requested address при привязке Ошибка 99 при привязке: адрес не принадлежит машине или ещё не поднят. Разбор с network-online.target и ip_nonlocal_bind.
- Connection refused в журнале службы Соединение отклонено: служба не может подключиться к базе, кешу или другому сервису. Порядок запуска, адрес, брандмауэр.
- Connection reset by peer в журнале службы Соединение сброшено другой стороной: обрыв клиента, перезапуск сервера, промежуточное устройство.
Где встречается чаще всего
Источники
- Документация fail2ban: действия
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено действием для iptables на системе с nftables.