Autor Thema: Nginx als Reverse Proxy mit websocket für FHEM  (Gelesen 16197 mal)

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22887
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #30 am: 04 April 2018, 09:43:29 »
Hallo Stefan,

Hast Du wirklich das ganze global Device in FHEM gelöscht oder habe ich Dich da falsch verstanden?
Das bitte nicht machen. Alles was du machen musst ist testen ob du normal auf FHEM kommst, also von innen. Wenn das geht stellst du den Reverse Proxy ein.

Unter server_name gehört der externe DNS Name, also genau so wie Du FHEM von aussen aufrufen tust.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline Karflyer

  • Full Member
  • ***
  • Beiträge: 134
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #31 am: 04 April 2018, 10:41:51 »
Hallo CoolTux,

nein, das hast du Missverstanden. Nicht das global-Device sonder der Zusatz im FHEMWEB. z.B. 'define WEB FHEMWEB 8083 global'.
Zu diesem 'global' steht im entsprechenden WIKI-Beitrag, dass man es mit dem aufsetzen des Reverse-Proxy entfernen soll.
Zitat aus dem WIKI https://wiki.fhem.de/wiki/HTTPS-Absicherung_%26_Authentifizierung_via_nginx_Webserver "In der FHEM-Konfiguration muss sichergestellt werden, dass kein Client außerhalb des Servers zugreifen kann. Dazu muss das normalerweise gesetzte Flag global von jeglicher Konfiguration entfernt werden." Wie ich geschrieben habe, wenn ich dieses 'global' entferne, habe ich keinen Zugriff mehr auf FHEM.

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22887
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #32 am: 04 April 2018, 10:46:37 »
Hallo CoolTux,

nein, das hast du Missverstanden. Nicht das global-Device sonder der Zusatz im FHEMWEB. z.B. 'define WEB FHEMWEB 8083 global'.
Zu diesem 'global' steht im entsprechenden WIKI-Beitrag, dass man es mit dem aufsetzen des Reverse-Proxy entfernen soll.
Zitat aus dem WIKI https://wiki.fhem.de/wiki/HTTPS-Absicherung_%26_Authentifizierung_via_nginx_Webserver "In der FHEM-Konfiguration muss sichergestellt werden, dass kein Client außerhalb des Servers zugreifen kann. Dazu muss das normalerweise gesetzte Flag global von jeglicher Konfiguration entfernt werden." Wie ich geschrieben habe, wenn ich dieses 'global' entferne, habe ich keinen Zugriff mehr auf FHEM.

Ok jetzt verstehe ich. Das ist etwas Missverständlich ausgedrückt. Allerdings hättest Du Dir nur mal die commandref zu FHEMWEB durchlesen brauchen. Wenn Du global löschst werden nur noch Verbindungsanfragen vom localhost angenommen. Das macht bei einem Reverse Proxy Sinn wenn dieser local auf dem FHEM Server läuft, was ja bei Dir nicht der Fall ist. Lese mal das hier bitte, dann verstehst Du bestimmt
http://commandref.fhem.de/commandref_DE.html#FHEMWEB
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline Karflyer

  • Full Member
  • ***
  • Beiträge: 134
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #33 am: 04 April 2018, 11:17:41 »
OK. Vielen Dank. Ich habe schon stundenlang gelesen. Aber wie sagt man so treffend 'manchmal sieht man vor lauter Bäumen den Wald nicht mehr  ;).
Kannst du mir bitte noch etwas zu meiner zweiten Frage sagen.
In der Konfigdatei zum Reverse-Proxy steht im Abschnitt 'server' der Eintrag server_name. Im WIKI-Beitrag beispielsweise 'server_name fhempi;'
server {

    listen 443;
    server_name fhempi;

Welcher Name ist hier einzutragen? Der vom Host auf dem NGINX läuft, oder der auf dem FHEM läuft oder der DynDNS-Domainname...
Mir ist nicht klar, wo dieser Eintrag zum tragen kommt.

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22887
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #34 am: 04 April 2018, 11:20:34 »
Unter server_name gehört der externe DNS Name, also genau so wie Du FHEM von aussen aufrufen tust.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline clickme

  • Newbie
  • Beiträge: 2
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #35 am: 25 April 2018, 19:41:21 »
Hallo,

ich habe hier mal meine SSL Conf des nginX. Diese Konfiguration schafft bei SSL Labs ein Rating von A+ - was das momentane maximum ist.

server {
    listen 80;
    return 301 https://$host$request_uri;
}

server {

    listen 443;
    server_name fhem.domain.com;

    ssl_certificate           /etc/letsencrypt/live/fhem.domain.com/fullchain.pem;
    ssl_certificate_key       /etc/letsencrypt/live/fhem.domain.com/privkey.pem;

    ssl on;
    ssl_session_cache  builtin:1000  shared:SSL:10m;
    ssl_session_timeout 10m;
    ssl_session_cache shared:SSL:10m;
    ssl_session_tickets off;
    ssl_dhparam /etc/ssl/dhparams_4096.pem;
    ssl_ecdh_curve secp384r1;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_protocols TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
    ssl_prefer_server_ciphers on;

    resolver 8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout 5s;

    add_header Public-Key-Pins 'pin-sha256="<PRIMÄREN PIN>"; pin-sha256="<BACKUP PIN>"; max-$
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
    add_header X-Frame-Options DENY;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection "1; mode=block";
    add_header X-Robots-Tag none;

    access_log            /var/log/nginx/fhem.access.log;

    location / {

      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;
      proxy_http_version      1.1;

      proxy_pass          http://localhost:8083;
      proxy_read_timeout  90;

      auth_basic "Restricted Content";
      auth_basic_user_file /etc/nginx/.htpasswd;
    }

Ausgang des ganzen war die Config hier aus dem Wiki - daher möchte ich es zurück geben. Die Unterscheidung nach Useragent brauche ich nicht.

Mir ist bewusst, dass die SSL Ciphers / SSL Protokolle sehr "streng" ausgedünnt sind, aber meine Apple Devices kommen damit gut zurecht. Für niemand anders ist die Seite ja ;)

Offline Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3660
  • ~ Challenging Innovation ~
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #36 am: 06 Juli 2018, 23:19:15 »
Zum Thema iOS wäre noch anzumerken, dass ein selbst signiertes Zertifikat nicht funktioniert. iOS verlangt für websocket ein valides Zertifikat, ansonsten wird eine Websocket Verbindung mit "OSStatus error -9807" abgelehnt.
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER
Informativ Informativ x 1 Liste anzeigen

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22887
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #37 am: 07 Juli 2018, 06:39:23 »
Kann man bei iOS wenigstens ein selbst erstelltes rootCA importieren?
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline Loredo

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3660
  • ~ Challenging Innovation ~
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #38 am: 07 Juli 2018, 09:35:08 »
Klar das geht :-)
Hat meine Arbeit dir geholfen? ⟹ https://paypal.me/pools/c/8gDLrIWrG9

Maintainer:
FHEM-Docker Image, https://github.com/fhem, Astro(Co-Maintainer), ENIGMA2, GEOFANCY, GUEST, HP1000, Installer, LaMetric2, MSG, msgConfig, npmjs, PET, PHTV, Pushover, RESIDENTS, ROOMMATE, search, THINKINGCLEANER
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline JoeALLb

  • Hero Member
  • *****
  • Beiträge: 1560
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #39 am: 09 Juli 2018, 14:08:46 »

ich habe hier mal meine SSL Conf des nginX. Diese Konfiguration schafft bei SSL Labs ein Rating von A+ - was das momentane maximum ist.


Servus Max,

in der Zeile
add_header Public-Key-Pins 'pin ..fehlt das schließende '. Dafür steht dort dein Loginname....

Bei Dir funktioniert soweit alles? Mei mir bleibt manchmal der Firefox hängen, während er Daten vom Websocket laden möchte...


sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

Offline der_oBi

  • Full Member
  • ***
  • Beiträge: 108
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #40 am: 26 Mai 2019, 14:35:45 »
Moin zusammen,

ich krame diesen Uralt-Thread mal wieder hervor.
Ich habe auch vor, mein FHEMWEB per nginx Reverse Proxy mit SSL abzusichern.
Ich verzweifle momentan aber daran, longpoll per Websocket zum Laufen zu bringen. Ich habe auch alle in diesem Thread beschriebenen Varianten mehrmals durchprobiert, ohne Erfolg.
Ohne den Umweg über nginx funktioniert Websocket prima.

Muss ich außer dem Paket nginx noch etwas installieren?
Das Ganze läuft übrigens auf einem Debian 9.5 (unter proxmox).

Wäre über Hilfe echt dankbar  :(

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 22887
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #41 am: 26 Mai 2019, 15:12:01 »
Das hier habe ich in meiner /etc/nginx/sites-enabled/fhem-reverseproxy damit funktioniert Websocket super.
Kann sein das ich noch was in die /etc/nginx/nginx.conf dazu habe, aber das weiß ich aktuell nicht mehr. Probier erstmal das.
Entferne aber Dinge die Du nicht brauchst. Sowas wie die Zertifikate oder ändere die Einträge. Ich habe vieles noch mit dazu genommen was die Verbindung sicherer machen soll.


server {

        listen 443 http2;
        listen [::]:443 http2;
        server_name fhem-xxx.xxx.net;

        # Add headers to serve security related headers
        # Before enabling Strict-Transport-Security headers please read into this
        # topic first.
        add_header Strict-Transport-Security "max-age=15768000";
        add_header X-Frame-Options SAMEORIGIN;
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;


        ssl_certificate           /etc/nginx/certs/fhemCert.pm;
        ssl_certificate_key       /etc/nginx/certs/fhemKey.pm;

        ssl on;
        ssl_session_cache  builtin:1000  shared:SSL:10m;
        ssl_session_timeout 10m;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;
        ssl_ecdh_curve secp384r1;
        ssl_stapling on;
        ssl_stapling_verify on;
        ssl_protocols TLSv1.2;
        ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers on;






        access_log            /var/log/nginx/fhem-reverseproxy/access.log;
        error_log             /var/log/nginx/fhem-reverseproxy/error.log;




        location / {

                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;
                proxy_http_version      1.1;

                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection $connection_upgrade;


                proxy_pass          http://fhem01.tuxnet.local:8083;
                #proxy_read_timeout  90;
                proxy_read_timeout  86400;
                proxy_buffering     off;

                auth_basic "Restricted Content";
                auth_basic_user_file /etc/nginx/.htpasswd;

                proxy_redirect      http://fhem01.tuxnet.local:8083 http://fhem-xxx.xxx.net;
        }
}
« Letzte Änderung: 26 Mai 2019, 18:33:35 von CoolTux »
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://paypal.me/pools/c/8gULisr9BT
FHEM GitHub: https://github.com/fhem/
kein Support für cfg Editierer

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4549
    • tech_LogBuch
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #42 am: 26 Mai 2019, 18:29:18 »
Ich habe gute Erfahrung mit dem Docker-Container linuxserver/letsencrypt
Dort befinden sich bereit weitgehend vorkonfigurierte nginx und certbot zum automatischen Abruf unf Aktualisierung von Letsencrypt-SSL-Zertifikaten (und noch paar nette Suchen mehr, wie z.B. fail2ban).

Damit laufen bei mir mehrere FHEM-Instanzen, NodeRed und Grafana hinter dem Reverse-Proxy.

Auf Wunsch kann ich die docker-compose-Datei und Proxy-Einstellungen für den FHEM gern bereitstellen.
In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z

Offline Wernieman

  • Hero Member
  • *****
  • Beiträge: 5672
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #43 am: 26 Mai 2019, 20:23:59 »
Wobei ich gestehen würde, das ich z.B. fail2ban nicht im gleichen Container laufen lassen würde. Ein Container sollte ein Dienst sein. NGINX + fail2ban aber eigentlich 2....
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Offline FunkOdyssey

  • Hero Member
  • *****
  • Beiträge: 1833
Antw:Nginx als Reverse Proxy mit websocket für FHEM
« Antwort #44 am: 26 Mai 2019, 21:06:22 »
Auf Wunsch kann ich die docker-compose-Datei und Proxy-Einstellungen für den FHEM gern bereitstellen.

Gerne ja. Deine Variante würde mich auch interessieren.