HowTo: FHEM – Zugang zur Konfigurationsoberfläche absichern

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.


Sicherheitshinweise

Ich weiß die folgenden Hinweise sind immer irgendwie lästig und wirken unnötig. Aber leider haben schon viele Menschen die es "besser" wussten aus Leichtsinnigkeit Augen, Finger oder anderes verloren bzw. sich verletzt. Im Vergleich dazu ist ein Datenverlust fast nicht der Rede Wert, aber auch diese können echt ärgerlich sein. Deswegen nehmt Euch bitte fünf Minuten Zeit um die Sicherheitshinweise zu lesen. Denn auch das coolste Projekt ist keine Verletzung oder anderen Ärger wert.
https://www.nerdiy.de/sicherheitshinweise/

Affiliatelinks/Werbelinks

Die hier in aufgeführten Links zu Online-Shops sind sogenannte Affiliate-Links. Wenn Du auf so einen Affiliate-Link klickst und über diesen Link einkaufst, bekommt Nerdiy.de von dem betreffenden Online-Shop oder Anbieter eine Provision. Für Dich verändert sich der Preis nicht. Falls Du Deine Einkäufe über diese Links tätigst unterstützt Du Nerdiy.de dabei auch in Zukunft weitere nützliche Projekte anbieten zu können. 🙂 


Voraussetzungen

Bevor ihr mit diesem Artikel startet solltet ihr den RaspberryPi soweit vorbereitet haben, dass dieser über das Netzwerk erreichbar und per SSH Steuerbar ist.

Die folgenden drei Artikel beschreiben was zu tun ist um den RaspberryPi soweit vorzubereiten:
RaspberryPi – Einrichten für Nerdiys!
RaspberryPi – Die Erste Konfiguration!
RaspberryPi – Den RaspberryPi über SSH steuern
FHEM – Installation auf dem RaspberryPi

Benötigte Werkzeuge:
-keins-

Benötigte Materialien:

In der folgenden Liste findet Ihr alle Teile die Ihr zur Umsetzung dieses Artikels benötigt.


Ä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 – Die Erste Konfiguration! beschrieben.


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 tollesPasswort durch Euer Passwort ersetzen.

Gebt zur Kodierung Eurer Login-Daten folgenden Befehl in die Konsole Eures RaspberryPi’s ein.
echo -n tollerBenutzername:tollesPasswort | 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 tollesPasswort 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 tollesPasswort


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.


Weiterführende Informationen

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

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


Viel Spaß mit dem Projekt

Ich hoffe bei euch hat alles wie beschrieben funktioniert. Falls nicht oder ihr Fragen oder Anregungen habt lasst es mich in den Kommentaren bitte wissen. Ich trage dies dann ggf. in den Artikel nach.
Auch Ideen für neue Projekte sind immer gerne willkommen. 🙂

P.S. Viele dieser Projekte - besonders die Hardwareprojekte - kosten viel Zeit und Geld. Natürlich mache ich das weil ich Spaß daran habe, aber wenn Du es cool findest, dass ich die Infos dazu mit Euch teile, würde ich mich über eine kleine Spende an die Kaffeekasse freuen. 🙂

Buy Me a Coffee at ko-fi.com       

Ein Kommentar

Kommentar hinterlassen

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.