Traefik
Reverse proxy avec TLS automatique via Let's Encrypt et DNS challenge Cloudflare.
Acces
| URL | https://traefik.home.gabin-simond.fr (dashboard) |
| Host | penny (Docker) |
| Image | traefik:latest (digest pinned) |
| Port interne | 8080 (dashboard, non exposé) |
| Auth | ForwardAuth Authelia |
Fonctionnement
Configuration
Traefik est configuré via :
- Labels Docker sur chaque conteneur — definissent les routes (services sur penny)
- File provider (
traefik/dynamic/) — routes vers les services hors Docker (Proxmox, LXC) traefik.yml— configuration statique (entrypoints, certresolver, middlewares)- Variables d'env —
CF_API_EMAILetCF_DNS_API_TOKENpour le DNS challenge
Entrypoints
| Entrypoint | Port | Usage |
|---|---|---|
web | 80 | HTTP (redirige automatiquement vers HTTPS) |
websecure | 443 | HTTPS (TLS) |
Labels Docker (template)
labels:
- "traefik.enable=true"
- "traefik.http.routers.SERVICE.rule=Host(`service.home.gabin-simond.fr`)"
- "traefik.http.routers.SERVICE.entrypoints=websecure"
- "traefik.http.services.SERVICE.loadbalancer.server.port=PORT_INTERNE"
- "traefik.http.routers.SERVICE.tls=true"
- "traefik.http.routers.SERVICE.tls.certresolver=letencrypt"
File provider (services externes)
Routes vers Proxmox et LXC dans traefik/dynamic/ :
| Fichier | Service | Backend |
|---|---|---|
proxmox.yml | galahad / lancelot | https://192.168.1.18:8006 / https://192.168.1.19:8006 |
adguard.yml | AdGuard (host mode) | http://192.168.1.28:3000 |
Les services file provider utilisent un serversTransport dedie avec insecureSkipVerify (les certs Proxmox sont auto-signes). Ce transport est scope — pas applique globalement.
Middlewares
Global (applique sur websecure)
security-headers: HSTS, X-Frame-OptionsDENY, X-Content-Type-Optionsnosniff, Referrer-Policystrict-origin-when-cross-origin, Permissions-Policy restrictive
La CSP a été retirée du middleware global après des incompatibilités avec les SPA, notamment Proxmox et les anciens services Beszel et Portainer. Voir la décision technique.
Spécifiques (par route)
| Middleware | Usage | Cible |
|---|---|---|
authelia | ForwardAuth SSO | Traefik dashboard, Homepage, AdGuard |
auth-rate-limit | 100 req/s burst SPA | auth.home.gabin-simond.fr |
Les routes Proxmox n'ont AUCUN security header Traefik — ExtJS et COOP sont incompatibles.
TLS hardening
- Certificats : Let's Encrypt via DNS challenge Cloudflare
- CAA records DNS :
letsencrypt.orguniquement +iodef mailto: - minVersion : TLS 1.2 (TLS 1.3 actif par defaut)
- Cipher suites : Mozilla intermediate (ChaCha20 + AES-GCM, ECDHE only)
- Curves : X25519, P256, P384
- sniStrict : rejette les requêtes avec SNI non-route
- Redirect HTTP → HTTPS : tout le trafic port 80 redirige vers 443
Pour les détails TLS et certificats, voir le guide TLS.
Réseau
Tous les services proxifies sont sur le réseau Docker proxy (bridge).
AdGuard utilise le réseau Docker host. Tailscale est installé nativement sur l’hôte. Les agents Beszel ont été retirés le 2026-11-03 ; voir la fiche archivée.
AdGuard (host mode) est route via le file provider.
Fichiers
| Fichier | Emplacement |
|---|---|
| Config statique | /mnt/ssd/config/traefik/traefik.yml |
| Routes dynamiques | /mnt/ssd/config/traefik/dynamic/*.yml |
| Certificats | Volume traefik-certs → /certs/acme.json |
| Logs | Volume traefik-data |