Подробный гайд: Ошибка 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. Чек-лист
Пройдитесь по пунктам:
- В статической конфигурации есть блок
experimental.plugins. - Имя плагина выбрано одно и то же.
- В динамической конфигурации используется именно это имя после
plugin:. - В роутере указано имя middleware, а не имя плагина.
- Если middleware в другом провайдере, указан суффикс:
@docker@file@kubernetescrd
- Traefik перезапущен после изменения статической конфигурации.
- Версия плагина существует и совместима с Traefik.
- Логи Traefik содержат DEBUG.
- Middleware видно в Dashboard/API.
- LAPI доступен из контейнера Traefik.
- Ключ баунсера корректен.
- Для 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
- Перезапустите Traefik.
- Убедитесь, что middleware появилось в Dashboard/API.
Если вы используете имя плагина crowdsec-bouncer, просто замените везде:
plugin:
crowdsec:
на:
plugin:
crowdsec-bouncer:
и наоборот.
Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.