Reverseproxy für SSL und Automatische Let's Encrypt Zertifikate

Original Link zum Projekt

Was es kann...

Ihr habt einen Server, dort laufen etliche Webserver, zu jeder VM habt ihr eine eigene Domain und ihr wollt natürlich, das diese Webseiten alle öffentlich erreichbar sind per HTTPS. Genau das erledigt für euch der NPM Reverse Proxy. NPM kümmert sich automatisch um die Beantragung und Erneuerung der SSL-Zertifikate von Let's Encrypt, sodass eure Webseite immer sicher erreichbar ist.

Warum vergibt Let's Encrypt überhaupt kostenlose SSL-Zertifikate?

  • 🔐 Mehr verschlüsselte Verbindungen (HTTPS statt HTTP)
  • 🌍 Schutz von Nutzerdaten für alle, nicht nur für Firmen mit Budget
  • 🤖 Automatisierung (z. B. mit Tools wie Certbot), dadurch kaum Kosten
  • 🏛️ Finanziert durch Spenden und Organisationen wie die Internet Security Research Group
  • 👉 Ziel: HTTPS als Standard im ganzen Web etablieren

Was benötige ich alles:

  • Eine Domain bei einem DNS_Registrar die auf eure Server IP oder DynDNS zeigt
  • Eine feste WAN IP oder DynDNS
  • Entweder verschiedene Domains (example.de / example2.de...)
  • Oder eine Domain (example.de) und viele Subdomains (web.example.de / web2.example.d...)
  • Natürlich einen Server
  • Eine Firewall mit Portfreigabe
 Client -----> DNS-Registrar ------> 🛡️WAN IP ------> NPM --> Webserver
(Laptop)     (z.B. Cloudflare)       🛡️(Fritzbox)   (Server)    (VM)
Kostenlose DynDNS mit der Fritzbox...

Zuerst müssen ihr die DynDNS-Einstellungen in eurer Fritzbox konfigurieren, um eine kostenlose DynDNS-Adresse zu erhalten.

Annleitung AVM DynDNS Einstellungen in der Fritzbox

Hat alles funktioniert dann haben ihr eine kostenlose DynDNS-Adresse. Ihr benötigt nur das zwischen https:// und :45296(Port), z.B. 12345678.myfritz.net. Als Test könnt ihr die Adresse Auflössen und müsst eure aktuelle WAN IP zurückbekommen.


# Aktuelle WAN IP abfragen
curl ifconfig.me
217.80.200.123%

# DynDNS Adresse auflösen
dig abcdefghijkm.myfritz.net

; <<>> DiG 9.20.11-1ubuntu2.2-Ubuntu <<>> abcdefghijkm.myfritz.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 26718
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;abcdefghijkm.myfritz.net.	IN	A

;; ANSWER SECTION:
abcdefghijkm.myfritz.net. 30 IN	A	217.80.200.123
...
# DynDNS zeigt auf WAN, passt also !
                        

Danach müsst ihr nur noch bei einem Registrar eure DynDNS-Adresse eintragen und per Cname mit der Domain verknüpfen.

DynDNS Einstellungen beim Registrar

Funktionen von NPM:

Installation von NPM:

Die Installation von NPM ist relativ einfach und kann mit Docker und Docker Compose durchgeführt werden.

Hier ist eine Schritt-für-Schritt-Anleitung zur Installation von NPM:

  1. Installieren Sie Docker CE
  2. sudo apt update
    sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  3. Erstellen Sie ein Verzeichnis für NPM 'mkdir -p npm' und wechseln Sie in dieses Verzeichnis cd...
  4. Erstellen Sie eine docker-compose.yml Datei mit folgendem Inhalt:
  5. services:
    app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    environment:
        TZ: "Europe/Berlin"
    ports:
        - '80:80'
        - '81:81'
        - '443:443'
    volumes:
        - ./data:/data
        - ./letsencrypt:/etc/letsencrypt 
  6. Starten Sie den NPM-Container mit dem folgenden Befehl:
  7. docker compose up -d
  8. Öffnen Sie Ihren Webbrowser und navigieren Sie zu...
     http://<ServerIP>:81 
  9. Erstellen Sie ein Konto mit einem Benutzernamen und Passwort Ihrer Wahl
  10. Nach der Anmeldung legen wir den ersten Proxy an...
  11. Neuer Host anlegen
  12. ADD Proxy Host
  13. add Proxy Host
  14. Host anlegen
    • Domain Names: Hier gebt ihr die Domain oder Subdomain an, die auf euren Server zeigt (z. B. web.example.de)
    • Scheme: Wählt das Protokoll aus, das euer interner Webserver verwendet (http oder https)
    • Forward Hostname/IP: Gebt die interne IP-Adresse oder den Hostnamen eures Webservers an (z. B. 192.168.1.100)
    • Cache Assets: Webseite caching (Bei Webdesign ausmachen)
    • Block Common Exploits: Schutz vor gängigen Angriffen
    • Websockets Support: Unterstützung für Websocket-Verbindungen
    • Access List: Zugriffsbeschränkungen
    edit Proxy Host
  15. SSL
    • SSL-Zertifikat: Wählt "Request a new SSL Certificate from Let's Encrypt"
    • Force SSL: Erzwingt die Verwendung von HTTPS
    • HTTP/2 Support: Aktiviert HTTP/2 für bessere Performance
    • HSTS: Aktiviert HTTP Strict Transport Security
    SSL
  16. Save
  17. Nach dem Speichern sollte euer Proxy Host aktiv sein und die Webseite unter der angegebenen Domain erreichbar sein. NPM kümmert sich automatisch um die Beantragung und Erneuerung der SSL-Zertifikate von Let's Encrypt, sodass eure Webseite immer sicher erreichbar ist.

Fehlersuche:

SSL Zertfikate werden nicht erstellt beim Speichern (save):

Port 80 in der Firewall ist blockiert...

Webseiten erscheinen nicht:

Prüft die interne IP-Adresse und den Port eures Webservers, auf den der Proxy weiterleiten soll...

Webseiten Anpassungen werden nicht angezeigt:

Cache Assets deaktivieren