Externer Zugriff auf TabletUI

Begonnen von Superposchi, 11 Januar 2024, 09:04:21

Vorheriges Thema - Nächstes Thema

Superposchi

Jetzt da ich beim Einrichten meiner neuen Heizkörperventile immer wieder von extern auf die Fhem-Oberfläche zugreife, möchte ich die Komponenten auch gerne in meinem Tabletui einbinden. Grundsätzlich ist das eher kein Problem.

Doch wie bekomme ich den externen Zugriff auf mein TabletUI hin. Es wird zwar die Oberfläche wie Zu Hause angezeigt wenn ich mich mit Username und Passwort authentifiziere aber es werden keine Werte geladen. Irgendwo hat das TbaletUI da noch eine zusätzlich Sicherung zur Übermittlung auf die Daten an einen externen Browser.

Wie und Was fehlt?

Und bitte keine Hinweise wie unsicher das ist etc.. Mir ist das Risiko bewusst und ich möchte es einfach so. Also bitte auch keine Hinweise auf VPN oder andere Sicherungsverfahren.
Es geht nur um die Frage wie ich das FTUI wie ZuHause auf dem Tablet in einem Browser (inkl. der Daten und Einstellmöglichkeiten) angezeigt bekomme.

Superposchi

Schade, wirklich keiner eine Idee woran es liegen könnte.
Ich lese in den Toasts immer etwas von Token, finde aber bei Google keine Infos dazu.

Adimarantis

Hast du CSRF Tokens bei dir aktiviert? Ist jetzt das einzige was mir zum Stichwort "Token" einfällt.
Ich route den externen Zugriff auf FTUI zwar durch Nginx, aber das müsste es ja eher noch komplexer machen.
FHEMWEB ist bei mir aber eben auf csrfToken=none konfiguriert.

Auch wenn du schon explizit gesagt hast, du möchtest nix von VPN o.ä. hören - eine Nginx config ist kein Hexenwerk (ok, bisschen Aufwand ist es schon wenn du ein gültiges Zertifikat über "let's encrypt" etc. haben willst) und sichert dir die Sache mit User/PW ab.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Superposchi

Nicht das ich wüsste irgendwo was aktiviert zu haben. Könnte es eventuell umgekehrt sein, dass es standardmäßig aktiv ist und deaktiviert werden muss?
Wobei mir der Begriff CSRF aus dem Stehgreif nichts sagt, muss ich erst mal googlen.

Hab aber gerade mal kurz die Attribut-Beschreibung gelesen Dort steht das es standardmäßig aktiv ist. Hab es auf none gesetzt, doch leider hat es keinen Erfolg gebracht.
Habe aber mal die Toast-Meldungen als Screenshot gemacht. Vielleicht bringt das ja etwas Licht ins Dunkel.
Komisch ist halt auch, dass die FTUI-Oberfläche angezeigt wird, aber offenbar keine Werte der Elemente oder Schaltbefehle an Fhem.

Ich habe prinzipiell nichts gegen VPN etc..
Das Problem ist, dass ich von Berufswegen öfter mal wechselnde IT habe und nicht immer meine eigenen Gerät wie Handy erlaubt sind; ich aber immer und überall auf die Einstellungen Zugriff haben möchte. Ich bin also zu 70% oder mehr darauf angewiesen, dass ich irgendwas installieren müsste, was bei einem Fremdrechner halt oftmals nicht geht. Ich suche daher die Lösung, die unabhängig solcher Einschränkungen immer funktioniert, auch wenn ich dafür etwas im Thema Sicherheit einbüßen muss.

Adimarantis

Das schaut allerdings sehr seltsam aus. Sagt mir gar nichts.

Die Lösung mit Nginx ist geräteunabhängig. Ich habe zuhause auf meinem FHEM Raspi einen Nginx reverse proxy mit Zertifikat von "let's encrypt" installiert. Auf der Fritzbox dann ein port forwarding auf den Port den ich mit Nginx eingerichtet habe. Nginx validiert user/PW und leitet die Anfrage dann lokal an FHEM weiter, was sowohl mit FHEMWeb als auch mit FTUI sauber funktioniert.
Auf den Endgerät verbinde ich mir nur ganz normal per Browser mit diesem Port und einem per DynDNS festgelegten Hostnamen. Das geht von überall - Handy, FirmenVPN etc.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Wernieman

Gabe es bei mir auch so gelöst. Funktioniert gut .. habe aber kein TabletUI, greife nur direkt auf FHEM zu.

Mann sollte sich aber mit den Basics von NGINX auskennen .. man kann auch einiges falsch machen. Auf jedem falle Sicherer als direkter Zugriff von Außen.
- 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

Adimarantis

Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Superposchi

Hab die Anleitung erstmal überflogen.
Wenn ich das richtig verstehe wäre damit aber auch der externe Zugriff auf mein NAS, meine Dreamboxen und die Fritzbox über nginx "umgeleitet", richtig?

Frage ist auch ob das überhaupt bei meiner Konfiguration funktionieren würde, da bei mir ja alles auf einem NAS läuft und der Internetverkehr über einen virtuellen Switch läuft und das für die Fhem und Plex-Server eigene IP's im Netzwerk bereitstellt. Der direkte Zugriff per SSH ist da leider ziemlich eingeschränkt wodurch es zb auch beim ausführen von sudo-Befehlen Probleme gibt.

Wernieman

Es wird das "geproxied", was DU definiert. Analog wie wenn Du den apache als Proxy verwendest ....
- 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

Superposchi

Also so wie ich das verstanden habe erden die Ports 80 und 443 abgehört. Ports auf denen normalerweise ja jede http/https-Kommunikation läuft.
Also ist die Frage wo greift nginx dann ein? wenn ein Aufruf an der Fritzbox eingeht oder erst wenn einer Aufruf des Gerätes auf dem ngingx installiert ist erfolgt.

Apache ist für mich ein Webserver - nichts anderes. Soll heißen, in der Richtung bin ich raus mit meinem Wissen.

Wernieman

Apache und NGINX sind beide Webserver, welche auch als Proxy eingesetzt werden können. Natürlich bearbeiten Sie nur Packete auf Ihrem Host, bei denen der Port konfiguriert wurde.

Wenn Du dabei schon "draußen" bist, bitte vertiefe es nicht, da man bei der Konfig auch einiges falsch machen kann ... und dann hat man schnell einen offenen Proxy im I-Net definiert .... Bitte nicht falsch verstehen.
- 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

Superposchi

Genau deswegen habe ich mich bisher nicht damit beschäftigt. Ist mir viel zu kompliziert.
Ich bin Anwender mit ein wenig Programmierkenntnissen und nicht Programmierer.
Ändert aber nichts an dem Problem, dass ich von Extern auf meine Steuerung zugreifen will. Hab ja von Anfang an gesagt, dass ich eine einfache Möglichkeit bevorzuge.

Allerdings muss ich auch sagen, dass es für mich eine Zweckentfremdung ist. Die Aufgabe ist als Webserver zu funkgieren. Wenn es durch verbiegen und Missbrauch zu anderen Zwecken genutzt wird, muss man sich nicht wundern wenn das niemand ohne entsprechende Tiefenkenntnisse weiß/versteht.

Adimarantis

Bei mir sind mehrere FHEM Instanzen und auch andere Services wie Webcams über Nginx nach außen verfügbar gemacht und abgesichert. Ich versuche das zu skizzieren wie das abläuft:

In der Fritzbox habe ich unter Portfreigaben jedem Service eine eigenen Portnummer zugewiesen. Die muss nichts mit der tatsächlichen (also 80 oder 443) zu tun haben.
Dort erfolgt aber noch nicht die Zuordnung auf den tatsächlichen Service sondern auf den Server (Raspberry) auf dem Nginx läuft (das können auch andere Portnummern sein) und der leitet das (nach Passwortprüfung) dann weiter auf den finalen Server/Port

Also z.B.
Port 5001 -> Nginx-Server Port 5001 -> FHEMServer:8083
Port 5002 -> Nginx-Server Port 5002 -> Webcam:80

Du kannst also beliebig viele verschiedene Ports und Server bedienen.

In der Nginx Config reverse-proxy gibt es dann für jeden Service einen entsprechenden Eintrag, also z.B.
server {
    listen 5002;
    server_name webcam;

    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;
    auth_basic_user_file /etc/nginx/.htpasswd;
    proxy_pass http://192.168.1.63:80;
    proxy_set_header Authorization "Basic XXXXXXXXX";
    }
}
server {
    listen 5001 ssl;
    server_name fhempi;

  ssl_certificate /etc/letsencrypt/live/xxxx.de/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/xxxx.de/privkey.pem;
  ssl_session_timeout 1d;
  ssl_session_cache shared:SSL:50m;
  ssl_session_tickets off;
  ssl_protocols TLSv1.1 TLSv1.2;
  ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-EC
DSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256
:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AE
S256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES1
28-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!
MD5:!PSK';
  ssl_prefer_server_ciphers on;
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_trusted_certificate /etc/letsencrypt/live/xxxx.de/chain.pem;

    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_read_timeout  90;

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

      proxy_pass      http://192.168.1.65:8083;
    }
  }

Im Falle der Webcam übernimmt Nginx auch die Basic Authorization um sich bei der Webcam einzuloggen (das XXXXXXX ist das entsprechende kodierte user/pw).

Das hat jetzt mit Programmieren erstmal gar nichts zu tun und eine entsprechende Absicherung ist wirklich anzuraten - offene Ports die direkt auf deine System weitergeleitet werden sind eine Einladung an Hacker die ständig mit Portscans alle IPs durchforsten um ein Einfallstor zu finden.
Raspberry 4 + HM-MOD-RPI-PCB (pivCCU) + RfxTrx433XL + 2xRaspberry 1
Module: 50_Signalbot, 52_I2C_ADS1x1x , 58_RPI_1Wire, (50_SPI_MAX31865)

Wernieman

ZitatIch bin Anwender .... Extern auf meine Steuerung zugreifen will .... einfache Möglichkeit bevorzuge.

Sorry aber einfach und (nicht von Dir gesagt) sicher gibt es nicht zusammen.

Zitat... durch verbiegen und Missbrauch ...

Nein, es ist Normale Definition laut Doku der Produkte. nginx wird z.B. auch gerne bei Proxylösungen für Docker verwendet.

Richtige dafür optimierte Produkte währen haproxy, Squit u.Ä., welche hier für aber Overzised sind.

Du schriebst oben: In Fremden Umgebungen unterwegs. Wenn ich Dein Kunde wäre und sehen würde, das Du aus einer Sicheren Umgebung auf Deine Homeautomatisation zugreifst, hättest Du ein Problem. Da würde (ich persönlich) lieber ein VPN im Handy und das Handy nutzen. In der Umgebung dann eben kein Zugriff auf Home-System.

Wie schon gesagt, es gibt KEINE Einfache und Sichere Lösung für "Dummys" ohne Vorkenntnisse.
(Hinweis: "Dummy" ist nicht beleidigend sondern nur als Kategorisierung gemeint)

P.S. Hatten Wir diese Diskussionen nicht schon mehrfach?
- 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

Superposchi

ZitatWie schon gesagt, es gibt KEINE Einfache und Sichere Lösung für "Dummys" ohne Vorkenntnisse.
P.S. Hatten Wir diese Diskussionen nicht schon mehrfach?
Ja, weil immer und immer wieder von dir/euch das Thema Sicherheit ins Spiel gebracht wird.
Ich sags mal so, mir ist die Sicherheit scheiß egal, ich will nur den Zugriff ermöglichen. Und das habe ich auch mehrfach so kommuniziert denke ich.
Doch irgendwie schaffen die Antworten immer und immer wieder ins Thema Sicherheit abzuschweifen. Wenn ich aber keine externe Bedienung hinbekomme, brauche ich erst gar keine Sicherheit.