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.2020 | Dynamic.yml erweitert |
27.03.2020 | Erstellung dieser Anleitung. |
Inhaltsverzeichnis
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/
- ncdu – Speicherverbrauch auf Linux Konsole anzeigen - 23. Januar 2021
- Rocket.Chat – mit Docker Compose und Traefik installieren - 23. Januar 2021
- Raspberry Pi – Nextcloud Backup mittels rclone erstellen - 18. Januar 2021
17 Kommentare
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 Mario,
habe ich echt ewig dran gesessen. Dann habe ich diesen Beitrag gefunden:
https://github.com/containous/traefik/issues/5890
Ist mir nämlich auch aufgefallen, dass Traefik die Einstellungen nicht übernimmt, die ich vorgebe. Scheint aber ein bekanntes Problem zu sein.
Ich lasse es erst mal so und schaue bei einer neuen Traefik Version mal, ob es dann klappt.
Liebe Grüße
Christian
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.
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
Hallo Patrick,
freut mich, dass ich dir mit meinen Anleitungen helfen konnte.
Zu deinem Problem:
Ich kann nicht so ganz nachvollziehen, was du genau gemacht hast. In meiner Anleitung in Zeile 31 finde ich nämlich einen anderen Code.
Hier ist die Reihenfolge, in welcher du alles machen musst:
1) https://goneuland.de/traefik-v2-reverse-proxy-fuer-docker-unter-debian-10-einrichten/
2) https://goneuland.de/traefik-v2-https-verschluesselung-sicherheit-verbessern/
3) https://goneuland.de/nextcloud-server-mit-docker-compose-und-traefik-installieren/
Jede Anleitung zeigt ja am Ende das „Ergebnis“. Du solltest es also immer direkt ausprobieren. So weißt du später, bis zu welchem Punkt noch alles funktioniert hat.
LG
Christian
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
Hallo,
um den Fehler zu beheben, musst du dieser Anleitung folgen:
https://goneuland.de/traefik-v2-https-verschluesselung-sicherheit-verbessern/
In der Anleitung zu Traefik verweise ich explizit auf diese Anleitung, nur irgendwie macht es keiner xD
LG
Christian
Ok – das hat nun geklappt – Note A! 🙂
In der trafik.yml war ein Eintrag zuviel drin.
Danke und Gruß Hardy
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
Hallo, danke, geile Anleitung, mein Fehler war:
RULE
Host(`xxxxxxxx.net`)
NAME
nextcloud-app-secure@docker
ENTRYPOINTS
https
SERVICE
ERRORS
middleware „secHeaders@file“ does not exist
Viele Grüße
Matthias
Guten tag, ich habe traefik mit hilfe der obigen anleitung installiert (raspberry 4b, arm64v8, ), allerdings bleibt die datei acme.json leer. D.h. es wird offensichtlich kein zertifikat geholt. In der log-datei von traefik steht:
_the router traefik-secure@docker uses a non-existent resolver: http_. Ich habe die subdomains traefik und nextcloud eingerichtet (A-record) und kann die oberfläche von traefik nach bestätigung der unsicheren verbindung aufrufen. Was könnte ich falsch gemacht haben?
Herzlichen dank.
Mit freundlichen grüßen
Joachim Köstler
stsecludeSubdomains: true
Ich glaube da ist ein Schreibfehler, zumindest hat es bei mir erst funktioniert als ich die ganze Zeile auskommentiert habe.
Lustigerweise kam dann auch noch der „middleware \“secHeaders@file\“ does not exist-Fehler, der war aber weg nachdem die dynamic_conf.yml geändert wurde.
docker logs traefik
time=“2020-09-27T17:26:30+02:00″ level=info msg=“Configuration loaded from file: /traefik.yml“
time=“2020-09-27T17:26:30+02:00″ level=error msg=“Cannot start the provider *file.Provider: field not found, node: stsecludeSubdomains“
time=“2020-09-27T17:26:31+02:00″ level=error msg=“middleware \“secHeaders@file\“ does not exist“ entryPointName=https routerName=traefik-secure@docker
Guten Abend,
ich arbeite mich wie so viele Schritt für Schritt durch und bin einfach begeistert.
Meine Umgebung ist ein gehosteter Root-Server mit Proxmox.
Ich nutze einen LXC und mit IP Tables sind Port 443 und 80 auf den LCX in beide Richtungen frei.
Die Anleitung ist bis jetzt einfach nur TOP und es funktioniert auch alles aber das „Upgrade“ des SSL Rankings wirkt bei mir nicht.
Folgender Log dazu:
docker logs traefik
time=“2021-01-05T21:38:37Z“ level=info msg=“Configuration loaded from file: /traefik.yml“
time=“2021-01-05T21:38:37Z“ level=error msg=“Cannot start the provider *file.Provider: yaml: line 13: did not find expected ‚-‚ indicator“
ich bin die Dateien jetzt mehrmals durchgegangen und habe auch die Server neu gestartet. Ich finde den Fehler nicht.
Kann mir jemand sagen was Traefik für ein „-“ erwartet?
Hat sich erledigt.
Das „Problem“ war, dass ich an einer Stelle in der yml von Traefik ein Leerzeichen zu viel hatte.
Falsch:
providers:
docker:
endpoint: „unix:///var/run/docker.sock“
exposedByDefault: false
file:
filename: „/dynamic_conf.yml“
Richtig:
providers:
docker:
endpoint: „unix:///var/run/docker.sock“
exposedByDefault: false
file:
filename: „/dynamic_conf.yml“
Vielen Dank für die sehr guten Anleitungen.
Bitte das Kommentar löschen.
Die Einrückungen werden nicht übernommen.
Schade.
Hallo,
Warum benutzt du nicht nur 1.3 TLS ?
Für Private zwecke vollkommend ausreichend?
Gabish