colmaris.fr/content/post/notes/traefik/traefik.md
2025-05-23 10:29:39 +02:00

154 lines
5.1 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.

---
title: "Traefik"
date: 2025-04-09T12:02:34+02:00
tags:
- 100DaysToOffload
draft: false
author: "Colmaris"
description: "Jour 015/100 du défi 100DaysToOffLoad."
categories:
- notes
toc: true
---
Compilation d'infos utiles sur Traefik.
## Fichiers
Les fichiers de confs se trouvent sur ma [forge]() git.
## Identifiant de connexion
Lidentifiant de connexion se présente sous la forme dune ligne de texte à ajouter tel quel dans le fichier `traefik_auth_file`, contenant le nom dutilisateur et le mot de passe qui sera chiffré avec openssl. Dans le répertoire `/traefik/secrets`.
```shell
openssl passwd -apr1 mon_mot_de_passe
$apr1$89eqM5Ro$CxaFELthUKV21DpI3UTQO.
```
Copier ensuite l'identifiant/mot de passe dans le fichier `/traefik/secrets` :
```shell
user:$apr1$89eqM5Ro$CxaFELthUKV21DpI3UTQO.
```
## Configuration TLS
Dans le répertoire `/traefik/config` ajouter un fichier `tls.yml`. Il sagit dune configuration classique, jutilise les ciphers autorisés dans la configuration par defaut, avec une version de TLS minimum en 1.2 et je force lutilisation de TLSv1.3.
```yaml
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
```yaml
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.
```yaml
http:
middlewares:
compression:
compress:
excludedContentTypes:
- "text/event-stream"
```
## Docker compose commenté
```yaml
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
```