haproxy - multi front/backends, eine IP und acme
-
Ein freundliches Hallo,
möchte gerne erfahren, ob es möglich ist, die Konfiguration so anzupassen, dass ich an einer IP mehrere frontends mit div. backends haben kann, wobei ein backend ein weiterer NGINX-Host ist der selbst Let's Encrypt machen soll und die pfSense mit acme auch noch.
Ich stelle mir das so vor:
erstes Frontend mit WAN IP Port 80 und 443 und einer ACL die auf "host ends with": dev.pve.domain.net reagieren soll. (mit http/https offloading klappt es bisher nicht, logisch!?)zweites (shared)-frontend mit "http redirect https", also auch 80 und 443 und restliche-backends, die dieser haproxy mit acme terminieren soll und die ACLs "host matches": www.domain.net usw. beinhalten.
Bin mir nicht sicher, ob es beim haproxy hier quasi ein Regelwerk geben kann oder wie es genau umgesetzt werden müsste. Vllt. hat hier Jemand eine Idee und blickt es...
Aktuell leitet er zwar Anfragen wie test.dev.pve.domain.net an den NGINX weiter, aber mit Zertifikatsfehler, weil er hier schon das Standardzertifikat (ist bereits das des FQDNs der pfSense) verwendet.
Besten Dank dafür,
Ciao
ako -
@ako77 Hallo Ako,
nach meinem Verständnis kann es nur ein Frontend zu einer IP/Port-Kombination geben.
Ob und wie Du dann Backend-spezifisch http oder https weitergibst, weiß ich leider nicht.
Gruß, Jörg -
@ako77 said in haproxy - multi front/backends, eine IP und acme:
erstes Frontend mit WAN IP Port 80 und 443 und einer ACL die auf "host ends with": dev.pve.domain.net reagieren soll. (mit http/https offloading klappt es bisher nicht, logisch!?)
Wenn der Proxy nicht das passende Zertifikat hat, sieht er den Hostheader in einem verschlüsselten (HTTPS) Request nicht.
Demnach kannst du nicht ein http/https Frontend verwenden, SSL offloading natürlich gar nicht.Du könntest es mit einem ssl/https tcp mode Frontend und SNI versuchen, dann aber eben nur für Port 443.
Damit kannst du alle Anfragen anhand von SNI auf unterschiedliche Backends weiterschicken.Für unverschlüsselten Traffic auf Port 80 musst du ein zusätzliches Frontend einrichten. Hier kannst du dann Hostheader ACLs verwenden, oder besser einfach nur einen redirect auf https, wenn ohnehin alles verschlüsselt sein soll.
Der Redirect sollte eigentlich auch in einem gemeinsamen Frontend für 443 und 80 machbar sein.Grüße
-
@viragomann Danke für Deine Ausführung... so ganz habe ich es noch nicht verstanden, werde aber mal versuchen aufzuschlüsseln, ob damit mein Vorhaben (doch) möglich ist.
Danke auch @jma791187 und so war auch mein Gedanke.
Mit den Infos von @viragomann kann ich mir noch nicht herleiten, ob dann der Haproxy mit acme immer noch funktioniert und ich per SNI auf einen weiteren Proxy komme, der dann auch mit acme Zertifikate ausstellen kann?!Wenn ihr noch Code-Schnippsel habt, mit denen ich es mir dann besser herleiten kann, wäre ich dankbar.
Cheers
Ako -
@ako77 said in haproxy - multi front/backends, eine IP und acme:
Mit den Infos von @viragomann kann ich mir noch nicht herleiten, ob dann der Haproxy mit acme immer noch funktioniert und ich per SNI auf einen weiteren Proxy komme, der dann auch mit acme Zertifikate ausstellen kann?!
Ist vielleicht nicht ganz herausgekommen:
SNI setzt kein Zertifikat am Proxy vorraus.Somit hat es auch nichts mit ACME zu tun. Generell läuft ACME völlig unabhängig vom HAproxy und ist keineswegs eine Voraussetzung.
Es liefert der pfSense lediglich SSL-Zertifikate, die HAproxy dann in einem HTTP-Frontend verwenden kann.
Die Zertifikate könnte man aber auch manuell installieren oder auf einem anderen weg automatisiert bereitstellen.Also noch einmal:
-
ssl/https (TCP mode) Frontend:
kann SNI auslesen und die Anfragen entsprechend auf Backends verteilen.
Kann keine Header lesen.
Kein SSL Zertifikat am Proxy nötig, jedoch am Backend / Webserver. -
http / https (offloading) Frontend:
Kann Hostheader (und andere) lesen.
SSL Zertifikat am Proxy nötig, am Backend nicht.
Weil es ohnehin das Zertifikat benötigt und die Hostheader lesen kann, bietet es keine SNI ACL. Theoretisch möglich wäre es, denke ich. Der Proxy selbst liest ja auch SNI aus, wenn dem Frontend mehrere Zertifikate zugewiesen sind.
Grüße
-
-
@ako77 said in haproxy - multi front/backends, eine IP und acme:
Ich stelle mir das so vor:
erstes Frontend mit WAN IP Port 80 und 443 und einer ACL die auf "host ends with": dev.pve.domain.net reagieren soll. (mit http/https offloading klappt es bisher nicht, logisch!?)
zweites (shared)-frontend mit "http redirect https", also auch 80 und 443 und restliche-backends, die dieser haproxy mit acme terminieren soll und die ACLs "host matches": www.domain.net usw. beinhalten.
Bin mir nicht sicher, ob es beim haproxy hier quasi ein Regelwerk geben kann oder wie es genau umgesetzt werden müsste. Vllt. hat hier Jemand eine Idee und blickt es...Ob und wie das geht hängt davon ab, wie @viragomann schon sagt, ob du SSL Termination machst oder nicht. Sprich ob du die SSL Verbindung am Proxy hast und dort Zertifikate oder ob du das einfach nur durchreichst an die Backends.
Mehrere "Frontends" für einen IP/Port gehen durchaus, WENN es ein shared frontend ist (dann ist es technisch gesehen kein zweites Frontend, sondern es wird einfach ein ACL Regel/Actionset erstellt). Man kann das aber auch recht simpel in einem einzigen Frontend pro Port (also eines für HTTPS und eines für 80/HTTP) abwickeln. Die Umsetzung von 80->443 läuft dann im HTTP Frontend, der Rest im HTTPS Frontend.
Ansonsten muss nur via einer ACL mit "Host Ends in" auf die Domainendung gematcht werden, dann kann man die Zugriffe auf das entsprechende Backend verteilen. Je nachdem ob man das mit dem ACME Package verknoten will für SSL Termination, stellt man das HTTPS Frontend dann auf HTTP/HTTPS Termination und hinterlegt das via ACME geholte Zertifikat dort.
Cheers
-
@viragomann Danke Dir... es wird mir nun etwas klarer.
Dass es nicht (direkt) mit ACME zu tun hat, war nicht der Grund, weshalb ich das erwähne, sondern der, dass ich nur verdeutlichen wollte an zwei Stellen ACME nutzen zu wollen, aber eben nur mit einer IP (und einmal Port 80/443).
@JeGr in dem Sinne habe ich bereits zwei Frontends, korrekt. Eins, welches 80 auf 443 weiterleitet und dann eben das Shared_Frontend. Wenn ich dann so mit "Host ends" oder ähnliches arbeite, greift natürlich das ACME Zertifikat, welches hier hinterlegt ist, also von der pfsense mit Acme kommt. Dann funktioniert die "Weiterleitung" auf den 2. Nginx nicht, wie gewünscht.
Werde mir Eure Infos nun mal verinnerlichen und weitertesten bei Gelegenheit. Herzlichen Dank für Eure Zeit.
Cheers