Wähle einen Artikel
Traefik Reverseproxy auf vServer/VPS installieren
Traefik Reverseproxy auf vServer/VPS installieren

Überblick

  • Verwendetes System: Debian 11 64 bit
  • Genutzter User: Ich nehme alles als „root“ vor
  • Testsystem: vServer XXL 2.0
  • Zeitdauer: ca. 20 – 30 Minuten. Kann durch die DNS Einstellungen aber länger dauern, bis diese wirken
  • Schwierigkeit: Einfach. Nur Code kopieren 😉
  • Besonderheiten:
    • Die Ports 80 und 443 müssen frei sein. Es dürfen also keine anderen Dienste laufen.

1. Traefik v2 Installieren

1.1 Einleitung

Normalerweise wäre der Port 80 (HTTP) sowie 443 (HTTPS) durch einen Service belegt und man müsste sich einen zweiten Server (VServer) kaufen. Traefik ermöglicht hier also, dass viele Dienste wie E-Mail, Cloud, Videokonferenzen auf einem Server betrieben werden können. Ein weiterer Vorteil ist, dass später alle Verbindungen, welche über Traefik laufen, mittels HTTPS gesichert sind.

Traefik ist opensource und kostenlos in der Grundversion. Diese Anleitung basiert auf dieser Version. Es gibt aber auch eine Enterprise Version, welche beispielsweise mehr Möglichkeiten bezüglich der Skalierung auf mehrere Traefik Server bietet.

1.2 Vorbereitung

Diese Anleitung basiert auf dem aktuellen Debian 11 Betriebssystem. Traefik werden wir unter Docker realisieren. Dies ermöglicht uns später sehr schnelle Updates sowie eine einfache Integration neuer Dienste.

1.2.1 Docker / Docker Compose Installieren

Wir installieren also zuerst Docker und Docker Compose. Dazu gebt ihr folgendes auf der Konsole ein:

apt-get update
apt-get install ca-certificates curl gnupg lsb-release
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Nun haben wir alles installiert und konfiguriert, was wir für Docker benötigen. Dies können wir nun ganz einfach installieren.

apt-get update
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Nun lassen wir uns die installierte Version anzeigen. Dazu geben wir einfach folgenden Befehl ein:

docker --version && docker compose version

1.2.2 htpasswd installieren

Dieses Programm benötigen wir um uns ein sicheres Kennwort für unseren Traefik Login zu generieren. Zur Installation gebt ihr folgendes ein:

apt-get install apache2-utils

1.2.3 Benötigte Dateien / Verzeichnisse anlegen

Nun erstellen wir das Verzeichnis, in welches später Traefik installiert werden soll. Dazu gebt ihr folgenden Befehl ein. Das Verzeichnis könnt ihr natürlich verändern. In dieser Anleitung werde ich immer mit diesem Verzeichnis arbeiten. Ihr müsst dann dementsprechend dies immer bei euch berücksichtigen.

mkdir -p /opt/containers/traefik

Anschließend legen wir innerhalb dieses Verzeichnisses noch Dateien an, welche später Zertifikate für uns speichern werden.

mkdir -p /opt/containers/traefik/data
touch /opt/containers/traefik/data/acme.json
chmod 600 /opt/containers/traefik/data/acme.json
touch /opt/containers/traefik/data/traefik.yml

1.2.4 Infos zu yml Dateien

Bei yml Dateien ist es sehr wichtig, dass die Zeilen alle richtig eingerückt sind. Die Zeilen MÜSSEN immer mit der Leertaste eingerückt werden. Es dürfen KEINE Tabs enthalten sein. Ihr könnt den nachfolgenden Code immer online „überprüfen“ lassen. Die meisten Fehler entstehen nämlich durch die falsche Formatierung. Ein Dienst zum Überprüfen ist zum Beispiel: https://codebeautify.org/yaml-validator

1.3 Dynamic_conf.yml anlegen

In dieser Datei wird festgelegt, welche Parameter für die „sichere Verbindung“ mittels HTTPS genutzt werden sollen. Wir wollen eine sehr gute Bewertung (A+) bei SSL Labs. SSL Labs (https://www.ssllabs.com/ssltest/) ist eine Webseite um seine eigene Webseite auf Sicherheit zu testen.

Ich nutze als Editor immer „nano“. Diesen könnt ihr mittels folgenden Befehls installieren

apt-get install nano

Ihr könnt auch jeden anderen Editor nutzen.

Gebt nun folgenden Code in eure Konsole ein:

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

In die Datei kopiert ihr nun folgendes:

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"

1.4 traefik.yml anpassen

In diesem Schritt erstellen wir uns eine leere Datei, in welche wir anschließend einige Einstellungen eintragen.

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

In diese Datei kopiert ihr nun folgendes:

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: email@example.com   #### hier eure E-Mail angeben ####
      storage: acme.json
      httpChallenge:
        entryPoint: http

Ihr müsst jetzt noch bei E-Mail eure E-Mail-Adresse eintragen. Diese wird für Lets Encrypt benötigt. Dies ist ein kostenfreier Dienst im Internet, welcher euch gültige HTTPS Zertifikate („sichere Verbindung“) zur Verfügung stellt.

1.5 docker-compose.yml anpassen

Nun können wir mit der eigentlichen „Installation“ von Traefik beginnen. Dazu öffnet ihr folgende Datei:

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

Nun kopiert ihr folgenden Code in die Datei. Dieser Code ist unser Bauplan für unseren Traefik Container.

version: '3'
services:
  traefik:
    image: traefik:latest
    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.example.com`)"
      - "traefik.http.middlewares.traefik-auth.basicauth.users=USER:PASSWORD"
      - "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.example.com`)"
      - "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"
      - "traefik.http.routers.traefik-secure.middlewares=secHeaders@file,traefik-auth"
networks:
  proxy:
    external: true

Speichert die Datei nun ab und beendet euren Editor. Wir werden uns nun einen Benutzer / Passwort generieren und anschließend dies in der Datei abändern.

Um einen Benutzer / Passwort zu generieren gebt ihr folgenden Befehl ein:

echo $(htpasswd -nb <user> '<password>') | sed -e s/\\$/\\$\\$/g

Hier tauscht ihr nun „user“ bzw. „password“ durch euren Nutzernamen / Passwort aus. Dies könnte zum Beispiel so aussehen:

echo $(htpasswd -nb dogado 'geheim123') | sed -e s/\\$/\\$\\$/g

Nun solltet ihr eine Ausgabe bekommen, welche in etwa so aussieht:

Ausgabe: dogado:$$apr1$$6SCsKdSF$$NrWj6Usie0LpPAIEj8H3Y0

Diese Zeichenkette kopiert ihr euch nun und wir öffnen wieder unsere docker-compose.

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

Hier gebt ihr nun euren kopierten Code ein:

vorher:

"traefik.http.middlewares.traefik-auth.basicauth.users=USER:PASSWORD"

nachher:

"traefik.http.middlewares.traefik-auth.basicauth.users= dogado:$$apr1$$6SCsKdSF$$NrWj6Usie0LpPAIEj8H3Y0

Des Weiteren müsst ihr noch den Hostnamen anpassen. Dies ist der Name, über welchen später Traefik erreichbar sein wird.

Vorher:

- "traefik.http.routers.traefik.rule=Host(`traefik.example.com`)"
- "traefik.http.routers.traefik-secure.rule=Host(`traefik.example.com`)"

Nachher:

- "traefik.http.routers.traefik.rule=Host(`traefik.euredomain.de`)"
- "traefik.http.routers.traefik-secure.rule=Host(`traefik.euredomain.de`)"

Nun sind wir schon fast fertig.

1.6 Docker Netzwerk erstellen

Zum Schluss müssen wir nur noch ein Docker Netzwerk anlegen. Dies dient später zur Kommunikation der einzelnen Container mit Traefik. Ich nenne das Netzwerk hier „proxy“. Ihr könnt aber auch jeden anderen Namen verwenden. Müsst aber dann später dementsprechend die Anleitung anpassen. Dazu gebt ihr folgenden Code ein:

docker network create proxy

Nun haben wir alles für den ersten Start vorbereitet.

1.7 apache2 deinstallieren

Bei dem genutzten Debian 11 Image ist bereits ein apache2 Server vorinstalliert. Diesen deinstallieren wir, da wir den Port 80 und 443 für Traefik benötigen. Unsere Webseiten stellen wir später alle durch Container da. Um apache2 zu deinstallieren gebt ihr folgendes ein:

apt-get remove apache2

2. DNS-Einstellungen anpassen

Damit wir später einfach bei Traefik Subdomains anlegen (z.B. mail.euredomain.de, cloud.euredomain.de) können, müssen wir noch die DNS-Einstellungen anpassen.

Dazu geht ihr auf folgende Webseite: https://cloudpit.io/

Hier logt ihr euch mit euren Zugangsdaten ein und geht dann auf den Bereich „Web Hosting“.

Klickt dann bei eurer Domain auf „mehr“. Wählt nun „DNS-Verwaltung“ aus.

Wählt nun „Manuelle DNS-Verwaltung“ aus. Anschließend klickt ihr auf „Eintrag hinzufügen“.

Gebt nun beim Feld Name „*“ ein und bei Ziel-IP die IP Adresse eures Servers.

Anschließend klickt ihr noch auf „speichern“.

Es kann mehrere Stunden dauern, bis diese Einstellungen weltweit übertragen wurden und funktionieren.

3. Traefik starten

Gebt nun folgendes ein, um euren Traefik Container zu starten:

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

Geht nun mit eurem Webbrowser auf eure Webseite (z.B. traefik.euredomain.de). Dort sollte nach einigen Sekunden folgendes zu sehen sein:

Nachdem ihr euch dann mit euren eben erstellen Nutzerdaten eingeloggt habt, sollte es in etwa so aussehen.

4. Sicherheit der Webseite testen

Nun gehen wir auf folgende Webseite und schauen, ob wir die gewünschte A+ Bewertung bekommen: https://www.ssllabs.com/ssltest/

Hier gebt ihr jetzt eure Webseite ein (z.B. traefik.euredomain.de). Nun sollte es so bei euch aussehen:

Weitere nützliche Tutorials

Wenn ihr lernen wollt, wir ihr das Server-Control-Panel "CloudPanel" installieren könnt schaut euch gerne das Tutorial auf foxly.de an. Hier geht's zur Anleitung: Installation des hochleistungsfähigen Server-Control-Panel - CloudPanel

Nächster Artikel
Uptime Monitor / Statping auf vServer/VPS installieren
Weitere passende Themen