Подробный гайд: Ошибка middleware does not exist: гайд по CrowdSec в Traefik - Часть 5

Полный гайд по устранению ошибки «middleware does not exist» при интеграции crowdsec-bouncer-traefik-plugin в Traefik, Docker Compose и Kubernetes.

2026.10.05                  


Подробный гайд: Ошибка middleware does not exist: гайд по CrowdSec в Traefik - Часть 5Подробный гайд: Ошибка middleware does not exist: гайд по CrowdSec в Traefik - Часть 5

20. Тестирование блокировки

Сначала убедитесь, что middleware вообще существует. Затем можно добавить тестовое решение в CrowdSec.

Например:

docker compose exec crowdsec cscli decisions add --ip 203.0.113.7 --type ban --duration 5m

Проверить решения:

docker compose exec crowdsec cscli decisions list

Теперь запрос с этого IP должен блокироваться. Если вы тестируете локально, можно использовать доверенный X-Forwarded-For, но только если источник запроса входит в forwardedHeadersTrustedIPs.



Например, для теста на локальной машине можно временно разрешить:

forwardedHeadersTrustedIPs:
  - "127.0.0.1/32"

И затем:

curl -i http://whoami.localhost/ -H "X-Forwarded-For: 203.0.113.7"

Если блокировка работает, вы должны получить 403 или другой ответ блокировки от плагина.

После теста удалите решение:

docker compose exec crowdsec cscli decisions delete --ip 203.0.113.7

Или удалите все тестовые решения:

docker compose exec crowdsec cscli decisions delete --all

Будьте осторожны с --all в production.


21. Полезные параметры плагина

Пример основных параметров:

crowdsec:
  plugin:
    crowdsec:
      enabled: true
      logLevel: info
      updateIntervalSeconds: 60
      cacheExpirationSeconds: 60
      crowdsecLapiScheme: http
      crowdsecLapiHost: crowdsec:8080
      crowdsecLapiKey: "ВАШ_КЛЮЧ"

Назначение:

Параметр Описание
enabled Включает работу баунсера
logLevel Уровень логирования плагина
updateIntervalSeconds Как часто обновлять решения
cacheExpirationSeconds Время жизни кэша решений
crowdsecLapiScheme http или https
crowdsecLapiHost Адрес и порт CrowdSec LAPI
crowdsecLapiKey Ключ баунсера
forwardedHeadersTrustedIPs Доверенные источники заголовков
clientTrustedIPs Доверенные клиентские диапазоны
forwardedHeadersCustomName Заголовок с реальным IP

В некоторых версиях плагина также может быть параметр режима поведения при недоступности LAPI, например hard/soft. Точное поведение лучше проверять в документации к вашей версии плагина.


22. Чек-лист

Пройдитесь по пунктам:

  1. В статической конфигурации есть блок experimental.plugins.
  2. Имя плагина выбрано одно и то же.
  3. В динамической конфигурации используется именно это имя после plugin:.
  4. В роутере указано имя middleware, а не имя плагина.
  5. Если middleware в другом провайдере, указан суффикс:
    • @docker
    • @file
    • @kubernetescrd
  6. Traefik перезапущен после изменения статической конфигурации.
  7. Версия плагина существует и совместима с Traefik.
  8. Логи Traefik содержат DEBUG.
  9. Middleware видно в Dashboard/API.
  10. LAPI доступен из контейнера Traefik.
  11. Ключ баунсера корректен.
  12. Для Kubernetes используется правильный apiVersion.

23. Минимальная таблица диагностики

Симптом Вероятная причина Исправление
middleware does not exist Роутер ссылается на несуществующее имя Проверить имя и провайдер
invalid middleware type Плагин не загружен Проверить experimental.plugins и перезапустить
Плагин не виден в API Неверная версия плагина или ошибка загрузки Смотреть логи, исправить версию
Работает в dashboard, но не блокирует Неверный клиентский IP Настроить forwardedHeadersTrustedIPs
LAPI недоступен Используется localhost вместо crowdsec Использовать сервисное имя
Ошибка в Kubernetes Неверный apiVersion traefik.io/v1alpha1 для v3, traefik.containo.us/v1alpha1 для v2

24. Что собрать, если ошибка остаётся

Если после чек-листа ошибка сохраняется, соберите:

docker compose logs traefik | grep -Ei 'plugin|middleware|crowdsec|error'

И подготовьте:

1. Версию Traefik:

docker compose exec traefik traefik version

2. Статическую конфигурацию:

docker compose exec traefik cat /etc/traefik/traefik.yml

3. Динамическую конфигурацию:

docker compose exec traefik cat /etc/traefik/dynamic.yml

4. Список middleware:

curl -s http://localhost:8080/api/http/middlewares | jq

5. Список роутеров:



curl -s http://localhost:8080/api/http/routers | jq

6. Логи во время старта:

docker logs traefik 2>&1 | grep -Ei 'plugin|middleware|crowdsec'

25. Короткий итог

Ошибка:

недопустимый тип промежуточного ПО или промежуточное ПО не существует

обычно исправляется так:

1. Зарегистрируйте плагин в статической конфигурации:

experimental:
  plugins:
    crowdsec:
      moduleName: github.com/crowdsecurity/crowdsec-bouncer-traefik-plugin
      version: vX.Y.Z

2. Используйте то же имя после plugin::

http:
  middlewares:
    crowdsec:
      plugin:
        crowdsec:
          enabled: true

3. Подключите правильное имя к роутеру:

http:
  routers:
    app:
      middlewares:
        - crowdsec

или с провайдером:

        - crowdsec@file
  1. Перезапустите Traefik.
  2. Убедитесь, что middleware появилось в Dashboard/API.

Если вы используете имя плагина crowdsec-bouncer, просто замените везде:

plugin:
  crowdsec:

на:

plugin:
  crowdsec-bouncer:

и наоборот.


Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Аверко Денис Сергеевич @Nymexis г. Омск (специалист по ЗИ)

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта