fhem.js - Hilfe: Zugriff mit Dyn-DNS und letsencrypt-Zertifikat

Begonnen von Werner Schäffer, 17 Dezember 2016, 17:47:21

Vorheriges Thema - Nächstes Thema

Werner Schäffer

Diese kleine Doku zeigt wie man mit einer DYN-DNS und einem Letsencrypt-Zertifikat verschlüsselt auf FHEM und auf fhem.js aus dem Internet zugreifen kann. Zu fhem.js siehe:  (https://forum.fhem.de/index.php/topic,33755.0.html)

Voraussetzung für die folgende Konfiguration ist dass sowohl nginx als auch letsencrypt bereits installiert sind und nginx als Service eingerichtet ist. Google weiß mehr darüber, falls es da Probleme gibt.

In diesem Beispiel wird davon ausgegangen, dass FHEM, fhem.js, nginx und letsencrypt alle auf demselben Server installiert sind und laufen.

Außerdem ist natürlich eine Dynamische DNS Adresse notwendig. Diese Adresse wird in diesem Text und in den Beispieldateien bezeichnet als
yourname.dyndns-provider.tld

Step 1:
definiere FHEM Web auf Port 8083 (ist der Default)
kein SSL, kein global, aber Passwort definieren (PW kann bei Bedarf auch an nginx delegiert werden, aber nicht in diesem Beispiel)

Step 2:
definiere in params.js von fhem.js (im Ordner /etc/fhem.js):
    exports.nodePort = 8086;
    exports.useSSL = false;
    exports.useClientPassword = true;


fhem.js Server neu starten

Step 3:
Lade die folgende Datei herunter:
https://wernerschaeffer.de/packages/fhem-nginx-letsencrypt.zip
Entpacke diese Datei in ein Temp oder Downloadverzeichnis.

Step 4:
In den entpackten Dateien ersetze yourname.dyndns-provider.tld durch den tatsächlichen Dyn-DNS-Namen.
Außerdem müssen in dem File localnet noch die richtigen IP-Adressen eingetragen werden. Siehe Kommentar in dem File.

Step 5:
Die angepassten Dateien müssen jetzt wie folgt verteilt werden:
    cp cli.ini /etc/letsencrypt
    cp myletsencrypt.sh /usr/local/bin
    cp ssl.conf /etc/nginx/conf.d
    cp localnet /etc/nginx/conf/sites-available
    cp yourname.dyndns-provider.tld /etc/nginx/conf/sites-available

Step 6:
    cd /etc/nginx/conf/sites-enabled
    ln -s ../sites-available/localnet localnet
    ln -s ../sites-available/yourname.dyndns-provider.tld yourname.dyndns-provider.tld


Step 7:
Anlegen Auth-Verzeichnis für letsencrypt:
    mkdir -p /etc/letsencrypt/webrootauth/.well-known
    chmod -r 777 /etc/letsencrypt/webrootauth

Step 8:
Auf dem Internet-Router müssen folgende Portweiterleitungen auf den FHEM/fhem.js Server gemacht werden:
    8082 -> 8083 (FHEM SSL)
    8086 -> 8087 (fhem.js SSL)
    80 -> 80 (letsencrypt Auth)


Step 9:
Zertifikate anfordern mit:
    myletsencrypt.sh

Step 10:
Einen Cronjob einrichten der mit /usr/local/bin/myletsencrypt.sh alle zwei Monate ein neues Zertifikat beantragt, da Letsencrypt-Zertifikate nur drei Monate gültig sind.
z.B. so:
26 4 17 1,3,5,7,9,11 * /usr/local/bin/myletsencrypt.sh > /var/log/myletsencrypt

Step 11:
nginx (neu)starten:
    service nginx restart

Ist alles sauber durchgelaufen sind folgende Ports verfügbar für FHEM:
8081 = Port für den Zugang auf FHEM im Heimnetz (http://netaddr.xxx:8081/fhem)
8082 = Port für den https-Zugang auf FHEM von überall (https://yourname.dyndns-provider.tld:8082/fhem)

Außerdem sind folgende Ports verfügbar für fhem.js:
8086 = Port für den Zugang auf fhem.js im Heimnetz (z.B. bei FHEMswitch: http://netaddr.xxx:8086)
8087 = Port für den SSL-Zugang auf fhem.js von überall (z.B. bei FHEMswitch: https://yourname.dyndns-provider.tld:8087)

Nachtrag:
Falls man im lokalen Netz einen DNS-Server für seine Hosts hat, kann bei obigen Beispielen im lokalen Netz statt der IP-Adresse auch diese lokalen DNS-Namen benutzen. Die Fritz!Box liefert z.B. DNS-Namen in der Form xyz.fritz.box. (am Rande bemerkt: dies kann aber auch zu Problemen führen, da seit Neuestem "box" eine offizielle TLD ist.)



raimundl

Zitat von: Werner Schäffer am 17 Dezember 2016, 17:47:21
kein SSL, kein global, aber Passwort definieren (PW kann bei Bedarf auch an nginx delegiert werden, aber nicht in diesem Beispiel)

Hallo Werner!

Was ist mit "kein global" gemeint?

LG

PS.: 3.0.5: hat ein Problem beim Speichern der Widgets
Homematic: Licht, Heizung, Alarm, Alexa ... auf einen RaspberryPi3+mit OS "Stretch" und RPI-RF-MOD mit piVCCU3 (HMCCU), ca. 40 HM Komponenten, alexa, MobileAlerts, Hue Ledstripes....

Werner Schäffer

bei der Definition eines Webzugangs im Fhem kann man global angeben oder nicht - global meint jeder kann die Website aufrufen, lässt man es weg kann nur localhost die Website aufrufen. Dies ist auch der Zweck in dieser Konfiguration: fhem lässt nur localhost zu und nginx schützt vor der bösen weiten Welt.

Damit nicht alles durcheinander gerät bitte Problem zu FHEMswitch in dem entsprechenden Thread schreiben. Also bitte, bitte nochmals dort warum das Speichern ein Problem ist? Schön wäre eine Beschereibung was passiert.

xobd

Die Datei von Step 3 gibt es nicht mehr zum Download. Wo bekomme ich sie jetzt her?
FHEM 5.8 auf Raspberry 3
CUL 868 (1.62) / MAX Cube 868 (V 1.24.01 a-culfw Build 204) / MAX! / Z-Wave / FRITZ!DECT 200

Werner Schäffer

Zitat von: xobd am 08 November 2017, 03:30:55
Die Datei von Step 3 gibt es nicht mehr zum Download. Wo bekomme ich sie jetzt her?

Die Datei ist jetzt wieder verfügbar