Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    OpenVPN hinter HAProxy Reverse Proxy - wie?

    Deutsch
    haproxy openvpn reverse proxy
    4
    15
    2.6k
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • JeGrJ
      JeGr LAYER 8 Moderator @iHaveAstream
      last edited by

      @ihaveastream

      bei HAproxy kann man im Frontend via ACL einiges rausfiltern. Beispielsweise wenn man SSH demultiplexen möchte (es gibt Leute, die tcp/22 auf 443 umbiegen und via DNS dann rausfiltern :)) kann man das via bspw. mit

      acl foo_proto_ssh payload(1,7) -m bin 5353482d322e30
      tcp-request content accept if foo_proto_ssh
      

      und später selektieren mit

      use_backend foo_bk_ssh if foo_proto_ssh
      

      OpenVPN könnte man rausfischen nach den HTTPS/SNI Sachen mit

      use_backend openvpn         if  !{ req.ssl_hello_type 1 } !{ req.len 0 }
      

      Da OpenVPN keinen Hello Type hat (kein HTTPS) aber die Request Länge größer 0 hat.
      Oder man kann es sich noch einfacher machen und einfach alles als Default Backend zu OpenVPN schicken, was man nicht vorher mit ACLs abgegriffen und auf ein HTTP(S) Backend abgeworfen hat. Kommt ganz drauf an. Und klappt natürlich nur für OpenVPN Server mit TCP mode, nicht mit UDP ;)

      Auf dem "braucht dringend Zeit um sich damit zu beschäftigen" Zettel steht immer noch, aus SSLH ein simples kleines pfSense Paket zu machen. Komme aber aktuell kaum zu was - man bräuchte einfach mehr Hände und mehr Zeit.
      Das Package selbst ist aber extrem simpel und es wäre kein großer Aufwand, das manuell auf der pfSense zu installieren, sich eine Config zu schreiben und es zu starten. Konfiguration sieht ebenfalls nicht wirklich schwierig aus:

      # Once configuration ready, you *must* set RUN to yes here
      # and try to start sslh (standalone mode only)
      
      RUN=yes
      
      # binary to use: forked (sslh) or single-thread (sslh-select) version
      DAEMON=/usr/sbin/sslh
      
      DAEMON_OPTS="-u sslh -p MYPUBLICIP:443 --ssh 127.0.0.1:22 --openvpn 127.0.0.1:1194 --ssl 127.0.0.1:443 -P /var/run/sslh/sslh.pid"
      

      Also effektiv 3-4 Zeilen Config, MYPUBLICIP ist die IP auf WAN Seite auf die gehört wird, die 127er sind dann eben die Dienst-IPs. OpenVPN wäre dann wahrscheinlich auf localhost gebunden, also 127.0.0.1:1194 (für tcp1194 local aber von extern via 443), SSH wird wahrscheinlich nicht gebraucht und SSL kann man auf localhost (oder eine IP der pfSense) mit 443 setzen, da kann dann der HAproxy drauf lauschen - hauptsache er kommt dem SSLH Agent nicht in die Quere.
      Somit bspw. auf WAN:443 SSLH aufsetzen, HAproxy lauscht auf LAN:443 und OpenVPN auf localhost:1194

      DAEMON_OPTS="-u sslh -p WANIP:443 --openvpn 127.0.0.1:1194 --ssl LANIP:443 -P /var/run/sslh/sslh.pid"
      

      Das wäre dann so ein Beispiel.

      Nur als Ideen und Vorschläge :)

      Cheers

      Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

      If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

      I 2 Replies Last reply Reply Quote 1
      • I
        iHaveAstream @JeGr
        last edited by

        @jegr

        Das klingt sehr interessant!

        Ursprünglich war ja mein Vorhaben OVPN als Backend laufen zu lassen, aber ich kam da (bisher) nicht weiter.
        Am besten gefällt mir tatsächlich die Idee mit dem SSLH Paket, aber ich habe leider nicht die Skills das zu coden. Vielleicht ist das also mal was für später, wenn du die Zeit dazu finden konntest :)

        Also zurück zum OVPN mit dem SSL Hello.
        Wäre das dann auf Localhost als IP und Port 443?

        Reicht es (in der GUI) beim Backend unter "Health Check Method" lediglich SSL auszuwählen oder müssen weitere Dinge konfiguriert werden, bzw. geht es nur über die Konsole?

        Thx

        JeGrJ 1 Reply Last reply Reply Quote 0
        • JeGrJ
          JeGr LAYER 8 Moderator @iHaveAstream
          last edited by

          @ihaveastream said in OpenVPN hinter HAProxy Reverse Proxy - wie?:

          Am besten gefällt mir tatsächlich die Idee mit dem SSLH Paket, aber ich habe leider nicht die Skills das zu coden. Vielleicht ist das also mal was für später, wenn du die Zeit dazu finden konntest :)

          Muss man für quick'n'dirty nichts coden. Nur das entsprechende Package per SCP/SFTP auf die Sense kopieren, installieren, Config erstellen, fertig. Also so wie bspw. beim Wireguard Package auch bevor es fertig war.

          Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

          If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

          JeGrJ 1 Reply Last reply Reply Quote 0
          • JeGrJ
            JeGr LAYER 8 Moderator @JeGr
            last edited by

            Wenn du mit dem Paket mal spielen willst:

            auf der Konsole

            curl https://pkg.freebsd.org/FreeBSD:12:amd64/latest/All/sslh-1.21c.txz --output sslh-1.21c.txz
            

            Dann hast du das Paket vom offiziellen Mirror. Hat keine Abhängigkeiten.

            pkg install sslh-1.21c.txz
            

            installiert das dann. sslh Binary selbst liegt in /usr/local/sbin und die Config in /usr/local/etc.
            Examples gibt es in /usr/local/share/examples/sslh/example.cfg

            Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

            If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

            I 1 Reply Last reply Reply Quote 0
            • I
              iHaveAstream @JeGr
              last edited by

              @jegr

              danke dafür noch.
              Angenommen die Sense würde sich ein Update ziehen, würde das Paket nebst Konfig dann danach noch vorhanden sein wenn man es auf diesem Wege installiert?

              JeGrJ 1 Reply Last reply Reply Quote 0
              • JeGrJ
                JeGr LAYER 8 Moderator @iHaveAstream
                last edited by

                @ihaveastream Das kommt auf das Update an. Das nächste "große" Update (wenn das Base OS aktualisiert wird auf FreeBSD !=12.2) wäre wahrscheinlich schwierig. Aber solang das Paket nicht durch eine Änderung von was anderem deinstalliert wird, würde auch ein Update via Paketaktualisierung das Paket eigentlich nicht ohne Grund löschen.

                Die Config kann man sicherstellen, indem man diese bspw. nicht selbst manuell anlegt, sondern das Filer Package dazu benutzt und die Config darin ablegt. Das ist dann auch komplett Update-safe.

                Don't forget to upvote 👍 those who kindly offered their time and brainpower to help you!

                If you're interested, I'm available to discuss details of German-speaking paid support (for companies) if needed.

                1 Reply Last reply Reply Quote 0
                • I
                  iHaveAstream @JeGr
                  last edited by

                  @jegr said in OpenVPN hinter HAProxy Reverse Proxy - wie?:
                  [...]

                  OpenVPN könnte man rausfischen nach den HTTPS/SNI Sachen mit

                  use_backend openvpn         if  !{ req.ssl_hello_type 1 } !{ req.len 0 }
                  

                  Da OpenVPN keinen Hello Type hat (kein HTTPS) aber die Request Länge größer 0 hat.
                  Oder man kann es sich noch einfacher machen und einfach alles als Default Backend zu OpenVPN schicken, was man nicht vorher mit ACLs abgegriffen und auf ein HTTP(S) Backend abgeworfen hat. Kommt ganz drauf an. Und klappt natürlich nur für OpenVPN Server mit TCP mode, nicht mit UDP ;)

                  [...]

                  ich glaube ich würde mich aktuell dann doch lieber erst mal mit diesem Thema befassen.
                  Leider ist mir noch nicht ganz klar wie ich...

                  • Hierbei einerseits das OpenVPN Backend zu konfigurieren habe (lauscht ja dann vermutlich auf 127.0.0.1 und einem definierten Port, z.B. default 1194?)...

                  • Wie ich die ACLs entsprechend konfiguriere...

                  • Ob ich ein weiteres Frontend zusätzlich zum allgem. HTTPS Frontend benötige?..

                  Würde da die GUI bevorzugen, wenn hierüber entsprechend konfigurierbar.

                  Danke.

                  1 Reply Last reply Reply Quote 0
                  • nonickN
                    nonick @viragomann
                    last edited by

                    @viragomann Das ganze funktioniert sehr gut und ist einfach umzusetzen, leider ist dann auf den Webservern und auch Matomo kein vernünftiges loggen möglich. Als IP-Adresse steht dann immer die angegebene 127.0.0.1 drin, da der OpenVPN Server die eigentliche Verbindung annimmt.

                    Gibt es eine Möglichkeit das die anfragende IP-Adresse zum HAProxy durchgereicht wird?

                    Netgate 6100

                    V 1 Reply Last reply Reply Quote 0
                    • V
                      viragomann @nonick
                      last edited by

                      @nonick
                      Ich verwende das nicht selbst. Ich hatte es mal entdeckt und auf meine Todo Liste fürs Heimnetz mit dem Präfix "vielleicht" gesetzt.
                      Mein Heim OpenVPN lauscht auf TCP 587, damit hatte ich bislang noch keine Probleme. Der Port sollte heutzutage zumeist erlaubt sein und zuhause brauche ich ihn nicht.

                      Gibt es eine Möglichkeit das die anfragende IP-Adresse zum HAProxy durchgereicht wird?

                      Das ist by-design von OpenVPN und muss so sein, damit das bedenkenlos funktioniert, wenngleich es sich auf der pfSense theoretisch auch anders lösen ließe.

                      Es gäbe nur die Möglichkeit, noch ein Verzeichnis mit anzugeben, in das OpenVPN dann temporäre Verbindungs-Logs mit den Quell-IPs u. -ports und Ziel-IPs u. -ports schreibt.
                      Diese müssten aber weggesichert werden, solange die Proxy-Verbindung besteht, weil sie beim Trennen gelöscht werden.
                      Siehe dazu: https://community.openvpn.net/openvpn/wiki/Openvpn24ManPage

                      nonickN 1 Reply Last reply Reply Quote 0
                      • nonickN
                        nonick @viragomann
                        last edited by

                        @viragomann Dachte ich mir schon, ist aber ist trotzdem schade. Irgendwas ist immer, vor allem wenn etwas einfach umzusetzen ist. Das ganze funktioniert ja überraschend gut, nur das die IP-Adressen von der anfragenden Quelle nicht an den HAProxy weitergereicht werden.

                        Netgate 6100

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post
                        Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.