Seite 1 von 1

Reverse Proxy LAN

Verfasst: Do Mär 18, 2021 3:20 pm
von loni78
Hallo zusammen,

ich würde gerne die openWB im internen Lan hinter einem ReverseProxy betreiben. Hat das schon jemand mal hinbekommen?

Grüße
Rafael

Re: Reverse Proxy LAN

Verfasst: Do Mär 18, 2021 8:13 pm
von mrinas
wird vermutlich schwierig, neben den reinen HTTP Aufrufen gibts auch Kommunikation via MQTT, das wird über den ReversePRoxy nicht klappen.

Was genau hast Du denn vor?

Re: Reverse Proxy LAN

Verfasst: Fr Mär 19, 2021 7:35 am
von yankee
loni78 hat geschrieben: Do Mär 18, 2021 3:20 pmich würde gerne die openWB im internen Lan hinter einem ReverseProxy betreiben. Hat das schon jemand mal hinbekommen?
Also ich habe zu Hause noch seperat einen kleinen SSH Server. Folgendes funktioniert:

Code: Alles auswählen

ssh user@myserver -D 5459
Dann im Browser SOCKS-Proxy auf localhost:5459 stellen, funktioniert alles.

Das hier funktioniert nicht so richtig:

Code: Alles auswählen

ssh user@myserver -L 5459:OPENWB_IP:80 -L 9001:OPENWB_IP:9001
Dann mit dem Browser auf http://localhost:5459. Also einmal auf Port 80 abgezielt für HTTP und einmal auf 9001 für websockets. Die Einstellungsseiten gehen alle, aber die Haupseite lädt nicht. "jQuery.Deferred exception: An invalid or illegal string was specified ClientImpl.prototype._doConnect@http://localhost:5459/openWB/web/js/mqttws31.js:916:23" kommt in der Konsole.

Es sagt leider nicht so genau warum. Ich vermute, dass openWB den Port nicht entfernt aus der URL und dann die MQTT-Adresse ohne Rücksicht darauf baut. Aber analysiert habe ich es nicht. Nimmt man jedoch:

Code: Alles auswählen

ssh user@myserver -L 80:OPENWB_IP:80 -L 9001:OPENWB_IP:9001
Und geht dann ohne Portangabe auf localhost, dann geht alles.

Ich vermute du denkst eher an einen "richtigen" reverse Proxy (Apache oder Squid oder so). Das sollte kein Problem sein. Warum nicht? Hast du denn shcon was ausprobiert?
mrinas hat geschrieben: Do Mär 18, 2021 8:13 pm wird vermutlich schwierig, neben den reinen HTTP Aufrufen gibts auch Kommunikation via MQTT, das wird über den ReversePRoxy nicht klappen.
MQTT geht in dem Fall über WebSockets und das kann auch ein ReverseProxy.

Re: Reverse Proxy LAN

Verfasst: Mo Nov 06, 2023 10:28 pm
von ralf22
Also ich hab das jetzt erfolgreich eingerichtet, Eckpunkte:
- Fritzbox Portforwarding nur ipv6
- ReverseProxy Nginx auf eigenem Raspi, dieser macht eine Client-Zertifikat-Validierung
- Eigene domain via dynv6.com ... update mit ddclient
- Letsencrypt Zertifikat für meine Domain
- Client-Zertifikat für die Authentifizierung generiert und auf dem iphone unter Device Management installiert

Die obigen Eckpunkte beschreibe ich jetzt nicht bzgl. der Einrichtung, da gibt es genügend Anleitungen im Netz, hier nur das Wichtigste:
- Fritzbox, reine Freigabe auf die ipv6-Adresse des Raspi für die Ports 80 (wegen letsencrypt), 443 (ssl) und 900 (ssl)
- ReverseProxy, siehe unten. Hier hab ich etwas gekniffelt, bis ich eine Konfiguration hatte die nur auf meinem Domain-Namen das Zertifikat verwendet und auch den WebSocket-Upgrade richtig macht. Wer sich beim Handshake nicht mit dem richtigen SNI meldet, bekommt nur ein Dummy-Zertifikat. Das ist ein Versuch der Verschleierung des Hostnames, falls nur jemand die IPv6 in die Hände bekommt. Mehr aber auch nicht, könnt ihr auch weglassen.
- wer will, dass das auch aus dem lokalen Netz aufrufbar ist muss in der Fritzbox bei DNS-Rebind die eigene Domain als Ausnahme eintragen

Hier die Konfiguration für /etc/nginx/sites-available/www.example.com:

Code: Alles auswählen

server {
        root /var/www/html;
        index index.html;
        listen [::]:443 ssl ipv6only=on; # managed by Certbot
        server_name www.example.com ; # managed by Certbot

        if ($host != www.example.com ) {
            return 404;
        }

        location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            try_files $uri $uri/ =404;
        }

        ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

        ssl_client_certificate /path/to/cert/ca.crt;  # Path to your CA certificate for validating clients
        ssl_verify_client optional;

        location /openWB/ {
                if ($ssl_client_verify != SUCCESS) {
                        return 403;
                }
                proxy_pass http://192.168.178.200/openWB/;
                proxy_http_version 1.1;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_set_header X-Forwarded-Proto $scheme;
    }
}

server {
        root /var/www/html;
        index index.html;
        listen [::]:9001 ssl ipv6only=on;
        server_name www.example.com ;

        if ($host != www.example.com ) {
            return 404;
        }

        ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; # managed by Certbot
        ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; # managed by Certbot
        include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
        ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

        ssl_client_certificate /path/to/cert/ca.crt;  # Path to your CA certificate
        ssl_verify_client optional;

        location / {
               if ($ssl_client_verify != SUCCESS) {
                       return 403;
                }
                proxy_pass http://192.168.178.200:9001;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
        }
}

# Default server block to reject all other domains
server {
        listen [::]:443 ssl default_server;
        listen [::]:9001 ssl default_server;
        server_name _;

        ssl_certificate /path/to/cert/default_dummy/dummy.crt;
        ssl_certificate_key /path/to/cert/default_dummy/dummy.key;

        return 444;
}

server {
        if ($host = www.example.com ) {
                return 301 https://$host$request_uri;
        } # managed by Certbot

        listen [::]:80 ;
        server_name www.example.com ;
        return 404; # managed by Certbot
}
Bin auf Feedback gespannt.

Re: Reverse Proxy LAN

Verfasst: Di Nov 07, 2023 6:36 am
von derNeueDet
Im Endeffekt baust du ein SSL VPN mit nem Client Zertifikat auf.

Die Einrichtung ist nicht trivial, ich hab das auch schon mal mut ner FHEM Instanz getestet, habs dann aber wieder zurück gebaut, da mir die Verteilung von Client Zertifikaten auf alle möglichen Clients zu aufwändig war.

IPSec VPN der Fritz Box hatte ich überall schnell eingerichtet. Und seit Wireguard ist das Handling ja noch einfacher und seit ein paar Wochen auch auf meiner "alten" 7490 verfügbar.

VG
Det

Re: Reverse Proxy LAN

Verfasst: Di Nov 07, 2023 6:42 am
von openWB
Schön gemacht, aber nicht trivial!
Dabei nicht vergessen das software2 derweil eine vollwertige Cloud hat.

Re: Reverse Proxy LAN

Verfasst: Sa Dez 09, 2023 7:22 pm
von aiole
openWB hat geschrieben: Di Nov 07, 2023 6:42 am Schön gemacht, aber nicht trivial!
Dabei nicht vergessen das software2 derweil eine vollwertige Cloud hat.
und das läuft richtig gut!