Служба блокировки не применяет правила: ключ доступа не принят
Схема из двух частей — служба принятия решений и исполнитель блокировок — ломается в месте их стыка. Признак в том, что решения принимаются и видны, а блокировки не применяются. Ключ доступа при этом действительно основная причина.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Ключ исполнителя не зарегистрирован или устарел
После переустановки службы принятия решений старые ключи недействительны. Исполнитель получает отказ и молча ничего не делает.
-
Исполнитель обращается не к тому адресу
После смены адреса или порта службы принятия решений исполнитель продолжает стучаться по старому.
-
Правила блокировки создаются, но не применяются брандмауэром
Исполнитель создаёт правила в своей цепочке, а основные правила брандмауэра до неё не доходят.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Какие решения о блокировке приняты.
sudo cscli decisions list 2>/dev/null | headЗарегистрированные исполнители и время их последнего обращения.
sudo cscli bouncers list 2>/dev/nullСообщения исполнителя: отказы доступа видны сразу.
journalctl -u "*bouncer*" -n 30 --no-pager 2>/dev/nullРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- После переустановки службы принятия решений старые ключи недействительны. Исполнитель получает отказ и молча ничего не делает.
- Как проверить
-
Посмотрите список исполнителей и сообщения.
sudo cscli bouncers list 2>/dev/null journalctl -u "*bouncer*" -n 20 --no-pager 2>/dev/null | grep -iE "auth|401|403"
- Как исправить
- Зарегистрируйте исполнителя заново и подставьте новый ключ в его настройки. Ключ стоит подавать через механизм учётных данных systemd, а не хранить в файле с широкими правами.
- Почему происходит
- После смены адреса или порта службы принятия решений исполнитель продолжает стучаться по старому.
- Как проверить
-
Сравните адрес в настройках исполнителя и слушателя службы.
sudo grep -iE "api_url|api_key" /etc/crowdsec/bouncers/*.yaml 2>/dev/null | sed "s/api_key.*/api_key: (скрыт)/" sudo ss -tlnp | grep :8080
- Как исправить
- Приведите адрес в соответствие и перезапустите исполнителя. Проверять надо не только адрес, но и схему обращения.
- Почему происходит
- Исполнитель создаёт правила в своей цепочке, а основные правила брандмауэра до неё не доходят.
- Как проверить
-
Посмотрите цепочки и счётчики.
sudo nft list ruleset 2>/dev/null | grep -iA5 crowdsec | head -20
- Как исправить
- Убедитесь, что цепочка исполнителя вызывается из основной и стоит до разрешающих правил. Порядок правил здесь решает всё.
Пример вывода
Ключ исполнителя не принят после переустановки. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
crowdsec-firewall-bouncer[7000]: level=error msg="auth-api: auth with api key failed return nil response, error: API error: access forbidden"
crowdsec-firewall-bouncer[7000]: level=fatal msg="unable to configure bouncer: unable to authenticate"
systemd[1]: crowdsec-firewall-bouncer.service: Main process exited, code=exited, status=1/FAILURE
Связанные ошибки
- fail2ban: правила создаются, но не блокируют Служба работает и «блокирует» адреса, а доступ остаётся: действие настроено под другой брандмауэр.
- status=243/CREDENTIALS в systemd Код 243/CREDENTIALS: не удалось подготовить учётные данные службы из LoadCredential=, SetCredential= или ImportCredential=.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- Брандмауэр не загрузился при старте: ошибка в наборе правил Машина осталась без правил фильтрации: набор не загрузился из-за ошибки, отсутствующего объекта или порядка запуска.
- Connection closed by authenticating user: вход обрывается Клиент отключается на этапе проверки подлинности: не тот ключ, перебор или ограничение по адресу.
- UFW BLOCK в журнале: брандмауэр режет нужный трафик Соединения не устанавливаются, в журнале ядра записи о блокировке. Как найти нужное правило.
- Обновление микрокода процессора не загружено В журнале ядра нет записи о загрузке микрокода: пакет не установлен или образ начальной загрузки не обновлён.
- Apache: Invalid command — не включён модуль Apache не запускается: директива требует модуль, который не подключён. Как найти нужный модуль и включить.
Где встречается чаще всего
Источники
- Документация CrowdSec: исполнители блокировок
-
systemd.exec(5)
LoadCredential= для передачи ключей службе. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено недействительным ключом исполнителя.