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.

echo -n greatusername:greatpassword | base64

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.

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

attr allowedWEB validFor WEB,WEBphone,WEBtablet
Das war es auch schon. Startet FHEM nun noch mal neu indem Ihr folgendne Befehl eingebt
shutdown restart



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.

sudo apt-get install libio-socket-ssl-perl && sudo apt-get install libwww-perl


cd /opt/fhem

sudo mkdir certs

cd /opt/fhem/certs

sudo openssl req -new -x509 -nodes -out server-cert.pem -days 3650 -keyout server-key.pem



sudo chmod 644 /opt/fhem/certs/*.pem

sudo chmod 711 /opt/fhem/certs

attr WEB HTTPS

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.




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.

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. 🙂
One comment