Files
second-mind-aep/⚙️ Техническое/🖥️ Серверы/Traefik Reverse Proxy/Конфигурации.md
Andrey Epifancev e96fec3709 Реорганизация структуры заметок v2.0
- Создана новая организационная структура с эмодзи-папками
- Добавлена система Inbox для быстрого захвата идей
- Созданы шаблоны для всех типов заметок с YAML метаданными
- Перенесен весь контент из старой структуры в новую
- Добавлен главный дашборд с динамическими запросами
- Создано подробное руководство по использованию системы
- Техническая документация реорганизована по типам

Основные улучшения:
 Inbox-first подход для новых заметок
 Тематическая организация по 8 областям знаний
 Шаблоны с метаданными для структурированности
 Система связей между заметками
 Динамические дашборды с аналитикой
 Централизованная техническая документация без дублирования
2025-08-09 22:11:50 +04:00

255 lines
8.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Traefik Reverse Proxy - Конфигурации
**[[Обзор системы|← Назад к обзору]]**
## Docker Compose конфигурация
### Основной файл: `/DOCKER/reverse-proxy/docker-compose.yml`
```yaml
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
```yaml
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
```
- **Назначение**: Доступ к Docker API для service discovery
- **Режим**: Read-only для безопасности
## Network Configuration
### Proxy Network
```yaml
networks:
proxy:
name: proxy
driver: bridge
```
**Важно**: Эта сеть должна быть создана заранее и подключена ко всем сервисам, которые должны быть доступны через Traefik.
## Labels Configuration
### Self-configuration для Dashboard
```yaml
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
```yaml
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 для сервиса
```yaml
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
```yaml
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)
```yaml
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 (рекомендуемые)
```yaml
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
```yaml
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
```
### Rate Limiting
```yaml
- traefik.http.middlewares.rate-limit.ratelimit.burst=100
- traefik.http.middlewares.rate-limit.ratelimit.average=50
```
### CORS Headers
```yaml
- 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 поддерживает конфигурацию через переменные окружения:
```yaml
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
```
## Безопасность конфигурации
### ⚠️ Проблемы безопасности в текущей конфигурации
1. **Dashboard без аутентификации**: `--api.insecure=true` делает Dashboard доступным без авторизации
2. **Docker socket**: Доступ к Docker API может быть использован для эскалации привилегий
### 🔒 Рекомендации по улучшению безопасности
1. Убрать `--api.insecure=true` и настроить аутентификацию для Dashboard
2. Добавить middleware для Dashboard:
```yaml
- traefik.http.routers.traefik.middlewares=authelia@docker
```
3. Использовать Docker socket proxy для ограничения доступа к Docker API
## Связанные файлы
- **[[Развертывание]]** - инструкции по первоначальной настройке
- **[[Администрирование]]** - управление и мониторинг
- **[[../Authelia Authentication/Конфигурации]]** - настройка middleware аутентификации