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.

Dernière modification: 11 novembre 2020

Auteur