8.9 KiB
8.9 KiB
Traefik Reverse Proxy - Конфигурации
Docker Compose конфигурация
Основной файл: /DOCKER/reverse-proxy/docker-compose.yml
version: '3.8'
services:
traefik:
image: traefik:v3.0
container_name: traefik
command:
# API и Dashboard
- --api.dashboard=true
- --api.insecure=true
# Docker Provider
- --providers.docker=true
- --providers.docker.exposedbydefault=false
- --providers.docker.network=proxy
# Entrypoints
- --entrypoints.web.address=:80
- --entrypoints.websecure.address=:443
- --entrypoints.ssh.address=:2222
# SSL Configuration
- --certificatesresolvers.letsencrypt.acme.email=your_email@aepif.ru
- --certificatesresolvers.letsencrypt.acme.storage=/data/acme.json
- --certificatesresolvers.letsencrypt.acme.tlschallenge=true
# TCP Routing
- --providers.docker.exposedByDefault=false
ports:
- "80:80" # HTTP
- "443:443" # HTTPS
- "8080:8080" # Dashboard
- "2222:2222" # SSH для Git
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- traefik_data:/data
networks:
- proxy
labels:
# Самонастройка для Dashboard
- traefik.enable=true
- traefik.http.routers.traefik.rule=Host(`traefik.aepif.ru`)
- traefik.http.routers.traefik.tls.certresolver=letsencrypt
- traefik.http.routers.traefik.service=api@internal
# HTTP to HTTPS redirect
- traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)
- traefik.http.routers.http-catchall.entrypoints=web
- traefik.http.routers.http-catchall.middlewares=redirect-to-https
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
restart: unless-stopped
volumes:
traefik_data:
networks:
proxy:
name: proxy
driver: bridge
Command Line Arguments
API Configuration
--api.dashboard=true- Включает веб-интерфейс Dashboard--api.insecure=true- ⚠️ Небезопасно: Доступ к API без аутентификации на порту 8080
Provider Configuration
--providers.docker=true- Включает Docker provider для автодискавери--providers.docker.exposedbydefault=false- Сервисы не экспонируются автоматически--providers.docker.network=proxy- Использует сетьproxyдля подключения
Entrypoints
--entrypoints.web.address=:80- HTTP entrypoint--entrypoints.websecure.address=:443- HTTPS entrypoint--entrypoints.ssh.address=:2222- TCP entrypoint для SSH
SSL Certificate Management
--certificatesresolvers.letsencrypt.acme.email=your_email@aepif.ru- Email для Let's Encrypt--certificatesresolvers.letsencrypt.acme.storage=/data/acme.json- Файл хранения сертификатов--certificatesresolvers.letsencrypt.acme.tlschallenge=true- Использует TLS-01 challenge
Port Mapping
| Внешний порт | Внутренний порт | Назначение |
|---|---|---|
| 80 | 80 | HTTP трафик (редирект на HTTPS) |
| 443 | 443 | HTTPS трафик |
| 8080 | 8080 | Dashboard (небезопасно) |
| 2222 | 2222 | SSH для Git operations |
Volume Configuration
traefik_data
- Назначение: Хранение SSL сертификатов и конфигурации
- Содержимое:
acme.json- Let's Encrypt сертификаты- Конфигурационные файлы Traefik
Docker Socket
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- Назначение: Доступ к Docker API для service discovery
- Режим: Read-only для безопасности
Network Configuration
Proxy Network
networks:
proxy:
name: proxy
driver: bridge
Важно: Эта сеть должна быть создана заранее и подключена ко всем сервисам, которые должны быть доступны через Traefik.
Labels Configuration
Self-configuration для Dashboard
labels:
- traefik.enable=true
- traefik.http.routers.traefik.rule=Host(`traefik.aepif.ru`)
- traefik.http.routers.traefik.tls.certresolver=letsencrypt
- traefik.http.routers.traefik.service=api@internal
HTTP to HTTPS Redirect
labels:
- traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)
- traefik.http.routers.http-catchall.entrypoints=web
- traefik.http.routers.http-catchall.middlewares=redirect-to-https
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
Dynamic Configuration Examples
Типичные labels для сервиса
labels:
- traefik.enable=true
- traefik.http.routers.service-name.rule=Host(`service.aepif.ru`)
- traefik.http.routers.service-name.tls.certresolver=letsencrypt
- traefik.http.services.service-name.loadbalancer.server.port=80
С Authelia middleware
labels:
- traefik.enable=true
- traefik.http.routers.protected-service.rule=Host(`protected.aepif.ru`)
- traefik.http.routers.protected-service.tls.certresolver=letsencrypt
- traefik.http.routers.protected-service.middlewares=authelia@docker
- traefik.http.services.protected-service.loadbalancer.server.port=80
TCP routing (для SSH)
labels:
- traefik.enable=true
- traefik.tcp.routers.git-ssh.rule=HostSNI(`*`)
- traefik.tcp.routers.git-ssh.entrypoints=ssh
- traefik.tcp.services.git-ssh.loadbalancer.server.port=22
SSL/TLS Configuration
ACME Settings
- Challenge Type: TLS-01 (HTTP challenge через порт 443)
- Storage:
/data/acme.jsonвнутри контейнера - Email: Обязательно указать для уведомлений о истечении сертификатов
- Domains: Автоматически из Host rules в labels
Security Headers (рекомендуемые)
labels:
- traefik.http.middlewares.security-headers.headers.frameDeny=true
- traefik.http.middlewares.security-headers.headers.sslRedirect=true
- traefik.http.middlewares.security-headers.headers.browserXssFilter=true
- traefik.http.middlewares.security-headers.headers.contentTypeNosniff=true
- traefik.http.middlewares.security-headers.headers.forceSTSHeader=true
- traefik.http.middlewares.security-headers.headers.stsIncludeSubdomains=true
- traefik.http.middlewares.security-headers.headers.stsPreload=true
- traefik.http.middlewares.security-headers.headers.stsSeconds=31536000
Middleware Configuration
Redirect to HTTPS
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
Rate Limiting
- traefik.http.middlewares.rate-limit.ratelimit.burst=100
- traefik.http.middlewares.rate-limit.ratelimit.average=50
CORS Headers
- traefik.http.middlewares.cors.headers.accessControlAllowOriginList=*
- traefik.http.middlewares.cors.headers.accessControlAllowMethods=GET,OPTIONS,PUT,POST,DELETE
- traefik.http.middlewares.cors.headers.accessControlAllowHeaders=*
Environment Variables
Traefik поддерживает конфигурацию через переменные окружения:
environment:
- TRAEFIK_API_DASHBOARD=true
- TRAEFIK_PROVIDERS_DOCKER=true
- TRAEFIK_ENTRYPOINTS_WEB_ADDRESS=:80
- TRAEFIK_ENTRYPOINTS_WEBSECURE_ADDRESS=:443
- TRAEFIK_CERTIFICATESRESOLVERS_LETSENCRYPT_ACME_EMAIL=your_email@aepif.ru
Безопасность конфигурации
⚠️ Проблемы безопасности в текущей конфигурации
- Dashboard без аутентификации:
--api.insecure=trueделает Dashboard доступным без авторизации - Docker socket: Доступ к Docker API может быть использован для эскалации привилегий
🔒 Рекомендации по улучшению безопасности
- Убрать
--api.insecure=trueи настроить аутентификацию для Dashboard - Добавить middleware для Dashboard:
- traefik.http.routers.traefik.middlewares=authelia@docker
- Использовать Docker socket proxy для ограничения доступа к Docker API
Связанные файлы
- Развертывание - инструкции по первоначальной настройке
- Администрирование - управление и мониторинг
- ../Authelia Authentication/Конфигурации - настройка middleware аутентификации