1. Le rôle des middlewares #
Entre le routeur et le service.
Principe #
Un routeur choisit le service selon la requête (hôte, chemin, en-têtes). Avant d'atteindre le service, la requête peut traverser des middlewares qui l'authentifient, la filtrent ou la transforment. Ils se déclarent une fois et se réutilisent sur plusieurs routeurs.
2. L'authentification #
BasicAuth pour un outil interne, ForwardAuth pour un vrai SSO.
BasicAuth avec Docker #
# Générer l'empreinte du mot de passe (les $ sont doublés dans un fichier Compose)
htpasswd -nbB admin 'MotDePasse-Solide' | sed -e 's/\$/\$\$/g'services:
whoami:
image: traefik/whoami
labels:
- traefik.http.routers.whoami.rule=Host(`whoami.exemple.fr`)
- traefik.http.routers.whoami.middlewares=auth@docker
- traefik.http.middlewares.auth.basicauth.users=admin:$$2y$$05$$…ForwardAuth : déléguer à un service d'authentification #
Avec ForwardAuth, Traefik envoie chaque requête à un service externe (Authelia, oauth2-proxy, Authentik). Une réponse 2xx autorise la requête, toute autre réponse est renvoyée au client (souvent une redirection vers la page de connexion).
http:
middlewares:
sso:
forwardAuth:
address: "http://authelia:9091/api/authz/forward-auth"
trustForwardHeader: true
authResponseHeaders: ["Remote-User", "Remote-Groups", "Remote-Email"]Erreur Courante : BasicAuth transmet le mot de passe à chaque requête : ne l'utilisez qu'en HTTPS, et préférez un SSO avec MFA pour les outils sensibles.
3. Les autres middlewares utiles #
Filtrer, protéger, transformer.
Sélection #
| Middleware | Rôle | Exemple |
|---|---|---|
headers | En-têtes de sécurité et CORS | stsSeconds: 31536000, contentTypeNosniff: true |
rateLimit | Limiter le débit par client | average: 100, burst: 50 |
ipAllowList | N'autoriser que certaines adresses | sourceRange: ["10.0.0.0/8"] |
redirectScheme | Rediriger HTTP vers HTTPS | scheme: https, permanent: true |
stripPrefix | Retirer un préfixe de chemin | /api → / |
retry, circuitBreaker | Résilience vers le backend | attempts: 3, expression: NetworkErrorRatio() > 0.3 |
compress | Compression gzip, brotli | réponses texte |
chain | Regrouper plusieurs middlewares | une chaîne « sécurité » réutilisable |
Une chaîne réutilisable #
http:
middlewares:
securite:
chain:
middlewares: [limite, entetes]
limite:
rateLimit: { average: 100, burst: 50 }
entetes:
headers:
stsSeconds: 31536000
stsIncludeSubdomains: true
contentTypeNosniff: true
frameDeny: true
referrerPolicy: strict-origin-when-cross-originMigration v2 → v3 : En Traefik v3,ipWhiteListest devenuipAllowList. Vérifiez les noms lors d'une migration depuis la v2.
