HowTo: FHEM - Securing access to the configuration interface

Spätestens nachdem Ihr die ersten Konfigurationen in Eurer FHEM-Oberfläche vorgenommen habt solltet Ihr euch auch mit dem Thema Sicherheit auseinandersetzen. Es ist nämlich wirklich ärgerlich, wenn Ihr die mühsam zusammengetragenen und fein säuberlich einprogrammierten Funktionen Eures SmartHome-Systems verliert. Sei es durch Datenverlust oder weil andere Personen unberechtigterweise Zugriff auf Euer System erlangt haben.

Gerade der potentielle Zugriff durch unberechtigte Personen sollte dabei nicht vernachlässigt werden. Im Worst Case lässt sich mit diesem Zugriff nämlich mehr Unfug anstellen als nur eine Lampe ein- und auszuschalten.

Wie Ihr eure FHEM-Instanz absichert und gegen Datenverlust schützen könnt, ist im folgenden Artikel erklärt.


Safety instructions

I know the following notes are always kind of annoying and seem unnecessary. Unfortunately, many people who knew "better" have lost eyes, fingers or other things due to carelessness or injured themselves. Data loss is almost negligible in comparison, but even these can be really annoying. Therefore, please take five minutes to read the safety instructions. Because even the coolest project is not worth injury or other trouble.
https://www.nerdiy.de/sicherheitshinweise/

Affiliate links/advertising links

The links to online shops listed here are so-called affiliate links. If you click on such an affiliate link and make a purchase via this link, Nerdiy.de will receive a commission from the relevant online shop or provider. The price does not change for you. If you make your purchases via these links, you support Nerdiy.de in being able to offer other useful projects in the future. 🙂 


Requirements

Before you start with this article you should have prepared the RaspberryPi so that it is accessible via the network and controllable via SSH.

The following three articles describe what needs to be done to prepare the RaspberryPi:
RaspberryPi – setup for nerdiys!
RaspberryPi – The first configuration!
RaspberryPi – Control the RaspberryPi via SSH
FHEM – Installation auf dem RaspberryPi

Tools needed:
-no-

Materials needed:

In the following list you will find all the parts you need to implement this article.


Ändern der eventuell vorhandenen (Standard-)Zugangspasswörter

Die wichtigste – weil am meisten ausgenutzte – Sicherheitsvorkehrung ist es eventuell vorhandene Standardpasswörter zu ändern. Verwendet Ihr als Host-Hardware für den FHEM-Server zum Beispiel einen RaspberryPi ist es wichtig, dass Ihr dessen Standard-Login-Daten ändert. Die Standard-Login-Daten “pi” und “raspberry” sind nämlich jeder halbwegs technikinteressierten Person bekannt. Solltet Ihr also hier gerade Eure RaspberryPi-Login-Daten gelesen haben, ist es höchste Zeit diese zu ändern.

Wie Ihr diese ändert ist im Artikel RaspberryPi – The first configuration! described.


HTACCESS-Benutzerlogin erstellen

Die nächste Sicherheitsvorkehrung gegen unberechtigten Zugriff auf eure FHEM Oberfläche ist der Zugriffsschutz per HTACCESS. Ist dieser erst mal eingerichtet werdet Ihr bei jedem Zugriffsversuch auf Eure FHEM Instanz aufgefordert die dazugehörigen Logindaten einzugeben.

Um diesen Zugriffscchutz einzurichten müsst Ihr zunächst Eure Benutzername/Passwort-Kombination per base64 kodieren. Dies funktioniert unter Linux mit einem integrierten Befehl. Um damit Eure Kombination aus Benutzername und Passwort zu kodieren nüsst ihr lediglich folgenden Befehl in die Konsole eingeben. Zuvor müsst Ihr natürlich tollerBenutzername durch Euren Benutzernamen und great password durch Euer Passwort ersetzen.

Gebt zur Kodierung Eurer Login-Daten folgenden Befehl in die Konsole Eures RaspberryPi’s ein.
echo -n greatusername:greatpassword | base64
Daraufhin erhaltet Ihr einen in base64 kodierten String Eurer Login-Daten. Diesen solltet Ihr kopieren um ihn später verwenden zu können.

Ohne Linux hilft ein Online Base64 Encoder wie www.base64online.com . Gebt dort einfach Eure Kombination aus Benutzername und Passwort nach dem Muster benutzername:passwort ein und klickt auf kodieren(DECODE).

Um den Login mit den eingestellten Login-Daten nun zu aktivieren müsst Ihr folgendes tun.

Zunächst müsst Ihr das Modul “allowedWEB” mit folgendem Befehl erstellen.
define allowedWEB allowed

Nun müsst Ihr Eure kopierten Login-Daten mit diesem Modul verknüpfen indem Ihr ein entsprechendes Attribut setzt. Dies geht mit folgendem Befehl.

attr allowedWEB basicAuth dG9sbGVyQmVudXR6ZXJuYW1lOnRvbGxlc1Bhc3N3b3J0
Im letzten Schritt müsst Ihr noch konfigurieren auf welchen Login-Oberflächen der Login abgefragt werden soll. In diesem Fall aktivieren wir die Login-Abfrage für “WEB”, “WEBPhone” und “WEBtablet” mit folgendem Befehl. Habt Ihr für die Login-Oberflächen andere Namen vergeben, muss dieser natürlich entsprechend angepasst werden.
attr allowedWEB validFor WEB,WEBphone,WEBtablet

Das war es auch schon. Startet FHEM nun noch mal neu indem Ihr folgendne Befehl eingebt

shutdown restart
Nun könnt Ihr den Login testen. Greift dazu erneut auf die URL Eurer FHEM-Instanz zu. Dieses mal sollte ein Login-Fenster erscheinen, dass Euch zur Eingabe der korrekten Login-Daten auffordert.
Gebt dort nun den zuvor festgelegten Benutzernamen und das Passwort ein.
Habt Ihr die korrekten Login-Daten eingegeben, solltet Ihr auf die Startseite Eurer FHEM-Instanz weitergeleitet werden. Eure Konfigurationsoberfläche ist also nun per Benutzername und Passwort zugriffsgeschützt.

Verbindung mit einem SSL-Zertifikat verschlüsseln

Nachdem Ihr nun den Zugriff auf Eure FHEM Oberfläche abgesichert habt, ist die nächste Sicherheitsvorkehrung dafür zu sorgen, dass Eure Kommunikation mit eben dieser weder abgehört noch manipuliert werden kann. Dazu wird nun eine SSL-Verschlüsselung der Kommunikationsdaten eingerichtet. Dazu muss zuerst ein SSL-Zertifikat erstellt und dann mit FHEM verbunden werden.

Um das SSL-Zertifikat zu erstellen, müsst Ihr zunächst zwei Pakete installieren. Führt dazu folgenden Befehl aus.
sudo apt-get install libio-socket-ssl-perl && sudo apt-get install libwww-perl
Während der Installation der Pakete werdet Ihr eventuell gefragt ob Ihr damit einverstanden seid, dass durch die Installation zusätzlicher Arbeitsspeicher belegt wird. Bestätigt dies mit einem “J” und “Enter”.
Nach der Installation der Pakete wechselt Ihr mit folgenden Befehl in den Ordner Eurer FHEM installation.
cd /opt/fhem
Dort wird mit folgendem Befehl der Ordner “certs” erstellt, in welchem dann die Zertifikate erstellt/gespeichert werden.
sudo mkdir certs
Wechselt nun in den soeben erstellten Ordner “certs”.
cd /opt/fhem/certs
Um nun das SSL-Zertifikat zu erstellen, müsst Ihr folgenden Befehl ausführen.
sudo openssl req -new -x509 -nodes -out server-cert.pem -days 3650 -keyout server-key.pem
Während das Zertifikat erstellt wird, werdet Ihr nach Details für dieses Zertifikat gefragt. Als erstes sollt Ihr hier zum Beispiel den CountryCode eingeben. Diese Eingaben müssen nicht der Wahrheit entsprechen. Ihr könnt Ihr also die korrekten Angeben machen oder…
… so wie abgebildet drei Bindestriche oder andere Zeichen als Platzhalter verwenden.
Mithilfe des folgenden Befehls bekommt das Zertifikat und …
sudo chmod 644 /opt/fhem/certs/*.pem
… der Zertifikatsordner noch die richtigen Dateirechte.
sudo chmod 711 /opt/fhem/certs
In den letzten beiden Schritten müsst Ihr nun noch HTTPS für das WEB-Modul aktivieren…
attr WEB HTTPS
…und FHEM neu starten, damit die Änderungen übernommen werden.
shutdown restart

Habt Ihr Euren FHEM-Server neu gestartet könnt Ihr fast wie gewohnt auf diesen Zugreifen. Der einzoge Unterschied ist, dass Ihr der Adresse zu Eurem FHEM-Server nun ein HTTPS voranstellen müsst.

Da Ihr dabei ein selbstsigniertes Zertifikat nutzt, werdet Ihr von fast allen Browser nun gewarnt und darauf hingewiesen. Im “normalen” Internet könnte dies nämlich ein Hinweis auf ein Datenleck sein. In diesem Fall müsst Ihr euch darüber aber keine Sorgen machen. Die Warnung könnt Ihr also umgehen. Klickt dazu auf “Erweitert”…
…klickt dann auf “Weiter zu ….(unsicher)” um die Warnung zu umgehen und auf Euren FHEM-Server zu zugreifen.
Wenn Ihr den Benutzerlogin aktiviert habt, werdet Ihr nun nach den Logindaten gefragt.
Ohne Benutzerlogin oder bei korrekter Eingabe der Logindaten landet Ihr dann wie gewohnt auf Eurer FHEM-Startseite.

Automatisches Backup vor jedem Update einstellen

Gegen die Gefahren durch böse Menschen und Maschinen seid Ihr nun größtenteils gut geschützt. Eine weitere sinnvolle Einstellung sind die automatischen Backups vor jedem update der FHEM-Umgebung. So seid ihr auch im Falle eines fehlerhaften Updates geschützt und müsst nicht die komplette Konfiguration manuell wiederherstellen.

Gebt dazu die folgende Befehle in die Kommandozeile Eurer FHEM-Instanz ein.
attr global updateInBackground 1
attr global backup_before_update 1

Telnet-Zugang absichern

FHEM bietet unter anderem Die Möglichkeit Befehel per Telnet-Verbindung auszuführen. Diese ist standardmäßig nicht installiert/aktiviert. Solltet Ihr diese jedoch nutzen ist es wichtig, dass Ihr auch hier den Zugriff durch ein Passwort schützt. Dies geht mit folgendem Befehl. Dabei müsst Ihr natürlich noch den Teil great password durch das von Euch gewählte Passwort ersetzen. Ggf. müsst Ihr hier auch den Teil “telnetPort” anpassen. Dies ist der Name Eures konfigurierten Telnet-Moduls und sollte mit dem von Euch genutzten Namen übereinstimmen.

attr telnetPort password great password


FHEM Sicherung

Gegen die Gefahren durch böse Menschen und Maschinen seid Ihr nun größtenteils gut geschützt. Nun müsst ihr Euch aber noch gegen den Größten Feind wappnen: Die eigene Duseligkeit. Gerade beim aus- und rumprobieren kann es nämlich schnell passieren, dass Ihr das bis gerade gut funktionierende System falsch konfiguriert. Ein nicht mehr startendes System ist im Fall der Fälle aber schnell wiederhergestellt. Vorausgesetzt ihr habt ein aktuelles Backup am besten noch auf einem externen Datenträger. So könnt Ihr ohne Probleme den letzten funktionierenden Stand zurückspielen.

define regularBackup at *03:00:00 backup

Mit dieser Einstellung wird täglich um 03:00 Uhr ein Backup erstellt und in dem Ordner /opt/fhem/backup abgelegt. Die hier abgelegten Dateien sollten dann natürlich auch mit einem anderen Laufwerk synchronisiert werden. Nur so sind sie im Falle eines Fehlers mit dem Laufwerk oder der SD-Karte auch gesichert.


Further information

https://de.wikipedia.org/wiki/Base64

https://wiki.fhem.de/wiki/Telnet


Have fun with the project

I hope everything worked as described for you. If not or you have questions or suggestions please let me know in the comments. I will then add this to the article if necessary.
Ideas for new projects are always welcome. 🙂

PS Many of these projects - especially the hardware projects - cost a lot of time and money. Of course I do this because I enjoy it, but if you think it's cool that I share the information with you, I would be happy about a small donation to the coffee fund. 🙂

Buy Me a Coffee at ko-fi.com       

One comment

Kommentar hinterlassen

Your email address will not be published. Erforderliche Felder sind mit * markiert


The reCAPTCHA verification period has expired. Please reload the page.