Skitflow

Traefik Middleware

Настройка заголовков безопасности, ограничения скорости, IP-списков разрешений, лимитов одновременных запросов и базовой аутентификации для приложений и compose-стеков.

Конфигурация Traefik middleware позволяет привязывать правила обработки запросов к приложению или Docker Compose-стеку без прямого редактирования конфигурационных файлов Traefik. Правила хранятся для каждого ресурса. Для приложений конфигурация записывается напрямую в динамическую конфигурацию Traefik file-provider при upsert/disable и применяется немедленно; для Docker Compose-стеков правила внедряются как Traefik-метки и применяются при следующем деплое.

Конфигурация middleware применяется к приложениям и Docker Compose-стекам. Basic Auth доступен только для compose — приложения используют отдельную вкладку Security.

Доступ к настройкам middleware

Перейдите в Application или Compose → вкладка Security. Для просмотра настроек необходимо разрешение app_security.read, для внесения изменений — app_security.write.

Заголовки безопасности

Включите Security Headers, чтобы активировать middleware заголовков. Отдельные заголовки можно комбинировать:

ПолеОписание
HSTSДобавляет Strict-Transport-Security для принудительного HTTPS
Frame DenyУстанавливает X-Frame-Options: DENY для защиты от clickjacking
Content Type NosniffУстанавливает X-Content-Type-Options: nosniff
Referrer PolicyЗначение заголовка Referrer-Policy
Custom Response HeadersСловарь дополнительных заголовков для внедрения

Ограничение скорости

Включите Rate Limit, чтобы активировать middleware rateLimit Traefik:

ПолеОписание
AverageМаксимальное количество разрешённых запросов за период
BurstМаксимальный всплеск сверх среднего
PeriodВременное окно для среднего значения (например, 1s, 1m)

Лимит одновременных запросов

Ограничивает количество одновременных запросов, передаваемых в сервис. Включите In-Flight Limit и укажите:

  • Amount — максимальное количество одновременных запросов. Избыточные запросы получают ответ 429 Too Many Requests.

Ограничение размера тела запроса

Включите Body Limit и укажите:

  • Max Request Body Bytes — запросы с телом, превышающим это значение (в байтах), будут отклонены.

IP-список разрешений

Включите IP Allowlist и укажите список IPv4/IPv6-адресов или CIDR-диапазонов. Пересылаются только запросы из указанных источников; все остальные получают ответ 403 Forbidden.

Адреса должны соответствовать формату 1.2.3.4 или 10.0.0.0/24. Символы вне этих наборов отклоняются для предотвращения инъекций в метки.

Basic Auth (только для compose)

Basic Auth доступен только для Docker Compose-стеков. Для приложений используйте вкладку Security.

Включите Basic Auth, чтобы требовать HTTP basic-аутентификацию для каждого запроса. Пароли хранятся в виде bcrypt-хешей и никогда не возвращаются через API — отображаются только имена пользователей.

Добавление пользователя

Перейдите в Compose → Security → Basic Auth и нажмите Add User. При добавлении первого пользователя Basic Auth включается автоматически — отдельно активировать переключатель заранее не требуется. Укажите:

  • Username — не должен содержать пробелы или символы : , $ \ ` во избежание инъекций в метки Traefik
  • Password — хранится в виде bcrypt-хеша
POST /api/trpc/traefikMiddlewareConfig.addBasicAuthUser
{
  "composeId": "<compose-id>",
  "username": "alice",
  "password": "s3cr3t"
}

Удаление пользователя

POST /api/trpc/traefikMiddlewareConfig.removeBasicAuthUser
{
  "composeId": "<compose-id>",
  "username": "alice"
}

Применение настроек по умолчанию

Действие Apply Secure Defaults задаёт усиленный базовый уровень в один клик. Существующие значения этих полей перезаписываются; настройки IP-списка разрешений и Basic Auth остаются без изменений:

ПолеЗначение
Заголовки безопасностиВключены — HSTS, запрет фреймов, nosniff для типов контента, Referrer-Policy: strict-origin-when-cross-origin
Ограничение скоростиВключено — 100 в среднем, всплеск 50, период 1s
Лимит одновременных запросовВключён — 100 одновременных запросов
Лимит размера телаВключён — 20971520 байт (20 МиБ)
POST /api/trpc/traefikMiddlewareConfig.applySecureDefaults
{
  "applicationId": "<application-id>"
}

Отключение всего middleware

Disable полностью удаляет запись конфигурации middleware. Все правила Traefik удаляются при следующем обновлении конфигурации или деплое.

POST /api/trpc/traefikMiddlewareConfig.disable
{
  "composeId": "<compose-id>"
}

Справочник API

Все эндпоинты требуют действительного токена сессии участника с соответствующим разрешением app_security.

МетодПутьРазрешениеОписание
GET/api/trpc/traefikMiddlewareConfig.getapp_security.readПолучить конфигурацию middleware для ресурса
POST/api/trpc/traefikMiddlewareConfig.upsertapp_security.writeСоздать или обновить конфигурацию middleware
POST/api/trpc/traefikMiddlewareConfig.applySecureDefaultsapp_security.writeПрименить усиленные настройки по умолчанию
POST/api/trpc/traefikMiddlewareConfig.disableapp_security.writeУдалить всю конфигурацию middleware
POST/api/trpc/traefikMiddlewareConfig.addBasicAuthUserapp_security.writeДобавить пользователя Basic Auth (только compose)
POST/api/trpc/traefikMiddlewareConfig.removeBasicAuthUserapp_security.writeУдалить пользователя Basic Auth (только compose)

Тело запроса get / disable

Укажите ровно одно из значений: applicationId или composeId:

{ "applicationId": "<id>" }

или

{ "composeId": "<id>" }

Тело запроса upsert

Все поля конфигурации являются необязательными; пропущенные поля остаются без изменений:

{
  "applicationId": "<id>",
  "headersEnabled": true,
  "hstsEnabled": true,
  "frameDeny": true,
  "contentTypeNosniff": true,
  "referrerPolicy": "strict-origin-when-cross-origin",
  "customResponseHeaders": { "X-Powered-By": "" },
  "rateLimitEnabled": true,
  "rateLimitAverage": 100,
  "rateLimitBurst": 50,
  "rateLimitPeriod": "1s",
  "inFlightEnabled": true,
  "inFlightAmount": 20,
  "bodyLimitEnabled": true,
  "maxRequestBodyBytes": 10485760,
  "ipAllowListEnabled": false,
  "ipAllowList": [],
  "basicAuthEnabled": false
}

On this page