pfSense & HAProxy
-
Guten Abend,
seit einigen Tagen beschäftige ich mich mit dem Thema pfSense und HAProxy. Auf meinem dedizierten Server läuft Proxmox 6. Aus Kostengründen habe ich nur eine zusätzliche IP bei meinem Hoster bestellt. Um dennoch hinter einer einzelnen IP mehrere Dienste betreiben zu können nutze ich pfSense. Um verschiedene Dienste wie beispielsweise Plesk hinter pfSense zu betreiben mit diversen Domains bin ich auf HAProxy gestoßen. Soweit habe ich alles konfiguriert, dass das Plesk-Interface ("https://plesk.MEINE-DOMAIN.de") (via Port 8443, SSL, mit einem Wildcard-Zertifikat von Let's Encrypt geschützt) erreichen kann. Desweiteren habe ich es geschafft ebenfalls meine allgemeine Domain ("https://www.MEINE-DOMAIN.de") erreichbar zu machen via "HTTPS". Auch eine redirect von "HTTP" auf "HTTPS" funktioniert, mit einem ABER ...
Wenn ich die Domain "http://www.MEINE-DOMAIN.de" aufrufe werde ich automatisch auf "https://www.MEINE-DOMAIN.de" weitergeleitet. Da ich nicht ausschließen kann, dass jemand die Domain "http://MEINE-DOMAIN.de" aufruft (also ohne WWW) sollte diese natürlich auch weitergeleitet werden auf HTTPS, dies tut es auch, allerdings erhalte ich die Meldung "503 Service Unavailable", des Weiteren wird das Zertifikat auch nicht erkannt.
Ich hoffe, dass ich euch mein Problem einigermaßen näher bringen konnte. Leider habe ich es nicht geschafft die Konfigurationen auszulesen.
Würde mich über einen denkanstoß freuen.
Gruß
Björn -
@ThePocky said in pfSense & HAProxy:
Konfigurationen auszulesen.
The config file can be seen the bottom of the 'settings' tab.
-
Danke für den Tipp!
Es funktioniert soweit, aber wenn anfragen an: http://www.MEINE-ERSTE-DOMAIN.de kommen, findet keine weiterleitung zu HTTPS statt. Aber bei Anfragen an http://MEINE-ERSTE-DOMAIN.de funktioniert die weiterleitung. Hat Jemand eine Idee wie man dies elegant lösen kann? Eventuell verbesserungsvorschläge für meine Konfiguration. Es sollen später noch weitere Domains folgen.
Hier einmal meine Konfiguration.:
# Automaticaly generated, dont edit manually. # Generated on: 2019-10-19 14:38 global maxconn 1000 stats socket /tmp/haproxy.socket level admin gid 80 nbproc 1 hard-stop-after 15m chroot /tmp/haproxy_chroot daemon tune.ssl.default-dh-param 2048 server-state-file /tmp/haproxy_server_state frontend Plesk bind XXX.XXX.XX.XX:8443 name XXX.XXX.XX.XX:8443 ssl crt-list /var/etc/haproxy/Plesk.crt_list mode http log global option http-keep-alive timeout client 30000 acl plesk.MEINE-ERSTE-DOMAIN.de var(txn.txnhost) -m str -i plesk.MEINE-ERSTE-DOMAIN.de acl aclcrt_Plesk var(txn.txnhost) -m reg -i ^([^\.]*)\.MEINE-ERSTE-DOMAIN\.de(:([0-9]){1,5})?$ acl aclcrt_Plesk var(txn.txnhost) -m reg -i ^MEINE-ERSTE-DOMAIN\.de(:([0-9]){1,5})?$ http-request set-var(txn.txnhost) hdr(host) use_backend plesk.MEINE-ERSTE_DOMAIN.de_ipv4 if plesk.MEINE-ERSTE-DOMAIN.de aclcrt_Plesk use_backend plesk.MEINE-ERSTE_DOMAIN.de_ipv4 if aclcrt_Plesk frontend http-to-https bind XXX.XXX.XX.XX:80 name XXX.XXX.XX.XX:80 mode http log global option http-keep-alive timeout client 30000 http-request redirect scheme https frontend SharedFrontend-merged bind XXX.XXX.XX.XX:443 name XXX.XXX.XX.XX:443 ssl crt-list /var/etc/haproxy/SharedFrontend.crt_list mode http log global option http-keep-alive timeout client 30000 acl aclcrt_SharedFrontend var(txn.txnhost) -m reg -i ^([^\.]*)\.MEINE-ERSTE-DOMAIN\.de(:([0-9]){1,5})?$ acl aclcrt_SharedFrontend var(txn.txnhost) -m reg -i ^MEINE-ERSTE-DOMAIN\.de(:([0-9]){1,5})?$ acl MEINE-ERSTE-DOMAIN.de var(txn.txnpath) -m str -i MEINE-ERSTE-DOMAIN.de acl www.MEINE-ERSTE-DOMAIN.de var(txn.txnpath) -m str -i www.MEINE-ERSTE-DOMAIN.de acl aclcrt_MEINE-ERSTE-DOMAIN.de var(txn.txnhost) -m reg -i ^([^\.]*)\.MEINE-ERSTE-DOMAIN\.de(:([0-9]){1,5})?$ acl aclcrt_MEINE-ERSTE-DOMAIN.de var(txn.txnhost) -m reg -i ^MEINE-ERSTE-DOMAIN\.de(:([0-9]){1,5})?$ acl MEINE-ZWEITE-DOMAIN.de var(txn.txnpath) -m str -i MEINE-ZWEITE-DOMAIN.de acl www.MEINE-ZWEITE-DOMAIN.de var(txn.txnpath) -m str -i www.MEINE-ZWEITE-DOMAIN.de acl aclcrt_MEINE-ZWEITE-DOMAIN.de var(txn.txnhost) -m reg -i ^([^\.]*)\.MEINE-ZWEITE-DOMAIN\.de(:([0-9]){1,5})?$ acl aclcrt_MEINE-ZWEITE-DOMAIN.de var(txn.txnhost) -m reg -i ^MEINE-ZWEITE-DOMAIN\.de(:([0-9]){1,5})?$ http-request set-var(txn.txnhost) hdr(host) http-request set-var(txn.txnpath) path use_backend www.MEINE-ERSTE_DOMAIN.de_ipv4 if aclcrt_MEINE-ERSTE-DOMAIN.de use_backend www.MEINE-ZWEITE-DOMAIN.de_ipv4 if aclcrt_MEINE-ZWEITE-DOMAIN.de backend plesk.MEINE-ERSTE_DOMAIN.de_ipv4 mode http id 10100 log global timeout connect 30000 timeout server 30000 retries 3 source ipv4@ usesrc clientip server plesk.MEINE-ERSTE-DOMAIN.de 192.168.1.11:8443 id 10101 ssl check inter 1000 verify none backend www.MEINE-ERSTE_DOMAIN.de_ipv4 mode http id 10102 log global timeout connect 30000 timeout server 30000 retries 3 source ipv4@ usesrc clientip server www.MEINE-ERSTE-DOMAIN.de 192.168.1.11:80 id 10101 check inter 1000 backend www.MEINE-ZWEITE-DOMAIN.de_ipv4 mode http id 10103 log global timeout connect 30000 timeout server 30000 retries 3
Danke im vorraus!
Gruß
Björn -
@ThePocky said in pfSense & HAProxy:
wenn anfragen an: http://www.MEINE-ERSTE-DOMAIN.de kommen, findet keine weiterleitung zu HTTPS statt
This cannot be, if it is handled by the "frontend http-to-https" then everything gets a redirect back with the configuration above.
Are you sure the domain-name is resolving to the same IP that haproxy is handling the traffic for? Or perhaps a browser-cache doing something strange.?p.s.
Also i see you have defined some acl's manually, but don't really use them in a 'action' that would tell what backend to use.. Only the automatic certificate-acl's are currently performing that functionality. This is not a problem as long as both domains are using different certificates. But if you one day decide to switch to a single certificate that handles both domains, the traffic would end up on the same backend..