Mit HA-Proxy die Zertifikate der Server benutzen



  • Hallo zusammen,

    ich bin neu bei PFsense und werde gerade von den Einstellungen erschlagen ;)
    Soweit habe ich alles hinbekommen, leider scheitere ich an der Konfiguration des HA-Proxy.

    Folgendes habe ich:

    Internet -> DynDns -> PFsense -> mehrere virtuelle Server

    Auf den Servern laufen verschiedene Dienste wie FileRun, Bitwarden, Wordpress usw....
    Da ich nur eine IP-Adresse habe, ist jeder einzelne Server über Port 443 und eine Subdomain erreichbar.

    Jeder dieser Server hat sein eigenes Let's Encrypt Zertifikat und verlängert dieses auch selbstständig.
    Ist es möglich, über HA-Proxy jeden Server zu erreichen ohne dass die PFsense ein Zertifikat übergibt?!

    Ich möchte eigentlich erreichen, dass die PFsense meine https Anfrage an den jeweiligen Server weitergibt und dieser dann "sein" Zertifikat liefert.

    Ist das möglich? Hat das jemand im Einsatz.
    Wenn ja, kann mir jemand verraten wie ich das konfiguriere 😁

    Schonmal vielen Dank im voraus!


  • LAYER 8 Moderator

    @Wireguard said in Mit HA-Proxy die Zertifikate der Server benutzen:

    Ist es möglich, über HA-Proxy jeden Server zu erreichen ohne dass die PFsense ein Zertifikat übergibt?!

    Ja über ein HTTPS Frontend, statt einem HTTP+Termination Frontend. Daran erkennbar, dass dann weiter unten im Frontend KEINE Sektion mit SSL Auswahl mehr ist, wo du das Zertifikat auswählst das ausgeliefert wird. Mach ich zwar nicht/ungern, weil das dann heißt dass jede Domain das selbst machen muss (Mixbetrieb geht nicht), aber klar, kann man einstellen.

    6c867cda-3bfa-49b8-a03d-f144741234a8-image.png

    Hier ist die Stelle im Frontend. Wichtig ist, dass du dein Frontend für "Port 443" machst, KEIN SSL Offloading anhakst und weiter unten beim Typ auch den SSL/HTTPS TCP Mode nutzt. Dann wird das eigentlich ein reiner TCP Loadbalancer bzw. es wird auf Layer 4 weitergeleitet und das Zert kommt vom Server selbst. Ende Banane ;)

    Cheers
    \jens



  • Vielen Dank, Ich werde es mir anschauen.



  • @JeGr said in Mit HA-Proxy die Zertifikate der Server benutzen:

    Ja über ein HTTPS Frontend, statt einem HTTP+Termination Frontend. Daran erkennbar, dass dann weiter unten im Frontend KEINE Sektion mit SSL Auswahl mehr ist, wo du das Zertifikat auswählst das ausgeliefert wird. Mach ich zwar nicht/ungern, weil das dann heißt dass jede Domain das selbst machen muss (Mixbetrieb geht nicht), aber klar, kann man einstellen.

    Was genau meinst Du mit Mixbetrieb?
    Ungern weil ein Sicherheitsproblem?

    Ich stehe genau vor dem gleichen Problem:
    1x IPv4 und dahinter zwei Server welche beide auf 443 lauschen.

    Je nach Domain sub1.example.com bzw. sub2.example.com soll es dann auf Server1 oder Server2 gehen.



  • Hallo,

    ich habe es nun so konfiguriert

    Backend

    2020-10-09 10_24_10-Window.png

    Frontend

    2020-10-09 10_25_59-Window.png

    Geholfen hat mir unter anderem das

    https://blog.briantruscott.ca/how-to-serve-multiple-domains-from-a-single-public-ip-using-haproxy-on-pfsense/

    Jeder meiner Server holt sich seine eigenen Zertifikate per Certbot. Die PFsense wiederum holt sich ihre Zertifikate selbst per Acme. Ist alle 3 Monate 10 Minuten Aufwand. Für mich passt die Lösung so bis ich Zeit finde mich tiefergehend damit zu beschäftigen.

    Falls du noch Hilfe brauchst, sag Bescheid.

    Grüße



  • Danke für die Screenshots, ich sehe schon irgednwann muss man anfangen sonst komme ich da nicht weiter :)



  • Sieht schwerer aus als es ist ;)

    Wie gesagt wenn ich helfen kann lass es mich wissen.

    Viel Glück.



  • @Wireguard
    vielen Dank für die Hilfe.

    Ich werde das Abends/Nachts mal mit einem Server probieren.
    Im Moment ist eine NAT Regel vorhanden weil derzeit noch 1 IPv4 IP auf ein Server zeigt, die muss dafür auch weg.

    Vor allem geht es mir in erster Linie darum kein Mist in Form von einem Sicherheitsproblem zu bauen, für alles andere habe ich Gedult ;)


  • LAYER 8 Moderator

    @slu said in Mit HA-Proxy die Zertifikate der Server benutzen:

    Was genau meinst Du mit Mixbetrieb?
    Ungern weil ein Sicherheitsproblem?
    Ich stehe genau vor dem gleichen Problem:
    1x IPv4 und dahinter zwei Server welche beide auf 443 lauschen.
    Je nach Domain sub1.example.com bzw. sub2.example.com soll es dann auf Server1 oder Server2 gehen.

    Mixbetrieb: Man kann nicht mit dem gleichen Frontend einmal TLS annehmen und terminieren und einmal Layer4 annehmen und weiterreichen (ohne die TLS Verbindung zu terminieren). Gemischt geht nicht. Man kann nur eins von beidem. Eigentlich will man meistens eh terminieren, dann kann man die Zertifikate auch auf der Sense handlen und muss nicht auf jedem Client damit rumkaspern.

    Und dein Problem ist das einfachste und schnellste was man anlegen kann :) Sei froh ;)



  • @JeGr said in Mit HA-Proxy die Zertifikate der Server benutzen:

    Und dein Problem ist das einfachste und schnellste was man anlegen kann :) Sei froh ;)

    So nachdem es ja ganz viele Knöpfe im HAProxy gibt habe ich mir zur Sicherheit ein Testsystem (VM) aufgebaut.

    https://server1.example.com -> 10.10.10.10
    https://server2.example.com -> 10.10.10.11

    Hab ich das so richtig konfiguriert (Frontend Type ist "http/https(offloading)")?
    Backend.png

    Backend_Server1.png

    Frontend.png

    Frontend_Details.png



  • Nach weiterem lesen der Doku ist der Type falsch, es muss ssl/https(TCP mode) sein, richtig?

    Damit wäre die ACL Expression "Server Name Indication TLS extension matches"
    Und Value "server1.example.com"

    Frontend_details.png


  • LAYER 8 Moderator

    @slu said in Mit HA-Proxy die Zertifikate der Server benutzen:

    Nach weiterem lesen der Doku ist der Type falsch, es muss ssl/https(TCP mode) sein, richtig?

    Für was genau denn? :D



  • @JeGr said in Mit HA-Proxy die Zertifikate der Server benutzen:

    @slu said in Mit HA-Proxy die Zertifikate der Server benutzen:

    Nach weiterem lesen der Doku ist der Type falsch, es muss ssl/https(TCP mode) sein, richtig?

    Für was genau denn? :D

    https -> server1.example.com 4444 -> server1 10.10.10.10:4444
    https -> server2.example.com 4444 -> server1 10.10.10.11:4444

    https://github.com/PiBa-NL/pfsense-haproxy-package-doc/wiki#https-for-multiple-domains-using-sni-from-1-frontend

    Edit: Ich stelle gerade fest das ich den Thread etwas zweckentfremde, kannst Du den abtrennen und ein neuen Thread draus machen?


  • LAYER 8 Moderator

    Ja das ist klar, aber muss es weitergeleitet werden (Layer 4) oder willst du SSL terminieren und die Zerts auf der pfSense konfigurieren um alles an einem Platz zu haben?



  • Die Zertifikate sollen auf den jeweiligen Server bleiben, also nicht auf der pfSense/HAProxy.
    Es handelt sich also im Layer 4.


  • LAYER 8 Moderator

    OK dann muss es ein https Backend sein (ssl/https TCP mode). Zu erkennen auch daran, dass unten dann die Rubrik für die Zertifikate verschwindet und entfällt

    Ansonsten nach SNI filtern, das ist unverschlüsselt und müsste funktionieren, genau. Harter Match oder Regex oder Teilstring je nachdem wie es für dich passt und dann auf die Backends verteilen :)

    Wenn du beim Aufruf einen 503 bekommst, dann musst du dir die Stats anschauen, dann sind die Backends ggf. offline (dann kann das Frontend auch nix routen). Wenn die Backends rot sind, dann klappt die Erkennung nicht bzw. der Health Check passt nicht.

    Für SSL sollte das mit "enc(SSL) = yes und SSL checks = yes" bei der Server List pro Eintrag und beim Health Check "HTTP" klappen.
    Wenn nicht, testweise mal auf "none" oder "Basic" (Ping) stellen, dann müssten sie auf jeden Fall gehen. Dann kann man das "warum" bzw. "wie" mit dem HTTP check später fixen :)



  • So ich hatte heute die nötige Ruhe und habe das mal konfiguriert, leider ohne Erfolg.

    Wenn ich von extern die Domain aufrufe kommt ein SSL_ERROR_RX_RECORD_TOO_LONG.
    Hat jemand ein Hinweis für mich was ich falsch gemacht habe?

    (IP und DNS Namen sind natürlich anonymisiert und nicht so in der echten Konfig)

    frontend VDSL
    	bind			WAN_IP:443 name WAN_IP:443   
    	mode			tcp
    	log			global
    	timeout client		30000
    	tcp-request inspect-delay	5s
    	acl			ACLWebServer	req.ssl_sni -m sub -i web.example.com
    	tcp-request content accept if { req.ssl_hello_type 1 }
    	use_backend WebServer443_ipvANY  if  ACLWebServer 
    
    backend WebServer443_ipvANY
    	mode			tcp
    	id			100
    	log			global
    	timeout connect		30000
    	timeout server		30000
    	retries			3
    	option			httpchk OPTIONS / 
    	server			WebServer443 192.168.10.45:443 id 101 ssl check-ssl check inter 1000  verify none
    

Log in to reply