Frage zu Nginx Proxy Manager mit Let´s Encrypt

Avenger84

Lt. Commander
Registriert
Feb. 2008
Beiträge
1.493
Hallo, ich habe folgendes Szenario bei mir:
a) eine VM mit einem Webserver (Nginx) wo ich meine Webseite inkl. Certbot laufen habe auf Port 80/443.
b) einen Docker mit NPM als Reverse Proxy, der auf einem 40xxx Port läuft

Nun liesen sich die Let´s Encrypt Zertifikate nicht mehr automisch erneuern beim NPM Proxy, auch nicht manuell, da das wohl nicht funktioniert wenn man die Ports ändert.
Also Portfreigaben wieder umkonfiguriert, alle Zertifikate gelöscht im NPM Proxy, wieder neu angefragt und alles zurück.
Sehr nervig.

Daher die Frage: kann ich dem irgendwie anders Herr werden?

Ich verstehe z.B. die folgenden Felder nicht:
1710400794711.png


HSTS Subdomains und Use a DNS Challenge. Können mir die helfen?

Kann ich die Zerfitikate meiner VM einfach benutzen, also dort rein kopieren oder gibt es wegen der Portänderung bei der Kontrolle immer einen "internal Error".
VM ist domain.de und www.domain.de
NPM: sub1.domain.de; sub2.domain.de usw.

So wie ich das verstanden habe, sollte das Zertifikat von der VM für alle *.domain.de gelten.

P.S. Funktionieren tut der https Zugriff später einwandfrei mit Port 40xxx.
 
Bei der DNS-Challenge brauchst du administrativen Zugriff auf den DNS-Server mittels API. Das unterstützen nicht alle Hoster. Der NGINX Proxy Manager hat einige Hoster bereits hinterlegt und es gibt zT auch noch weitere mittels Plugins. Portweiterleitungen sind dazu nicht notwendig, weil über die API lediglich beim DNS geprüft wird ob die Domain wirklich dir gehört. Ich bin gerade dabei, das bei mir zu implementieren, aber leider unterstützt mein Hoster keine DNS-Challenge und ich muss meine Domain leider umziehen :(
 
  • Gefällt mir
Reaktionen: Avenger84
Zertifikate werden nicht nur auf die Domain ausgestellt, sondern auch auf den Hostnamen der zu Grunde liegt.
Zertifikate von Host A können zwar auf Host B kopiert und verwendet werden, erzeugen aber beim Webseiten Besucher eine Warnmeldung im Browser.

Die DNS Challenge kannst du nutzen, um deine Urheberschaft auf eine Domain nachzuweisen. Dazu trägst du am DNS Server einen TXT Eintrag ein (siehe https://letsencrypt.org/docs/challenge-types/).

HSTS einfach im Web nachschlagen https://de.wikipedia.org/wiki/HTTP_Strict_Transport_Security
Das sollte erstmal nichts mit Lets-Encrypt zu tun haben, da es vom Webserver sichergestellt wird.
 
  • Gefällt mir
Reaktionen: Avenger84
Schau mal wie der Zugriff auf die Domain erfolgt /konfiguriert ist. Mit www oder ohne.
 
Üblicherweise nutzt man ja Reverse Proxies wie Nginx Proxy Manager, weil man mehrere Services hat, die auf Port 80/443 hören. Die meisten Proxies können dann auch noch TLS Termination machen, damit du TLS und den ganzen Zertifikatskram nur an einer Stelle managen brauchst. Das Prinzip ist dabei, dass die Verbindung nur auf dem Weg vom Internet zu NPM verschlüsselt läuft. In deinem Netzwerk kann dann der Traffic unverschlüsselt laufen.

Ich würde das also so aufsetzen:

  • Certbot von deiner VM schmeißen
  • DNS so aufsetzen, dass alle Anfragen zu der IP laufen, auf der NPM läuft
  • NPM so konfigurieren, dass es auf Port 80/443 hört
  • In NPM dann alle Webservices eintragen, die TLS verschlüsselt erreichbar sein sollen (auch deine separate VM sollte gehen). Dabei kannst du jeweils die Ports angeben, auf die unverschlüsselter Traffic gehen darf.
Beispiel:
  • Du hast einen Host mit der IP 123.123.123.1 und einen mit der IP 123.123.123.2
  • NPM und deine Docker Services laufen auf 123.123.123.1, deine andere VM mit nginx auf 123.123.123.2
  • Auf 123.123.123.1 läuft NPM auf Port 80/443. Dazu noch Portainer auf Port 9000 und Plex auf Port 8080
  • Du trägst in deinem DNS ein, dass deinedomain.de an 123.123.123.1 erreichbar ist
  • in NPM trägst du dann je einen Proxy Host ein für:
    • 123.123.123.1:9000 (portainer.deinedomain.de)
    • 123.123.123.1:8080 (plex.deinedomain.de)
    • 123.123.123.2:80 (nginx.deinedomain.de)
Ist ne Weile her, dass ich NPM benutzt habe, daher kann ich dir leider nicht genau sagen, wo man drücken muss. Wichtig ist nur, dass NPM auf Port 443 erreichbar ist, um die Let's Encrypt Challenge zu bestehen. Du könntest auch die DNS Challenge benutzen. Vorteil dabei ist, dass du auch Wildcard-Zertifikate (*.deinedomain.de) anlegen kannst. Dabei muss dein DNS-Anbieter aber mitspielen, wie Raijin schon angemerkt hat.

Bei den anderen Optionen aus deinem Screenshot würde ich für den Anfang HSTS auslassen. Das kannst du anschalten, wenn alles funktioniert. Rest kann so bleiben.

viel Erfolg!
 
  • Gefällt mir
Reaktionen: Avenger84
Raijin schrieb:
Bei der DNS-Challenge brauchst du administrativen Zugriff auf den DNS-Server mittels API. Das unterstützen nicht alle Hoster. Der NGINX Proxy Manager hat einige Hoster bereits hinterlegt und es gibt zT auch noch weitere mittels Plugins. Portweiterleitungen sind dazu nicht notwendig, weil über die API lediglich beim DNS geprüft wird ob die Domain wirklich dir gehört. Ich bin gerade dabei, das bei mir zu implementieren, aber leider unterstützt mein Hoster keine DNS-Challenge und ich muss meine Domain leider umziehen :(

Danke für die Antworten.
Ich möchte den Proxy gern dort lassen wo er jetzt ist (Port >40k).

Cloudflare unterstützt DNS-Challaenge.

Ich habe mir die Erklärung durchgelesen, aber immer noch nicht verstanden was wie wo erfolgen muss.

Was ich verstanden habe ist, dass Let´s Encrypt zwingend für das normale Erneuern Port 80 & 443 braucht.
Daher klappte es auch erst nicht, da ich nur Port 443 wieder zugewiesen hatte für den Proxy.

ich habe aktuell für den Webserver www.domain.de und domain.de als Zertifikat.
 
Avenger84 schrieb:
Ich möchte den Proxy gern dort lassen wo er jetzt ist (Port >40k).
Gibt es einen Grund?

Da bei mir Zugriff besteht, läuft alles über den Reverse-Proxy (Traefik2), der stellt OAuth2, holt Zertifikate mit Wildcards und routed alle Dienste auf die entsprechende Sub-Domain.

Gerade wenn Zugriff von außen besteht, würde ich nicht experimentieren.
 
Ja gibt es.

Traefik habe ich mir auch schon mal angesehen, aber das ist mir zu komplex oder besser gesagt das übersteigt meine Kompetenzen.

Noch mal zur Ursprungsfrage zurück:
wenn ich DNS Challenge nutzen will, was NPM Proxy auch für meinen Anbieter Cloudflare anbietet, kann ich damit ein Wildcard Zertifikat bekommen (im NPM), auch wenn dieser von Let´s Encrypt nicht auf Port 80/443 erreichbar ist ?

Wenn nicht: Kann ich sonst irgendwie ein Wildcard Zerfikat bekommen per DNS Challenge ?
Das wäre für mich immer noch einfacher es alle 3 Monate im NPM manuell zu hinterlegen, als immer meine Freigaben umzukonfigurieren.
 
Avenger84 schrieb:
wenn ich DNS Challenge nutzen will, was NPM Proxy auch für meinen Anbieter Cloudflare anbietet, kann ich damit ein Wildcard Zertifikat bekommen (im NPM), auch wenn dieser von Let´s Encrypt nicht auf Port 80/443 erreichbar ist ?
Ja. Das Wildcard gibt es sogar ausschließlich über die DNS-Challenge.

Was die anderen dir hier nur mitteilen wollten, wenn Du eh schon einen Reverse Proxy wie den Nginx Proxy Manager nutzt, dann kannst Du ihn auch für alle weiteren Webserver, die Du hast, nutzen und brauchst auf denen kein Let’s Encrypt mehr einrichten. Allerdings ist das kein Muss und muss man auch erst mal entsprechend einrichten alles. Kannst ja mit dem Nginx Proxy Manager mal anfangen und später die Fühler entsprechend ausstrecken.
 
Zuletzt bearbeitet:
Das Hinzufügen eines Wildcard Zertifikats hat geklappt.

Leider lässt sich damit keiner der Proxys ausstatten, auch kein neu erstellter :-( vermutlich weil NPM beim speichern keinen erfolgreichen Test durchführen kann aufgrund des Ports.

P.S. jetzt startet NPM Docker nicht mal mehr, weil er laut Log irgendein Zerfikat nicht finden kann.

Edit / Lösung:
Habe den NPM komplett gelöscht und noch mal neu installiert (Docker unter Unraid), anschließend zuerst das Wildcard Zertifikat erstellen lassen und danach meine ganzen Proxys angelegt, was sofort ohne Fehler klappte. 👍
Ich hoffe dass die Erneuerung in 3 Monaten ebenfalls so reibungslos läuft.

Ich bevorzuge es, dass der NPM als Docker und mein Webserver (VM) komplett unabhängig voneinander laufen und wirklich nichts miteinander zu tun haben.

Die Anleitung hat mir bei der Erstellung des Cloudflare DNS Tokens geholfen:
https://medium.com/@life-is-short-s...th-domain-name-in-cloudflare-dns-732af64ddc0b
den braucht man für NPM
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: lumpi2k
Zurück
Oben