HaProxy als HTTPS-Gateway für mehre HTTPS-Webserver?
-
Moin,
mir geistert das eine Idee durch den Kopf, und bevor ich Stunden damit verbringe diese Möglichkeit zu untersuchen, wollte ich einfach mal fragen ob vielleicht schon jemand sowas im einsatz hat, oder Ideen dazu hat oder die Umsetzung für möglich hält.
Der Grundgedanke war, den haProxy mittels SSL-Offloading als Gateway zu nutzen und nicht als Load-Balancer. Dieser soll dann mit einem SAN-Zertifikat von Let's Encrypt ausgestattet werden, welches automatisiert erneuert werden soll. Zu diesem Zweck benötige ich allerdings wohl auch noch einen kleine Webserver auf der pfSense was zwar nicht Optimal ist, aber mit begrenzten Recourcen muss man halt manchmal Kompromisse eingehen.
Anbei mal eine Grafik, wie ich mir das ganze dann vorgestellt hätte:
Gruß
Ace
-
Hi,
Der Grundgedanke war, den haProxy mittels SSL-Offloading als Gateway zu nutzen und nicht als Load-Balancer.
Geht und ist auch mitunter Zweck davon.
Dieser soll dann mit einem SAN-Zertifikat von Let's Encrypt ausgestattet werden, welches automatisiert erneuert werden soll.
Wie auch immer du das automatisieren möchtest, das Cert in pfSense wird via GUI verwaltet. Nicht von Lets Encrypt.
Zu diesem Zweck benötige ich allerdings wohl auch noch einen kleine Webserver auf der pfSense was zwar nicht Optimal ist, aber mit begrenzten Recourcen muss man halt manchmal Kompromisse eingehen.
Wofür?
Mal davon abgesehen, ist das was du mit dem Diagram malst m.E. recht simpel machbar. Zudem ist es unnötig im Backend HTTPS zu sprechen, das müsste an der Stelle nicht sein, da das re-encrypt dann noch zusätzlich Resourcen frisst. Aber das nur nebenbei.Grüße
-
Hi,
das klingt ja schonmal sehr gut. Im Backend muss ich leider Teilweise SSL nutzen.
Das größere Problem ist, das ich immer noch einen simplen Webserver hierfür benötige: https://github.com/Neilpang/acme.sh
Und dann stellt sich mir noch die Frage, wie ich die so generierten Zertifikate in die pfSense Config bekomme, dami haProxy diese nutzen kann?
Gruß
Ace -
Hallo "Ace of Space"!
Das tönt ja wie "aus meinem Munde". Ich habe ein fast identisches Problem, nur habe ich in der Testumgebung drei Webserver, jeder eine eigene Domain (fast schon ein Luxus). Zwei Webserver (Apache2.4 auf Raspbian 4.4) sind auch mit Let's Encrypt zertifiziert. Funktionieren alternierend mit NAT (Ports 80, 443) fehlerfrei. Ich habe mich sehr gefreut.
Weniger freut mich allerdings das folgende Szenario: Dachte, ich kann mal schnell das mit pfSense (v2.3.1 p5) mit dem HAProxy (v1.6.4) realisieren. Aber "oha läts". Entweder bringt das Register "Settings" oder "Frontend" oder "Backend" jede Menge Fehlermeldungen. Kaum zu glauben, dass es das im 21. Jahrhundert noch gibt! Die Integration des Pakets "haproxy" ins WebGUI von pfSense, verschlimmbessert die Sache noch: keine Hilfe verfügbar, keine Anleitung (und die, die es gibt, sind Stückwerk und stimmen zum Teil nicht mehr). Ich warte schon seit Monaten auf eine Lösung. Müssen wir wohl den kommerziellen Support anfragen? Und das passiert mir, einem Informatik-Pionier (bin seit 1977 dabei)! Ich glaub', ich muss mal mit Tony Wasserman (President of Open Software Foundation) ein Wörtchen reden.
In Geduld, ein Opfer der Softwarekrise!
-
Und dann stellt sich mir noch die Frage, wie ich die so generierten Zertifikate in die pfSense Config bekomme, dami haProxy diese nutzen kann?
Mit Let's Encrypt wird das keinen Spaß machen, da die Zertifikate nur kurzzeitig lauffähig sind und oft neu generiert werden müssen. Da du die Zertifikate in der pfSense von extern lediglich händisch importieren kannst, müsstest du alle 2 Monate(?) die Zertifikate wechseln, das macht nun wirklich keinen Spaß.
Was das DisasterVictim angeht: von der leichten Melodramatik :D mal abgesehen funktioniert bei unseren Tests der HaProxy ganz gut und stimmig. Was die Leute immer wieder vergessen ist, dass die Zusatzpakete wie eben HaProxy nichts mit dem pfSense Core zu tun haben und deren Doku und "Haptik" in der GUI an den Paketerstellern liegt. Man könnte also die Kritik bündeln und die direkt konstruktiv beim entsprechenden Maintainer einkippen, damit der was dafür oder dagegen tun kann.
Dass Lets Encrypt und der gratis Zug an der Stelle eben andere Problematiken mit ins Spiel bringen, dafür kann HaProxy nichts.
Gruß
-
Wenn es eine Testumgebung gibt, warum können wir nicht einfach mal da drauf zugreifen und uns das Zeugs anschauen? Auch wenn's was kostet, warum nicht? Es spart uns ja eine Menge Zeit!
-
Wenn es eine Testumgebung gibt, warum können wir nicht einfach mal da drauf zugreifen und uns das Zeugs anschauen? Auch wenn's was kostet, warum nicht? Es spart uns ja eine Menge Zeit!
Weil das ein Setup eines Kunden ist und wir das firmenintern betreiben? Ich bin kein Mitarbeiter von Netgate, pfSense oder sonstwas und mich kosten Testsetups oder Teststellungen aus eigener Tasche genauso viel wie jeden anderen auch. Wenn ich für jedes Problem das ich hier lese einfach kostenlos eine Testbench bauen könnte, würde ich das gerne tun, ich habe aber noch niemanden gefunden, der mir das notwendige Equipment einfach so zur Verfügung stellt :)
Ich habe zudem nichts von Testumgebung gesprochen, sondern von Tests (Funktionstests) auf spezifischen Setups. Und dort war das Einrichten von HaProxy mit mehreren Domains und Zertifikaten, welcher dann auf mehrere Backends weiterreicht kein unüberwindbares Hindernis. Dort wird eingehend durch HTTP Header von HaProxy selektiert und das entsprechende Backend ausgewählt. Auch HTTPS via SNI war kein Hindernis sowie TLS Offloading. Dann spart sich die Kiste gleich noch das re-encrypt und spricht mit dem Backend einfach HTTP.
Gruß
-
Danke für die Hinweise. Ich hätte eine minimale Testumgebung. Wenn jemand Interesse hat und uns das zeigen könnte, wäre ich gerne bereit, den Zugang explizit dieser/n Person/en zu gewähren. Die Testumgebung besteht aus:
-
Asus Eee 1000H
–- 2 GB RAM, 2 CPU, 1.6 GHz, 50 GB HDD
--- pfSense 2.3.1 p5
--- HAproxy 1.6.4
--- public IP via DHCP 77.58.x.y
--- 2 Mbps Leitung -
Raspberry Pi 2
--- LAN IP 192.168.x.102
--- Raspbian 4.4 auf 64 GB SD
--- Apache 2.4 (SSL enabled, Let's Encrypt Zertifikat)
--- https://www.domain1.com (HTTPS only, ist inaktiv, weil HAProxy nicht läuft) -
Raspberry Pi 3
--- LAN IP 192.168.x.105
--- Raspbian 4.4 auf 64 GB SD
--- Apache 2.4 (SSL enabled, Let's Encrypt Zertifikat)
--- PHP5, MySQL, WordPress
--- https://www.domain2.com (HTTPS only, Blog ist aktiv, weil NAT Rules greifen) -
Optional weitere RasPis und/oder Synology DS mit ähnlichen Eckdaten (HTTPS only)
Für alle Testgeräte existieren die zugehörigen Installationprotokolle (Word 2007 und/oder PDF)
Dies könnte ich zur Verfügung stellen (ausgenommen bei Hackerangriffen), wenn jemand mir/uns das zeigen könnte, wie das geht. Das Know-how könnte im Forum zur Verfügung gestellt werden. Interesse?
Änderungen vorbehalten. Das Angebort ist zeitlich beschränkt und ist von der Absicht der Problemlösung abhängig.
Gruss
-
-
Wenn das zeitlich problemlos auch nächste Woche abends machbar ist, könnte ich da auf Wunsch einen Blick drauf werfen, zumindest bei der HaProxy Geschichte. Vorher sollte nur klar sein, was genau gewünscht ist. Allerdings: wie schon angeführt ist das importieren der LetsEncrypt Zertifikate m.E. nicht sinnvoll machbar wegen der kurzen Laufzeit. Da müsste man daher alle 1-2 Monate das Zertifikat tauschen, da das im Cert Management von pfSense noch unpraktisch ist, würde ich das eher nicht empfehlen. Wenn es denn unbedingt ein kostenloses Zert sein soll/muss, kann man notfalls ja durchaus noch auf StartSSL ausweichen und hat dann eines mit 1-2 Jahren (je nach Zertifizierungsgrad).
-
Danke für das Interesse. Nächste Woche kann ich diese Testumgebung nicht mehr garantieren. Unter Umständen geht das gar nicht mehr. Muss ich abklären.
Das mit den Let's Encrypt-Zertifikaten ist nur für die Testumgebung gedacht. Und es geht ums Prinzip. Ich habe auch noch andere Webserver, die nach bisherigen Zertifizierungsmethoden abgesichert sind (auch StartSSL). Es geht hier nur um den HAProxy bzw. dessen Konfiguration für die beiden Webserver. Die Testumgebung wäre parat, ich müsste nur eine Rule aktivieren und schon wäre alles übers WebGUI und / oder SSH (RasPis) erreichbar.
Gruss
-
Würde ich mir wie gesagt durchaus mit etwas Doku/Wunsch was wie funktionieren soll anschauen, allerdings habe ich bis einschl. Sonntag keine Möglichkeit dazu. Frühestens Sonntag abend wäre kurz denkbar, ansonsten Montag/Dienstag.
-
Danke, aber ich melde mich wie gesagt dann nächste Woche wieder.
Schones Wochenende! -
LetsEncrypt haben hier welche schon zumindest für den halbautomatischen Lauf in pfSense integriert:
https://forum.pfsense.org/index.php?topic=109877.msg640668#msg640668Ich selbst habe es nicht getestet und will es auch gar nicht. Mir kam nur beim Lesen hier der Thread in Erinnerung. ;)
-
@Ace of Space:
Nachdem ich mir das aktuelle Setup mit HaProxy und pfSense 2.3.x angeschaut habe, ziehe ich die Einwände bei SSL zurück :D ;)
Ich hatte schlicht übersehen und verdrängt, dass HAProxy nicht zwingend SSL terminieren muss, sondern lediglich auch nach Blick in den SNI Header einfach weiterreichen kann. Dein geschildertes Problem mit SSL Webseiten ist also keines :)Du kannst also:
a) alle Webserver im Backend mit HTTP betreiben und HAProxy auf der pfSense vorschalten und SSL sprechen lassen. Das wird mit LetsEncrypt dann etwas ungeschickt, da der Cert Manager von pfSense da unkomfortabel ist wenn ständig Zertifikate importiert werden müssen. Alternative: Statt dessen ggf. StartSSL Zertifikate für 1-2 Jahre nutzen - genauso gut (je nachdem wie man gegenüber der LE Philosophie eingestellt ist auch besser oder nicht). Die können dann im Manager importiert und von HAProxy ausgeliefert werden. Dadurch weniger Overhead auf den Maschinen dahinter (gerade wenn die recht schwachbrüstig sind wie bspw. RasPis).
b) Webserver so betreiben wie gewünscht, mal HTTP mal HTTPS und HAProxy entsprechend mit 2 Frontends konfigurieren (eines für Port 80, eines für Port 443). HTTPS nicht offloaden, sondern durchreichen. Dann kein Zertifikat auf der pfSense notwendig, Dienste werden einfach nur an Hand des HTTP Headers (HTTP) oder SNI Extension (HTTPS) ans entsprechend konfigurierte Backend durchgereicht.Sprich: Sollte wie gewünscht laufen.
Grüße
-
(Dumme) Frage: Muss jeder Backend eine eigene ACL haben oder können mehrere Backends eine gemeinsame ACL haben?
-
Das hängt von der gewünschten Konfiguration ab. Was willst du denn erreichen?