,

Traefik Reverseproxy auf VPS installieren

Lesedauer 6 Minuten

Traefik ist ein moderner http Reverse Proxy und Loadbalancer. Ein Reverse Proxy dient dazu auf einem Server mehrere Dienste anbieten zu können. So kann hinter jeder Subdomain (z.B mail.deinedomain.at, cloud.deinedomain.at, …) ein anderer Service bereitgestellt werden.

Inhaltsverzeichnis

Hinweis
Einige Screenshots zeigen das Backend unseres Schwesterunternehmens dogado. Die gezeigten Schritte können jedoch auch im easyname-Backend durchgeführt werden.

Überblick

  • Verwendetes System: Debian 11 64 bit
  • Genutzter User: Ich nehme alles als „root“ vor
  • 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 (VPS) 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 Installieren

Wir installieren also zuerst Docker und Docker Compose. Dazu gibst du 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 gibst du folgendes ein: 

apt-get install apache2-utils 

1.2.4 Benötigte Dateien / Verzeichnisse anlegen

Nun erstellen wir das Verzeichnis, in welches später Traefik installiert werden soll. Dazu gibst du folgenden Befehl ein. Das Verzeichnis kannst du natürlich verändern. In dieser Anleitung werde ich immer mit diesem Verzeichnis arbeiten. Du musst dann dementsprechend dies immer bei dir 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.5 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. Du kannst 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 ist eine Webseite um seine eigene Webseite auf Sicherheit zu testen.

Ich nutze als Editor immer „nano“. Diesen kannst du mittels folgenden Befehls installieren

apt-get install nano 

Du kannst auch jeden anderen Editor nutzen.

Gib nun folgenden Code in deine Konsole ein:

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

In die Datei kopierst du 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 eine leere Datei, in welche wir anschließend einige Einstellungen eintragen.

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

In diese Datei kopierst du 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 

Du musst jetzt noch bei E-Mail deine E-Mail-Adresse eintragen. Diese wird für Lets Encrypt benötigt. Dies ist ein kostenfreier Dienst im Internet, welcher dir 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 öffnest du folgende Datei:

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

Nun kopierst du folgenden Code in die Datei. Dieser Code ist sozusagen 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 

Speichere die Datei nun ab und beende deinen Editor. Wir werden uns nun einen Benutzer / Passwort generieren und anschließend dies in der Datei abändern.

Um einen Benutzer / Passwort zu generieren, gibst du folgenden Befehl ein:

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

Hier tauschst du nun „user“ bzw. „password“ durch deinen Nutzernamen / Passwort aus. Dies könnte zum Beispiel so aussehen:

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

Nun sollst du eine Ausgabe bekommen, welche in etwa so aussieht:

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

Diese Zeichenkette kopierst du nun und wir öffnen wieder unsere docker-compose.

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

Hier gibst du nun deinen 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 musst du 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“. Du kannst aber auch jeden anderen Namen verwenden. Musst aber dann später dementsprechend die Anleitung anpassen. Dazu gibst du 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 gibst du 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 loggst du dich bei easyname.at in deinem Kundenkonto ein. Klicke nun auf Domains

Easyname Domains

Klicke dann neben deiner Domain auf das Stift-Symbol zum Bearbeiten

Domain bearbeiten easyname

Wähle nun „DNS“ aus. Anschließend klickst du auf „DNS-Eintrag hinzufügen“.

easyname DNS
DNS Eintrag hinzufügen

Gib nun beim Feld Name „*“ ein und bei Inhalt die IP Adresse deines Servers.

DNS Eintrag machen & Speichern

Anschließend klickst du noch auf „speichern“.

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

3. Traefik starten

Gib nun folgendes ein, um deinen Traefik Container zu starten:

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

Gehe nun mit deinem Webbrowser auf deine Webseite (z.B. traefik.euredomain.de). Dort sollte nach einigen Sekunden folgendes zu sehen sein:

Traefik starten Login

Nachdem du dich dann mit deinen eben erstellen Nutzerdaten eingeloggt hast, sollte es in etwa so aussehen.

Traefik Dashboard

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 gibst du jetzt deine Webseite ein (z.B. traefik.euredomain.de). Nun sollte es so bei dir aussehen:

Sicherheit der Webseite testen mit ssllabs.com

easyname ist ein erfolgreicher und bekannter österreichischer Anbieter von Cloud-Services, Domains sowie Webhosting bis hin zur Server-Infrastruktur und gehört seit 2020 zur dogado group.
Das Unternehmen ist seit 2006 in Österreich erfolgreich am Markt und inzwischen auch in vielen anderen Ländern weltweit tätig. Sowohl das Team als auch die gehosteten Daten befinden sich in Österreich.

easyname liegt die Datensicherheit besonders am Herzen und stellt daher zu jedem Hosting-Paket auch kostenlose SSL-Zertifikate zur Verfügung. Mit intuitiven Tools zur Erstellung von Websites und Webshops und mit Easy Install Apps wie WordPress, Joomla oder PrestaShop können alle easyname-Kunden schnell in die Online-Welt einsteigen.