HAProxy Fragen

Started by meyerf, June 07, 2019, 02:30:15 PM

Previous topic - Next topic
Hallo Liebe Community

Gerne möchten wir im Business Umfeld OPNsense in Zusammenhang mit HAProxy einsetzen.
Folgende Punkte konnte ich aktuell noch nicht beantworten respektive nicht einrichten auf dem Web-GUI von OPNsense. Ich hoffe, dass die Community mir weiterhelfen kann bei den offenen Punkte.
An dieser Stelle möchte ich mich jetzt schon mal bei euch bedanken für die die Hilfe.

Offene Punkte/Fragen

  • Wie konfiguriert man HTTP -> HTTPS Redirect?
  • Können URL Weiterleitungen im HAProxy konfiguriert werden?
    Zum Beispiel: Aufruf http://www.test.ch/test wird weitergeleitet zu https://www.test.ch/test/welcome.html
  • Kann HAProxy gewisse Inhalte direkt auf der Firewall Cachen, damit die Webseite schneller geöffnet wird?

Danke und Gruss,
Flavio

Wie konfiguriert man HTTP -> HTTPS Redirect?

Du legst unter "Conditions" einen neuen Eintrag an z.B. "no_https"
In dem Eintrag setzt Du "SSL/TLS connection etablished" und den Haken bei "Neogation"
-> Damit fängst Du alles ab was NICHT HTTPS ist.

Dann noch eine neue Regel dazu.
z.B. HTTP_to_HTTPS
- Select condition -> no_https von vorher
- Execute function -> http-request direct
- http redirect -> "scheme https code 301"
-> Damit prüfen wir ob es HTTPS ist und wenn nicht leiten wir es um

Die Regel legst Du dann auf deinen FrontServer am Port 80 an.

Weiterleitungen sollten auch gehen, habe dazu aber keinen Eintrag bei mir und müsste selber testen.
Mit dem Cachen würde ich mal aus dem Bauch heraus nein sagen! HAProxy ist mächtig, aber das macht er nicht.

Hallo @BeNe

Danke für deinen HTTP -> HTTPS redirect Tipp. Funktioniert wunderbar.
Das mit dem Caching lasse ich mal so wie es ist, evtl. schaue ich zu einem späteren Zeitpunkt nochmals nach.
Habe da mal einen Beitrag auf der HAProxy Seite gefunden.

Viel wichtiger ist mir aktuell noch die URL Weiterleitung, wo ich persönlich keinen Plan habe...
Bin mir nicht sicher ob es ein Redirect oder ein Rewrite sein soll und muss auch ganz ehrlich sagen, dass mir das ganze aktuell noch zu tief geht mit den ganzen Regex Teilen etc..

Würde mich sehr freuen, wenn jemand von euch ein Beispiel für mich hätte, welches ich versuchen könnte.

Danke und Gruss,
Flavio

Hi meyerf und der Rest der das hier liest *wink*

kleiner Background: meyerf hat mir eine PN gesendet und um Hilfe gebeten. Da die OPNsense von einer großen Gemeinschaft benutzt wird, möchte ich seine fragen hier gleich mit allen klären. Vielliecht bringt es dem einen oder anderen ebenfalls was wenn er sich mit dem HAProxy beschäftigt.

Er hat mich gefragt ob ich ihm die Weiterleitung erklären kann. Dies kann ich natürlich gerne versuchen. Habe ich ebenfalls so bei mir produktiv im Einsatz. (Wenn man auf eine bestimmte Domain geht dann wird man automatisch zu domain.de/abc weitergeleitet.)


Glücklicherweise hat mir meyerf ein beispiel geliefert was er haben möchte:
http://abc.xyz.com/user -> https://abc.xyz.com/1/2/3.html

Weiterleitungen richtet man ebenfalls mit dem "http-request redirect" ein.


Meiner Logik nach habe ich es wie folgt eingerichtet:

Es wird jeweils ein Frontend für HTTP und eins für HTTPS benötigt.
Bedingungen:
Name                   Einstellungen
Connection_is_http  -> SSL/TLS connection established und negiert!
Connection_is_https -> SSL/TLS connection established
Host_is_abc_xyz_com -> Host matches abc.xyz.com
Path_is_user        -> Path matches /user

Regeln:
1. Wenn Connection_is_http -> https redirect   
Notiz: So wird alles was per http ankommt auf https weitergeleitet.
2. Wenn Connection_is_https und Host_is_abc_xyz_com und Path_is_user -> "http-request redirect" mit den argumenten: "location https://abc.xyz.com/1/2/3.html code 301"
Notiz: Wenn jemand auf abc.xyz.com/user zugreift kommt als Antwort, dass der Inhalt dauerhaft (301) verschoben wurde auf https://abc.xyz.com/1/2/3.html


Regel Nummer 1 weißt man dann dem HTTP Frontend zu. Regel 2 dem HTTPS Frontend



HTTP Codes



Falls jemand genauer wissen möchte wie es funktioniert.. Es steht meiner Meinung nach super in den Papieren vom HAProxy http://cbonte.github.io/haproxy-dconv/1.8/configuration.html#redirect


Um nachzuschauen was genau denn der HAProxy antwortet benutze ich immer curl. Gibt es für Linux oder Windows zum herunterladen. Hier dann das Programm aufrufen wie beispielsweise "curl -v http://abc.xyz.com"
Dann sieht man was der HAProxy antwortet.


Hoffe es stimmt alles so was ich gerade zusammengeschrieben habe...
Falls es nicht klappt bin ich natürlich gerne für Hilfestellungen da ;)
Wie immer beim HAProxy wäre es super die Textbasierte Config zu erhalten.... Da kann man es einfacher auslesen als hier hin und her zu schreiben...
Die Config erhält man wenn man auf der Console "cat /usr/local/etc/haproxy.conf" eingibt.
Um die eigene Firma nicht zu verraten: Nicht vergessen mindestens den Domainnamen zu ändern ;)
Proxmox VE
i3-4030U | 16 GB RAM | 512 GB SSD | 500 GB HDD
i3-2350M | 16 GB RAM | 120 GB SSD | 500 GB HDD

FW VMs:
2 Cores | 1 GB RAM | 20 GB SSD

Guten Abend superwinni2

Vielen Dank für deine Erklärung. War ich doch mal nicht so schlecht mit meinen Voreinstellungen.
Am Ende fehlt meistens ein kleines Puzzleteil, in meinem Fall "location https://abc.xyz.com/1/2/3.html code 301".

Dies scheint so zu funktionieren, ich werde korrekt weitergeleitet.
Gibt es jetzt noch eine Möglichkeit, dass die URL z.B. http://abc.xyz.com/user aber im Hintergrund die Weiterleitung aufgerufen wird? In unserem Fall ist die URL sehr hässlich /content/forms/af/muster/musterstammblatt.html.

Danke und Grüsse,
Flavio

Puuh.. das habe ich bisher noch nie probiert wie das funktionert...
Ich vermute mal relativ stark, dass du hierfür den Webserver und den HAProxy miteinander abstimmen musst....
Proxmox VE
i3-4030U | 16 GB RAM | 512 GB SSD | 500 GB HDD
i3-2350M | 16 GB RAM | 120 GB SSD | 500 GB HDD

FW VMs:
2 Cores | 1 GB RAM | 20 GB SSD

Ja, sowas kann man machen - so muss die Applikation nicht mitspielen aber es kann trotzdem zu Problemen führen:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Upgrade-Insecure-Requests