Knowledge Base

Traefik Dashboard открыт публично

Traefik Dashboard открыт публично — Collapse Point

Категория: Server Hardening · Риск: critical

Traefik Dashboard открыт публично — Collapse Point

Что даёт открытый Traefik Dashboard

Traefik Dashboard и API (`/dashboard/`, `/api/http/routers`, `/api/rawdata`) раскрывают:

Атакующий получает полную схему инфраструктуры без единого взлома.

Частая ошибка

# docker-compose.yml — ОПАСНО:
services:
  traefik:
    command:
      - --api.insecure=true   # ← Открывает дашборд без аутентификации
    ports:
      - "8080:8080"           # ← Публично доступен

Исправление

1. Отключить insecure API

# docker-compose.yml
command:
  - --api.insecure=false  # или просто убрать --api.insecure=true

2. Дашборд только через Traefik с Basic Auth

# traefik.yml
api:
  dashboard: true
  insecure: false

# docker-compose labels для самого Traefik:
labels:
  - "traefik.enable=true"
  - "traefik.http.routers.dashboard.rule=Host(`traefik.example.com`)"
  - "traefik.http.routers.dashboard.service=api@internal"
  - "traefik.http.routers.dashboard.middlewares=dashboard-auth"
  - "traefik.http.middlewares.dashboard-auth.basicauth.users=admin:$$apr1$$..."
  - "traefik.http.routers.dashboard.tls=true"
# Генерация хеша пароля для basicauth
htpasswd -nb admin 'StrongPassword'
# Экранируйте $ как $$ в docker-compose labels

3. Закрыть порт 8080 файрволом

ufw deny 8080
# Если нужен другой сервис на 8080 — явно разрешите только нужное

4. Ограничить доступ по IP в middleware

# traefik.yml
http:
  middlewares:
    ip-allowlist:
      ipAllowList:
        sourceRange:
          - "10.0.0.0/8"
          - "100.64.0.0/10"  # Tailscale

Проверка

# Должно вернуть Connection refused или 401/403
curl http://<PUBLIC_IP>:8080/dashboard/
curl http://<PUBLIC_IP>:8080/api/http/routers

Связанные статьи