5.1 KiB
title | date | tags | draft | author | description | categories | toc | ||
---|---|---|---|---|---|---|---|---|---|
Traefik | 2025-04-09T12:02:34+02:00 |
|
false | Colmaris | Jour 015/100 du défi 100DaysToOffLoad. |
|
true |
Compilation d'infos utiles sur Traefik.
Fichiers
Les fichiers de confs se trouvent sur ma forge git.
Identifiant de connexion
L’identifiant de connexion se présente sous la forme d’une ligne de texte à ajouter tel quel dans le fichier traefik_auth_file
, contenant le nom d’utilisateur et le mot de passe qui sera chiffré avec openssl. Dans le répertoire /traefik/secrets
.
openssl passwd -apr1 mon_mot_de_passe
$apr1$89eqM5Ro$CxaFELthUKV21DpI3UTQO.
Copier ensuite l'identifiant/mot de passe dans le fichier /traefik/secrets
:
user:$apr1$89eqM5Ro$CxaFELthUKV21DpI3UTQO.
Configuration TLS
Dans le répertoire /traefik/config
ajouter un fichier tls.yml
. Il s’agit d’une configuration classique, j’utilise les ciphers autorisés dans la configuration par defaut, avec une version de TLS minimum en 1.2 et je force l’utilisation de TLSv1.3.
tls:
options:
default:
minVersion: VersionTLS12
sniStrict: true
cipherSuites:
- TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 # TLS 1.2
- TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 # TLS 1.2
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 # TLS 1.2
- TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305 # TLS 1.2
- TLS_AES_256_GCM_SHA384 # TLS 1.3
- TLS_CHACHA20_POLY1305_SHA256 # TLS 1.3
- TLS_FALLBACK_SCSV # TLS FALLBACK
curvePreferences:
- secp521r1
- secp384r1
- X25519
- CurveP521
- CurveP384
- CurveP256
modern:
minVersion: VersionTLS13
Les middlewares
Par souci de compréhension j'utilise un fichier par middleware. Ils sont placés dans le dossier /traefik/config/nom-middleware.yml
.
Headers et HSTS
Nom du fichier : config.yml
hsts-headers:
headers:
frameDeny: true
browserXssFilter: true
contentTypeNosniff: true
stsIncludeSubdomains: true
stsPreload: true
stsSeconds: 31536000
forceStsHeader: true
Compression
Compression en GZIP, nom du fichier: compression.yml.
http:
middlewares:
compression:
compress:
excludedContentTypes:
- "text/event-stream"
Docker compose commenté
networks:
traefik:
external: true
services:
traefik:
image: traefik:banon
restart: unless-stopped
container_name: traefik
ports:
- 80:80
- 443:443
labels:
- traefik.enable=true # J'active traefik
- traefik.docker.network=traefik # j'indique le réseau pour l'exposition du conteneur
- traefik.http.middlewares.admin-auth.basicauth.usersfile=/secrets/traefik_auth_file # fichier contenant l'auhentification pour l'accès au dashboard
- traefik.http.routers.traefik.rule=Host(`traffic.${DOMAIN}`) # url d'accès
- traefik.http.routers.traefik.entrypoints=https # port d'écoute utilisé
- traefik.http.routers.traefik.tls=true # chiffrage
- traefik.http.routers.traefik.service=api@internal # service propre à traefik pour le dashboard
- traefik.http.routers.traefik.tls.certresolver=le # Let's encrypt comme resolveur de certificat
- traefik.http.routers.traefik.middlewares=admin-auth # activation de l'authentification via le fichier défini plus haut
- traefik.http.services.traefik.loadbalancer.server.port=8080 # port d'écoute du dashbord non exposé
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro # écoute de l'api docker
- /mnt/nas/voljin/volumes/traefik:/certificates # stockage des certificats
- ./secrets:/secrets:ro # stockage des mots de passes
- ./config:/config:ro # configuration dynamique
- ./logs:/logs # enregistrement des logs.
command:
# ------------------------------------------- providers Docker
- --providers.docker
- --providers.docker.exposedbydefault=false
# ------------------------------------------- Providers Fichier
- --providers.file.directory=/config/
- --providers.file.watch=true
# ------------------------------------------- Ports
- --entrypoints.http.address=:80
- --entrypoints.https.address=:443
# ------------------------------------------- Redirection vers https
- --entrypoints.http.http.redirections.entrypoint.to=https
- --entrypoints.http.http.redirections.entrypoint.scheme=https
# ------------------------------------------- Configuration SSL
- --certificatesresolvers.le.acme.email=${TRAEFIKEMAIL}
- --certificatesresolvers.le.acme.storage=/certificates/acme.json
- --certificatesresolvers.le.acme.tlschallenge=true
# ------------------------------------------- Configuration traefik
- --global.sendanonymoususage=false
- --accesslog=true
- --log.level=INFO
- --log.filePath=/logs/traefik.log
- --api
networks:
- traefik