Mit Hilfe der Webseite SSL Labs könnt ihr die Sicherheit eurer HTTPS Verbindung testen. Standardmäßig schaff Traefik hier leider nur die Note „B“. Ich zeige euch hier, wie ihr dies schnell ändern könnt.

Update

26.04.2020Dynamic.yml erweitert
27.03.2020Erstellung dieser Anleitung.

In dieser Anleitung habe ich bereits beschrieben, wie man Traefik installiert und konfiguriert. Hier beziehe ich mich auf die gesamten Ordner / Dateistrukturen aus dieser Anleitung. Diese müsst ihr bei euch gegebenfalls ändern.

1. dynamic_conf.yml anlegen

Zuerst müssen wir eine Dynamische Konfigurationsdatei für Traefik anlegen.

nano /opt/containers/traefik/data/dynamic_conf.yml

Inhalt:

tls:
  options:
    default:
      minVersion: VersionTLS12

      cipherSuites:
        - TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
        - TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
        - TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305
        - TLS_AES_128_GCM_SHA256
        - TLS_AES_256_GCM_SHA384
        - TLS_CHACHA20_POLY1305_SHA256

      curvePreferences:
        - CurveP521
        - CurveP384

      sniStrict: true


http:
  middlewares:
    secHeaders:
      headers:
        browserXssFilter: true
        contentTypeNosniff: true
        frameDeny: true
        sslRedirect: true
        #HSTS Configuration
        stsIncludeSubdomains: true
        stsPreload: true
        stsSeconds: 31536000
        customFrameOptionsValue: "SAMEORIGIN"

In dieser Datei werden die TLS Verbindungen für alle späteren Anwendungen festgelegt.

2. bestehendeDocker Compose Datei anpassen

Nun müssen wir noch unsere Traefik docker-compose.yml anpassen.

nano /opt/containers/traefik/docker-compose.yml

Dabei müssen wir NUR diese beiden Zeilen hinzfügen:

    volumes:
      - ./data/dynamic_conf.yml:/dynamic_conf.yml
    labels:
      - "providers.file.filename=/dynamic_conf.yml"

Hier ist meine fertige Docker Compose Datei. Bei euch kann diese anders aussehen.

version: '3'

services:
  traefik:
    image: traefik:v2.1
    container_name: traefik
    restart: unless-stopped
    security_opt:
      - no-new-privileges:true
    networks:
      - proxy
    ports:
      - 80:80
      - 443:443
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./data/traefik.yml:/traefik.yml:ro
      - ./data/acme.json:/acme.json
      - ./data/dynamic_conf.yml:/dynamic_conf.yml
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.traefik.entrypoints=http"
      - "traefik.http.routers.traefik.rule=Host(`traefik.euredomain.de`)"
      - "traefik.http.middlewares.traefik-auth.basicauth.users=xxxx:xxxxxx"
      - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https"
      - "traefik.http.routers.traefik.middlewares=traefik-https-redirect"
      - "traefik.http.routers.traefik-secure.entrypoints=https"
      - "traefik.http.routers.traefik-secure.rule=Host(`traefik.euredomain.de`)"
      - "traefik.http.routers.traefik-secure.middlewares=traefik-auth,secHeaders@file"
      - "traefik.http.routers.traefik-secure.tls=true"
      - "traefik.http.routers.traefik-secure.tls.certresolver=http"
      - "traefik.http.routers.traefik-secure.service=api@internal"
      - "providers.file.filename=/dynamic_conf.yml"
networks:
  proxy:
    external: true

3. bestehende traefik.yml Datei anpassen

Dazu öffnen wir folgende Datei:

nano /opt/containers/traefik/data/traefik.yml

Hier fügt ihr folgendes hinzu:

  file:
    filename: "/dynamic_conf.yml"

Fertige Datei:

api:
  dashboard: true

entryPoints:
  http:
    address: ":80"
  https:
    address: ":443"

providers:
  docker:
    endpoint: "unix:///var/run/docker.sock"
    exposedByDefault: false
  file:
    filename: "/dynamic_conf.yml"

certificatesResolvers:
  http:
    acme:
      email: test@example.com
      storage: acme.json
      httpChallenge:
        entryPoint: http

4. Traefic neu starten

Nun könnt ihr Traefik per Docker neu starten. Gebt dazu folgendes ein:

#beenden
docker-compose -f /opt/containers/traefik/docker-compose.yml down

#starten
docker-compose -f /opt/containers/traefik/docker-compose.yml up -d

5. Webseite erneut testen

Nun könnt ihr den Test für euer Webseite erneut starten. Das ist mein Ergebnis.

Wenn ihr noch das Alte seht, dann müsst ihr auf „Clear Cache“ klicken.

6. Quellen

https://docs.traefik.io/https/tls/

https://www.ssllabs.com/ssltest/

https://www.simplecto.com/improve-traefik-https-encryption-qualys-ssl-labs-testssl-sh/

https://adminsecurity.guru/traefik-v2-ssllabs-A-plus/

Teile diesen Beitrag
Christian

Categories:

10 Kommentare

  1. Hi, danke für den super Post mit guter Beschreibung der Traefik Konfiguration im Swarm Mode. Bist du noch am forschen, wie man auch ein A+ Rating bekommt?
    Dein Screenshot zeigt die Information „This site works only in browsers with SNI support.“, welche ich auch bekomme. Zum Vergleich habe ich ein A+ Rating mit einem HAProxy und diese Information ist der einzige Unterschied. Wäre interessant zu wissen, wie man A+ erreicht.

    Danke!

      • Hallo,
        erstmal cooles Tutorial auch wenn ich es leider erst zu spät gefunden habe… hätte mir doch einiges an Zeit erspart.
        Bei mir ist der Unterschied zwischen A+ (gitlab.xxx.xx) und A (trafik.xxx.xx) der „HTTP Strict Transport Security (HSTS) with long duration deployed on this server.“ SNI Support wird bei beiden nicht angezeigt. Vielleicht hilft das ein bisschen weiter.

  2. Hi Christian!

    Vielenvielenvielenvielenvieln VIELEN Dank für diese tollen Anleitungen!
    Ich probiere mich gerade daran mittels try and error. Die Anleitungen sind eine super Hilfe!

    Stoße aber nun auf ein Problem: ich komme von der Grundinstallation und bin rüber zur Nextlcoud-Installation. Nach dem Punkt der Dateien Anpassungen wollte ich Nextcloud aufrufen zur Datenbankanbindung: da erhalte ich nun einen „404 not found“ Fehler.
    Traefik Dashboard zeigt an: „secHeaders@file not found“. Habe dieses Problem bereits in einem Kommentar gesehen und anschließend die SSL/TLS-Anleitung umgesetzt.

    Dabei ist mir folgendes aufgefallen: /opt/containers/traefik/docker-compose.yml unterscheidet sich neben den Pfaden auch in Zeile 31, da der Eintrag „- „traefik.http.routers.traefik-secure.middlewares=traefik-auth“ um den „traefik-auth,secHeaders@file“ erweitert wird.

    Füge ich dies hinzu, erhalte ich auch beim traefik einen 404 error.
    Nun stehe ich ein wenig auf dem Schlauch. Bin ich irgendwo vom roten Faden abgekommen?

    Viele Grüße aus Hamburg,
    Patrick

  3. Wenn ich diese Zeile nicht auskommentiere, ist traefik und somit auch alle anderen Dienste nicht mehr zu erreichen.

    – „traefik.http.routers.traefik-secure.middlewares=traefik-auth,secHeaders@file“

    Ist das bei Euch anders?

    Was stimmt da nicht?

    VG Hardy

  4. Hallo,
    erst mal viiiieeelen dank für deine super Anleitungen!!!
    Ich bin deiner Anleitung zur verbesserung der Sicherheit gefolgt, aber ich bekomme leider immer noch ein B Rating.
    Auch Clear Cache hilft nicht.
    Der Grund laut SSLLab ist:
    # This server does not support Forward Secrecy with the reference browsers. Grade capped to B.
    # This server supports TLS 1.0 and TLS 1.1. Grade capped to B.

    Hab ich irgendwo einen Fehler gemacht?
    Ach ja, ich hab deb Server zuhause stehen und benutze Duckdns. Kann das damit zusammenhängen?

    Gruß Bert

    • Hallo Bert,
      freut mich, dass dir meine Anleitungen gefallen 🙂

      Dass dein Server zuhause steht sollte kein Problem sein.

      Schau dir den Schritt 2 mal wieder an. Da steht ganz zu beginn, dass du zwei Zeilen hinzufügen musst.
      Die könnten vlt bei dir noch fehlen.

      LG
      Christian

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.