vault backup: 2025-08-04 16:12:28
This commit is contained in:
@@ -1,26 +1,255 @@
|
||||
# Traefik Reverse Proxy - Конфигурации
|
||||
|
||||
## Детальные настройки конфигурации Traefik
|
||||
|
||||
*Документация будет дополнена деталями конфигурации*
|
||||
← **[[Обзор системы|← Назад к обзору]]**
|
||||
|
||||
## Docker Compose конфигурация
|
||||
*Разбор всех параметров docker-compose.yml*
|
||||
|
||||
## Command Line Arguments
|
||||
*Детальное описание всех флагов запуска*
|
||||
### Основной файл: `/DOCKER/reverse-proxy/docker-compose.yml`
|
||||
|
||||
## Static Configuration
|
||||
*Настройки, которые не изменяются во время выполнения*
|
||||
```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
|
||||
|
||||
## Dynamic Configuration
|
||||
*Конфигурация через Docker labels*
|
||||
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
|
||||
*Конфигурация middleware для различных задач*
|
||||
|
||||
---
|
||||
*Эта страница находится в разработке*
|
||||
### 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 аутентификации
|
||||
Reference in New Issue
Block a user