FHEM absichern – Clever mit Rev3rse Proxy

August 21, 2020
FHEM absichern
FHEM Absicherung

FHEM absichern ist sehr wichtig egal ob Sie auf die FHEM Oberfläche intern (Heimnetzwerk) oder von außen (Internet) zugreifen. Die Weboberfläche müssen Sie mit Benutzername und Password absichern. So ist jeder Zugriff auf die FHEM Oberfläche mit Browser, Smartphone oder Tablett gesichert. Dazu muss der Benutzername und das Kennwort Base64 codiert werden. Unter Raspberry Pi OS muss folgendes im Terminal eingegeben werden:

FHEM Webzugriff absichern

echo -n benutzername:passwort | base64

Das Ergebnis ist in Form YmVudXR6ZXJuYW1lOnBhc3N3b3J0, dann müssen Sie diese Zeichenkette in die FHEM Befehlsleiste eingeben. Einfacher geht auch mit online Encoder unter base64encode.

attr WEB basicAuth YmVudXR6ZXJuYW1lOnBhc3N3b3J0
####################################################
attr WEBphone basicAuth YmVudXR6ZXJuYW1lOnBhc3N3b3J0
####################################################
attr WEBtablet basicAuth YmVudXR6ZXJuYW1lOnBhc3N3b3J0
####################################################
mit "Save" speichern und "shutdown restart" ausführen


FHEM absichern mit Reverse Proxy

Der Reverse Proxy holt Ressourcen für einen externen Client (Zugriff z.B. von Außen) von einem oder mehreren internen Servern. Die wahre Adresse des internen Zielsystems bleibt dem externen Client verborgen. Das unterscheidet ihn vom typischen Proxy, der mehreren Clients eines internen (in sich abgeschlossenen) Netzes den Zugriff auf ein externes Netz gewährt (Auszug Wikipedia).

Was wollen wir damit genau tun:

  • Apache Server installieren.
  • Reverse Proxy einrichten.
  • DynDNS einrichten und Zugriff über Internet mit eindeutigen Namen sichern, unabhängig davon ob sie die IP Adresse von DSL Anschluss geändert hat (zum Beispiel https://myfhem.dyndns.info).
  • Letsencrypt Zertifikat installieren, so ist SSL Zugriff von Außen zertifiziert und keine Browser oder App macht uns Probleme.

Apache Server installieren

Bevor Sie anfangen, sollten Sie ihren Raspberry Pi auf den neusten stand bringen. Das erledigen Sie über das Terminal (Windows Benutzer mit Putty SSH Client) mit folgenden Befehlen:

sudo apt-get update
sudo apt-get upgrade

Jetzt installieren wir Apache 2 Webserver.

sudo apt install apache2
#########################
Als nächstes werden die benötigten Rechte angelegt.
#########################
sudo chown -R www-data:www-data /var/www/html/
sudo chmod -R 770 /var/www/html/

Jetzt ist schon möglich Apache Webserver zu testen, er meldet sich unter: http://Raspberry Pi IP Adresse.

Apache2 Webserver
Apache 2 Startseite

FHEM absichern mit Reverse Proxy

Unter Raspberry Pi OS wird das Proxy Modul direkt mit der Installation des Apache Webserver mit installiert. Verwendet man eine andere Distribution muss dieses entsprechend nachinstalliert werden. Jetzt aktivieren wir Proxy Modul mit:

sudo a2enmod proxy proxy_http
#######################################
Wenn nicht vorhanden installieren mit:
#######################################
sudo apt-get install libapache2-mod-proxy-html

Als nächstes legt man und aktiviert eine default Konfigurationen für das Proxy Modul an.

sudo nano /etc/apache2/conf-available/proxy_default.conf
#########################################
Tragen wir ein:
#########################################
<IfModule mod_proxy.c>
  ProxyRequests Off
  <Proxy *>
    Order deny,allow
    Allow from all
  </Proxy>
</IfModule>
##########################################
Diese Konfiguration wird jetzt aktiviert.
##########################################
sudo a2enconf proxy_default

Eine neue Konfigurationsdatei fhem.conf anlegen und aktivieren:

sudo nano /etc/apache2/conf-available/fhem.conf
##################################
Tragen wir ein:
##################################
<IfModule mod_proxy.c>
  <Location /fhem>
    ProxyPass http://localhost:8083/fhem
    ProxyPassReverse http://localhost:8083/fhem
  </Location>
</IfModule>
##################################
Aktivieren mit:
##################################
sudo a2enconf fhem
##################################
Apache Webserver neustarten
##################################
sudo service apache2 restart

FHEM absichern DynDNS einrichten

Bis jetzt haben wir die FHEM Oberfläche mit Benutzername und Passwort gesichert, Apache Webserver installiert und FHEM absichern mit Reverse Proxy durchgeführt. Bleibt uns DynDNS und Letsencrypt einrichten. Zuerst geht weiter mit DynDNS, hier ist eine Liste mit verschiedenen Anbieter. Einfach gewünschte Anbieter (unsere Empfehlung spdyn.de) auswählen und automatische DynDNS Aktualisierung gemäß Anbieter Anleitung durchführen.

Fritzbox DynDNS
Fritzbox DynDNS

Der beste Weg geht über die Fritzbox selbst, denn AVM bietet DynDNS unter dem Namen MyFritz an. Das ist zuverlässig, aber nicht jeder hat Fritzbox und andere möchte die AVM eigene Angebot für DynDNS nicht nutzen.

FHEM absichern mit Letsencrypt

Die Letsencrypt Zertifikate sind kostenlos. Der Anbieter hat die Beantragung automatisiert. Die Zertifikate ist nur 3 Monate gültig, was jedoch kein Problem ist, weil wir automatisch und rechtzeitig Zertifikat verlängern. Es muss auf Raspberry Pi ein Certbot installiert werden, der diese Aufgabe übernimmt. Bevor wir starten, stoppen wir Apache Server und am Router öffnen wir Port 80 und 443.

Fritzbox Portfreigabe
Fritzbox Portfreigabe
sudo service apache2 stop
sudo apt-get update
sudo apt-get install git
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --verbose --apache -d <domainname>

Mit Cron automatisieren wir Letsencrypt Zertifikat- Verlängerung.

sudo crontab -e
####################
Verlängerung immer am 01. jeder 2 Monat um 4:00
####################
* 4 1 1/2 *  /home/pi/letsencrypt/letsencrypt-auto renew

Starten wir Apache Server wieder mit sudo service apache2 start. FHEM ist jetzt unter: https://meine DynDNS/fhem erreichbar.

Wir haben dir mit “FHEM absichern – Clever mit Rev3rse Proxy” Artikel weitergeholfen? Dann zeig dich erkenntlich und gib uns Daumen hoch. Vielen Dank schon mal!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.