Dieses Tutorial ist NICHT mehr valid und dient nur noch als historisches Anschauungsmaterial!

Bitte lies Dir den Disclaimer durch, bevor Du eine Anleitung umsetzt...

Haftungsausschluss / Disclaimer

Traefik Docker Container als Reverse-Proxy und Let’s Encrypt Provider

Traefik Configs anlegen

Benutzername / Passwort für den Dashboard-Zugang erstellen

mkdir -p ~/docker/traefik-v1
htpasswd -bcB ~/docker/traefik-v1/.htpasswd username supersicherespasswort
cat ~/docker/traefik-v1/.htpasswd

username:$2y$15$eY.1HB7xGh8UdZv6moBZZ.1l.fUNCs9HUUmCFt/X.o76lvLugJbDq

Wir legen unterhalb von „/root“ das Verzeichnis „docker“ an und in diesem gleich das Verzeichnis „traefik-v1“.

Mit dem Kommando „htpasswd“ lassen wir eine Datei mit einem verschlüsselten Passwort für den Benutzer „username“ und dem Passwort „supersicherespasswort“ erstellen.
-b bedeutet, dass wir das Passwort gleich in die Kommandozeile schreiben.
-c legt eine neue Passwort-Datei „.htpasswd“ in dem angegebenen Verzeichnis an.
-B verwendet „bcrypt“ anstelle von „MD5“ als Verschlüsselungsalgorhytmus. Dieser ist sicherer…

Sollte das Kommando „htpasswd“ nicht vorhanden sein, bitte die „apache2-utils“ nachinstallieren:

apt install --no-install-recommends -y apache2-utils

Mit „cat“ lassen wir uns den Inhalt der gerade erstellten Datei ausgeben. Diese Ausgabe übernehmen wir per „Copy/Paste“ in unsere Anleitung, weil wir sie gleich für die Traefik-Konfigurationsdatei brauchen.

Verzeichnisse und Steuerdateien von Traefik anlegen

mkdir ~/docker/traefik-v1/acme
touch ~/docker/traefik-v1/acme/acme.json
chmod 0600 ~/docker/traefik-v1/acme/acme.json
nano ~/docker/traefik-v1/traefik.toml

Hier legen wir das Verzeichnis „acme“ unterhalb von „traefik-v1“ an und erzeugen darin mit „touch“ eine leere Datei Namens „acme.json“. Dieser nehmen wir im Anschluss die „Gruppen“- und „Alle“-Rechte, so dass nur noch der Benutzer „root“ auf die Datei Zugriff bekommt. Das ist wichtig, denn sollte Traefik feststellen, dass noch andere Benutzer diese Datei lesen können, wird er das Speichern der Zertifikate darin aus Sicherheitsgründen unterbinden.

Dann erstellen wir die Datei „traefik.toml“. Das ist die Haupt-Konfigurationsdatei von Traefik, die wir mit folgendem Inhalt füllen:

##START
#debug = true
logLevel = "INFO" #DEBUG, INFO, WARN, ERROR, FATAL, PANIC
#InsecureSkipVerify = true
sendAnonymousUsage = true
defaultEntryPoints = ["http", "https"]

# WEB interface of Traefik - Dashboard
[api]
  entryPoint = "dashboard"
  dashboard = true

# Entrypoints HTTP / Force Redirect => HTTPS / HTTPS / Auth Dashboard
[entryPoints]
  [entryPoints.http]
    address = ":80"
    [entryPoints.http.redirect]
      entryPoint = "https"

  [entryPoints.https]
    address = ":443"

  [entryPoints.https.tls]
      minVersion = "VersionTLS12"

  [entryPoints.dashboard]
    address = ":8080"
    [entryPoints.dashboard.auth.basic]
# Ausgabe von "cat ~/docker/traefik-v1/.htpasswd" verwenden
      users = ["username:$2y$15$eY.1HB7xGh8UdZv6moBZZ.1l.fUNCs9HUUmCFt/X.o76lvLugJbDq"]

# Let's Encrypt Config
# https://docs.traefik.io/configuration/acme/
[acme]
  acmeLogging = true
  email = "meine@email.adresse"
  storage = "/etc/traefik/acme/acme.json"
  # Let's Encrypt STAGING-Server zum Testen. AUSKOMMENTIEREN, wenn wir bereit sind für den RealDeal :)
  caServer = "https://acme-staging-v02.api.letsencrypt.org/directory"
  # 4k Schlüssel!
  KeyType = "RSA4096"
  # keine Hosts vordefinieren, sondern Domains aus den Host-Rules (- traefik.frontend.rule=Host:xyz.domain.bla) ableiten:
  onHostRule = true
  entryPoint = "https"
[acme.tlsChallenge]

# Connection to docker host system (docker.sock)
[docker]
  endpoint = "unix:///var/run/docker.sock"
  watch = true
  exposedByDefault = false
##EOF

Gehen wir wie Config mal durch…

Zeile 2: Debugging ist deaktiviert. Hier bitte auskommentieren, wenn irgendwas nicht so funktioniert, wie es soll, damit die Log-Files aussagekräftiger werden.

Zeile 3: Log-Level steht hier auf „Info“. Das ist ein guter Kompromiss. Für mehr Text „debug“, für weniger dann evtl. „error“ aufwärts.

Zeile 4: Wenn man diese Option einkommentiert, werden Zertifikate akzeptiert, die eigentlich ungültig sind. Braucht man zur Fehlerbehebung, wenn mit Let’s Encrypt was schief gelaufen ist. Ansonsten deaktiviert lassen…

Zeile 5: Sendet anonyme Nutzungsstatistiken an die Macher von Traefik. Kann nicht schaden, damit die Entwicklung voran geht.

Zeile 6: Definiert die beiden Standard-Einstiegspunkte „http“ und „https“.

Zeilen 8-11: Wir aktivieren das „Dashboard“ und weisen ihm einen Einstiegspunkt zu.

Zeilen 13-30: Das ist der Kern der Funktionalität von Traefik. Hier definieren wir die drei Zugangs-Punkte „http“ „https“ und „dashboard“ mit den jeweiligen Ports. Außerdem aktivieren wir die automatische Weiterleitung von http auf https und schalten dem Dashboard eine Authentifizierung vor.
Update 26.12.2019: Zeile 24 – hier sagen wir Traefik, dass er mindestens Version 1.2 des TLS Protokolls verwenden soll. v1.0 und v1.1 werden Anfang 2020 als „unsicher“ markiert und darum sollte unser Server das nicht mehr unterstützen…
Zeile 30 musst Du mit Deinen Werten von vorhin füttern (Copy/Paste), damit nachher der Login mit Deinem Benutzer und Passwort auch funktioniert.

Zeilen 32-45: Diese Konfiguration schaltet die Kommunikation zwischen Traefik und Let’s Encrypt ein. Wir nutzen das „TLS“-Verfahren, um die Zertifikate abzurufen. Es gibt noch das Standard-HTTP- und ein DNS-Verfahren. HTTP brauchen wir nicht, wenn TLS funktioniert. Und DNS hab ich mal probiert und funktioniert, aber ein direkter Vollzugriff auf die Domainsteuerung? Nein, das ist es mir nicht wert. Hier wäre es Super, wenn die Netcup-Jungs eine API einzig für diesen Let’s Encrypt DNS-Challenge machen würden…
Zeile 43 legt fest, dass wir keine „Standard-Domain“ für alle Dienste verwenden möchten, sondern diese sich „per Container“ ändert und wir den entsprechenden Hostnamen über die „docker-compose“-Datei des jeweiligen Containers übergeben. Ansonsten könnten wir nicht mit verschiedenen Domains arbeiten.
Zwei wichtige Punkte: a) Deine E-Mail Adresse gehört in Zeile 36. Und b) in der Konfiguration ist Zeile 39 einkommentiert: Wir benutzen also den Test-Server von Let’s Encrypt. Mutige Zeitgenossen kommentieren diese Zeile vor dem ersten Start aus und sparen sich hinterher die Umstellung auf den Produktiv-Server. Da Let’s Encrypt auf dem Produktiv-System aber strenge Limits hat und uns eine Stunde sperrt, wenn diese dank einer falschen Config erreicht sind, bin ich eher für den „Test“ am Anfang…

Zeilen 47-51: An dieser Stelle der Config teilen wir Traefik mit, dass er mit Docker kommunizieren soll. Zeile 50 sagt, dass neue Container niemals automatisch ans Internet angebunden werden dürfen, sondern nur, wenn wir dies explizit in den „docker-compose“-Dateien wünschen. Aber dazu später mehr…

Anzeige *

2 Kommentare zu „Traefik Docker Container als Reverse-Proxy und Let’s Encrypt Provider“

Kommentar verfassen

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

Verwendung
von Cookies

Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung.

Scroll to Top