OPNsense Forum

International Forums => German - Deutsch => Topic started by: vita on April 29, 2017, 02:46:47 pm

Title: Reverse Proxy mit HAProxy-Plugin
Post by: vita on April 29, 2017, 02:46:47 pm
Hallo Forum,

ich versuche mich gerade daran OPNsense für mein privates Netzwerk einzurichten und komme auch ziemlich gut voran. Interfaces, VLANs, DNS, DHCP, OpenVPN, Squid und das LetsEncrypt-Plugin konnte ich konfigurieren - das funktioniert soweit :)

Was mir aktuell noch fehlt ist ein Reverse Proxy. Laut den Hinweisen/Empfehlungen hier im Forum soll man hierfür das HAProxy-Plugin verwenden. Leider scheitere ich aufgrund der umfangreichen Konfigurationsmöglichkeiten daran das Plugin für mich richtig einzustellen.

Kann mir bitte jemand unter die Arme greifen und grob die Schritte nennen die auszuführen sind um folgende Anforderung umzusetzen?

Ich möchte das alle eingehenden WAN-Anfragen betreffend HTTP/HTTPS an den Reverse Proxy umgeleitet werden. Der Proxy soll dann, wie bei den Squid Peer Mappings, anhand der aufgerufenen URL die Anfragen an einen bestimmten Webserver im LAN weiterleiten.

Danke & Gruß,
vita
Title: Re: Reverse Proxy mit HAProxy-Plugin
Post by: pingus on May 02, 2017, 01:54:05 pm
Hi vita

Mit dem Problem habe ich mich auch schon herumgeschlagen. Keine Ahnung ob das so korrekt ist, zumindest funktioniert es so  ;D ) Schau dir dazu auch die bereits eingetragene ACL und Action von ACME (Lets Encrypt) an.

Als erstes erstellst du die Server. Anschliessend die entsprechenden Backends mit den vorher erstellten Servern.

Jetzt habe ich ACL's erstellt. Ffür jede Domain eine für SSL und wenn nötigt eine ACL für nonSSL.
Ausgefüllt habe ich jeweils den Namen für die ACL, Expression (SNI TLS extension matches für SSL / Host matches für nonSSL) und beim Value den Hostnamen (www.example.com).

Danach Actions einrichten, für jede URL eine. Darin definiert: Name, Test type:IF (default), Logical operator: OR, Choose action: Use Backend, Use Backend: das entsprechende Backend auswählen.

Jetzt ein Frontend für SSL und eines für nonSSL erstellen. Bei Listen Addresses habe ich jeweils *.80 und *.443 genommen. Type SSL / HTTPS oder HTTP / HTTPS. Wenn du möchtest ein default Backend auswählen. Die benötigten Zertifikate hinzufügen und dann unter Actions alle Actions hinzufügen.

Mit den Actions definierst du, zu welchem Backend das Frontend die Anfrage schickt. Für SSL muss man das mit SNI TLS extension lösen, bei nonSSL kann man das einfach über den Hostnamen lösen.

>> Bitte korrigiert mich, wenn ich hier etwas falsches Konfiguriert habe oder man das besser lösen kann!
Title: Re: Reverse Proxy mit HAProxy-Plugin
Post by: vita on May 06, 2017, 05:55:44 pm
Danke für Deine Hilfe pingus :)

Ich bin Deinen Anweisungen gefolgt und konnte zuerst den HAProxy Dienst nicht starten. Der Fehler hierbei war, das ich bei der Frontend Listen Address das "*:443" zu wörtlich genommen habe. Hier muss scheinbar neben dem Port eine vollständige Adresse eingetragen werden. Ich habe nun "127.0.0.1:443" eingetragen und per NAT-Regel 443/TCP auf den lokalen Port 443, auf dem der HAProxy lauscht (siehe sockstat-Ausgabe), umgeleitet.

NAT-Regel
Code: [Select]
WAN TCP * * WAN address 443 (HTTPS) 127.0.0.1 443 (HTTPS)   

FW-Regel
Code: [Select]
IPv4 TCP * * 127.0.0.1 443 (HTTPS) * NAT   

Code: [Select]
sockstat | grep haproxy
www      haproxy    17125 4  dgram  -> /var/run/log
www      haproxy    17125 5  stream /var/run/configd.socket
www      haproxy    17125 6  stream /var/run/configd.socket
www      haproxy    17125 9  stream /var/run/haproxy.socket.16847.tmp
www      haproxy    17125 10 tcp4   127.0.0.1:80          *:*
www      haproxy    17125 11 dgram  (not connected)
www      haproxy    17125 12 tcp4   127.0.0.1:443         *:*
root     syslogd    22806 6  dgram  /var/haproxy/var/run/log


Der HAProxy läuft nun aber meine Seite (Nextcloud-Installation) ist von außen nicht erreichbar. Nach ca. 30 Sekunden gibt es einen Timeout/Reject. Im Firewall Log tauchen keine Meldungen auf, im HAProxy Log hingegen schon. Dort sehe ich mehrmals die Zeile:

Code: [Select]
haproxy[17125]: 80.187.xxx.xxx:6768 [06/May/2017:17:48:51.735] nc_ssl nc_ssl/<NOSRV> -1/-1/-1/-1/14 400 187 - - PR-- 0/0/0/0/0 0/0 "<BADREQ>"
Hier noch meine HAProxy Config:
Code: [Select]
cat /usr/local/etc/haproxy.conf
#
# Automatically generated configuration.
# Do not edit this file manually.






global
    # NOTE: Could be a security issue, but required for some feature.
    uid                         80
    gid                         80
    chroot                      /var/haproxy
    daemon
    stats                       socket /var/run/haproxy.socket level admin
    nbproc                      1
    tune.ssl.default-dh-param   1024
    spread-checks               0
    tune.chksize                16384
    tune.bufsize                16384
    tune.lua.maxmem             0
    log /var/run/log local0 info


defaults
    log     global
    option redispatch -1
    timeout client 30s
    timeout connect 30s
    timeout server 30s
    retries 3


# Frontend: nc ()
frontend nc
    bind 127.0.0.1:80 name 127.0.0.1:80
    mode http
    option http-keep-alive
    default_backend nc
    # tuning options
    timeout client 30s
    # logging options
    option httplog
    # ACL: nc
    acl acl_590db1ef08fa94.67054859 hdr(host) -i www.example.com
    # ACTION: nc
    use_backend nc if acl_590db1ef08fa94.67054859

# Frontend: nc_ssl ()
frontend nc_ssl
    bind 127.0.0.1:443 name 127.0.0.1:443
    mode http
    option http-keep-alive
    default_backend nc_ssl
    # tuning options
    timeout client 30s
    # logging options
    option httplog
    # ACL: nc_ssl
    acl acl_590db1b706db30.36331514 req.ssl_sni -i www.example.com
    # ACTION: nc_ssl
    use_backend nc_ssl if acl_590db1b706db30.36331514



# Backend: acme_challenge_backend (Added by Let's Encrypt plugin)
backend acme_challenge_backend
    # health checking is DISABLED
    mode http
    balance source
    # stickiness
    stick-table type ip size 50k expire 30m
    stick on src
    # tuning options
    timeout connect 30s
    timeout server 30s
    server acme_challenge_host 127.0.0.1:43580

# Backend: nc_ssl ()
backend nc_ssl
    # health checking is DISABLED
    mode http
    balance source
    # stickiness
    stick-table type ip size 50k expire 30m
    stick on src
    # tuning options
    timeout connect 30s
    timeout server 30s
    server nc_ssl 10.254.80.215:443 ssl verify none

# Backend: nc ()
backend nc
    # health checking is DISABLED
    mode http
    balance source
    # stickiness
    stick-table type ip size 50k expire 30m
    stick on src
    # tuning options
    timeout connect 30s
    timeout server 30s
    server nc 10.254.80.215:80



# statistics are DISABLED
Title: Re: Reverse Proxy mit HAProxy-Plugin
Post by: pingus on June 06, 2017, 03:08:58 pm
Bei mir funktioniert es meistens, habe aber mit der Nextcloud dahinter auch immer wieder timeouts ...
So ganz rund läuft die Sense leider noch nicht aber da es nicht meine Hauptfirewall ist, kann ich ein paar Unzulänglichkeiten verschmerzen.
Title: Re: Reverse Proxy mit HAProxy-Plugin
Post by: Mathias on December 04, 2017, 07:53:21 am
Hallo,

ich wollte am Wochenende genau das selbe bei mir einrichten. Leider funktioniert es bei mir nicht, ich lade immer auf dem selben Server. Den zweiten Server den ich eingerichtet habe, erreiche ich nicht. Kann mir jemand von euch helfen, wenn ich die Config oder Bilder poste?
Title: Re: Reverse Proxy mit HAProxy-Plugin
Post by: docb on April 22, 2018, 01:42:43 pm
Hi, hat jemand schon das Problem lösen können? Bei mir ist es genau das gleiche - die Anmeldeoberfläche erscheint, aber nach 30 Sekunden ist timout...
Viele Grüße
doc

PS: wenn ich mich ohne HaProxy im LAN direkt auf dem Server anmelde, funktioniert alles einwandfrei. Auch meine anderen Anwendungen laufen über HaProxy einwandfrei. Im Log von HaProxy habe ich noch diesen Hinweis gefunden: Connection closed during SSL handshake
Macht da nextcloud irgendetwas anders? Denn meine anderen Anwendungen von außen laufen auf das gleiche Apache Backend mit dem gleichen lokalen SSL-Zertifikat, aber da gibt es keine Probleme.
Title: Re: Reverse Proxy mit HAProxy-Plugin
Post by: Nephiria on April 23, 2018, 01:00:17 pm
Sorry wenn ich nochmals nachfrage weil bin die Beiträge nur überflogen.
Willst du über den Reverse Proxy nur einen normalen Webserver darüber betreiben oder z.b das Webinterface vom Exchange Server?

Bei zweiteren kann ich Dir die Anleitung empfehlen dazu.

https://www.frankysweb.de/exchange-2016-opnsense-haproxy-und-lets-encrypt/

Hier wird das meiste dazu erklärt.

Viele Grüsse
Title: Re: Reverse Proxy mit HAProxy-Plugin
Post by: docb on April 23, 2018, 01:09:41 pm
Hi,
das hatte ich auch schon durchgearbeitet ;-)
Im Endeffekt will ich einfach Nextcloud über den Proxy betreiben. Aber mir geht es wie den anderen - mal geht es, mal nicht. Da es seit heute früh wieder funktioniert, bin ich glücklich  :D
Title: Re: Reverse Proxy mit HAProxy-Plugin
Post by: Nephiria on April 23, 2018, 01:30:46 pm
Ok weil ich kann bisher nur sagen das ich über HAProxy mit Lets Encrypt seit Monaten in den verschiedensten Software Releases OPNsense 17.x - 18.x mein Exchange OWA, Activesync darüber am laufen habe.

Bisher konnte ich das nicht feststellen das es nicht lief.
Nextcloud habe ich nicht laufen bei mir weil ich es einfach bisher nicht benötigt habe.

Aber vom Prinzip sollte es sich von meiner Config nicht all zu weit entfernen mit deiner Konfiguration.
Das einzige was ich festgestellt habe ist das Letsencrypt manchmal ein wenig doof tut wenn es darum geht das Zertifikate verlängert werden müssen und dort auch nicht vergessen nachdem ein Zertifikat erneuert wurde den Webserver vom HAProxy zu reloaden das kann man automatisieren über die Restart Funktion des Gui.

Viele Grüsse
Title: Re: Reverse Proxy mit HAProxy-Plugin
Post by: BeNe on April 23, 2018, 08:50:17 pm
Ich nutze HAProxy mit Let´s Encrypt für verschiedene Webservice, Nextcloud ist da auch dabei.
Habe es bei mir daheim mit einem DynDNS Dienst und einer IP-Adresse am laufen.
Ein Timeout habe ich bis jetzt nicht feststellen können. Funktioniert wie es soll.

Wie kann ich euch am besten an Ziel helfen ?
Title: Re: Reverse Proxy mit HAProxy-Plugin
Post by: docb on April 25, 2018, 08:01:39 pm
Tja, nachdem mein Nextcloud jetzt gerade ohne Schluckauf funktioniert bin ich wunschlos glücklich ;-)
Aber Danke der Nachfrage, wenn es wieder spinnt, melde ich mich!
Viele Grüße!