Objectif
Configurer la partie TLS pour obtenir une note de A+ sur SSLLabs
Préambule
Suite à la publication de mon 1er article sur Traefik, Teddy Ferdinand m’a fait remarquer qu’il était nécessaire de bien configurer son TLS.
Teddy étant architecte sécurité, j’ai lu son article et j’ai configuré la partie TLS de mon conteneur Traefik.
Je remercie Teddy pour sa remarque car j’ai pu améliorer la sécurité de mon conteneur. Je vous encourage vivement à lire son article.
Tutoriel
Pour nous faciliter le travail, je vous invite à reproduire le travail réalisé dans mon premier article, lien vers l’article.
Conteneur Traefik
Le dossier de travail du conteneur Traefik devrait avoir cette arborescence :
. traefik
|-- src
| |-- data
| | |-- traefik.toml
| |-- log
|-- docker-compose.yml
Nous allons créer un nouveau dossier nommé providers
dans le dossier src
, le résultat est le suivant :
. traefik
|-- src
| |-- data
| | |-- traefik.toml
| |-- providers
| | |-- tls.toml
| |-- log
|-- docker-compose.yml
À l’intérieur de ce dossier, nous allons créer un fichier tls.toml
contenant :
[http]
[http.middlewares]
[http.middlewares.security.headers]
frameDeny = true
sslRedirect = true
browserXssFilter = true
contentTypeNosniff = true
#HSTS
stsIncludeSubdomains = true
stsPreload = true
stsSeconds = 31536000
[tls.options]
[tls.options.mytlsoption]
minVersion = "VersionTLS12"
cipherSuites = [
"TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384",
"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256",
"TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256",
"TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256",
"TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256",
]
curvePreferences = [
"CurveP521",
"CurveP384"
]
sniStrict = true
Conteneur Nginx
Le dossier de travail du conteneur Nginx contient uniquement le fichier docker-compose.yml
. Nous allons ajouter 3 ligne dans la tableau labels
déjà présent :
- "[email protected]"
- "[email protected]"
- "traefik.http.routers.to-nginx.entrypoints=web,websecure"
La première ligne active le middleware security
. N’oubliez pas d’ajouter @file
pour indiquer à Traefik qu’il doit activer le middleware défini dans le fichier tls.toml. Sans cela, vous aurez une erreur car Traefik cherchera à activer le middleware [email protected]
.
La seconde ligne active les options TLS nommée mytlsoption
. Comme pour la 1ère ligne, il faut ajouter @file
.
La dernière ligne indique à Traefik les points d’entrées à utiliser par le routeur.
Le contenu de votre fichier docker-compose.yml
doit être :
version: '3'
services:
nginx:
image: "nginx:1.19"
expose:
- 80
networks:
- myglobalnetwork
labels:
- "traefik.enable=true"
- "traefik.http.routers.to-nginx.rule=Host(`votre-nom-de-domaine-public.com`)"
- "traefik.http.routers.to-nginx.tls=true"
- "traefik.http.routers.to-nginx.tls.certresolver=le-resolver"
- "[email protected]"
- "[email protected]"
- "traefik.http.routers.to-nginx.entrypoints=web,websecure"
networks:
myglobalnetwork:
external:
name: myglobalnetwork
Résultat
Avant de visualiser le résultat, il faut relancer les 2 conteneurs et vérifier qu’il n’y a aucune erreur dans le tableau de bord de Traefik.
Si, il n’y a pas d’erreur, vous pouvez visualiser la page en lançant votre navigateur à l’adresse : https://www.ssllabs.com/ssltest/
Vous devriez avoir la note A+ qui s’affiche.
Tutoriel publié le 11/11/2020.