FHEM Tutorial-Reihe - Part 21: Zugriff auf FHEM über das Internet (ReverseProxy)
Oft wurde es sich gewünscht - heute gehen wir das Thema an: Zugriff auf FHEM von überall auf der Welt! Wir gehen dabei aber nicht den 0815-Weg (Port-Forwarding auf 8083 + selbstsigniertes Zertifikat und Fehlermeldungen), sondern punkten mit einem gültigen Zertifikat, welches sich reglmäßig erneuert, einer sicheren Kommunikation über einen ReverseProxy und der Grundlage für ein einweiterbares System für den Zugriff auf weitere Dateien auf dem Raspberry Pi.
Was wird benötigt?
- Eine echte Domain. DynDNS-Dienstleister arbeiten nicht mit LetsEncrypt zusammen
- Eine IPv4-Adresse. DSLite oder IPv6 wird in diesem Tutorial nicht unterstützt
- Eine FritzBox (optional, klappt auch mit anderen Routern)
- Eine laufende FHEM-Installation (auf Debian)
- Ein installierter Apache Webserver
- Linux-Kenntnisse
- Etwas Geduld
Was wir tun:
- Subdomain als DDNS anlegen (z.B. bei all-inkl.de)
- FritzBox so konfigurieren, dass die richtige IP regelmäßig hinterlegt wird
- Port-Forwarding auf Port 443 zum Raspberry Pi
- Generierung des SSL-Zertifikates
- Konfiguration des Apache Virtual Host
Alle Infos im Video:
Folgende Befehle brauchst Du:
cd /opt
sudo git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help
./letsencrypt-auto certonly --rsa-key-size 4096 -d <domain>
Dann den Schritten im Setup (wie im Video gezeigt) folgen.
sudo a2enmod proxy proxy_http
sudo service apache2 restart
cd /etc/apache2/sites-available/
sudo vi <domain>.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName fhem.haus-automatisierung.com
ServerAdmin info@haus-automatisierung.com
DocumentRoot /var/www/html
ErrorLog ${APACHE_LOG_DIR}/fhem.haus-automatisierung.com.error.log
CustomLog ${APACHE_LOG_DIR}/fhem.haus-automatisierung.com.access.log combined
SSLCertificateFile /etc/letsencrypt/live/fhem.haus-automatisierung.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/fhem.haus-automatisierung.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
<Location /fhem>
ProxyPass http://localhost:8083/fhem
ProxyPassReverse http://localhost:8083/fhem
</Location>
<Directory />
RedirectPermanent / /fhem
</Directory>
<Proxy *>
AuthType Basic
AuthName "Password for FHEM Required"
AuthUserFile /etc/fhem-htpasswd
Require valid-user
Order deny,allow
Allow from all
</Proxy>
</VirtualHost>
</IfModule>
sudo apt-get install libapache2-mod-proxy-html
cd /etc/apache2/sites-enabled
sudo ln -s ../sites-available/<domain>.conf .
sudo htpasswd -c -s /etc/fhem-htpasswd <username>
sudo a2enmod ssl proxy_html
sudo apachectl configtest
sudo service apache2 restart
Cronjob zur Zertifikatserneuerung:
crontab -e
Kleine Änderung gegenüber dem Video - der angegebene Befehl war falsch. Ich führe jetzt einfach täglich um 23 Uhr ein renew durch. Dieses erkennt automatisch, welche Zertifikate bald ablaufen und erneuert diese gegebenenfalls.
0 23 * * * sudo service apache2 stop && /opt/letsencrypt/letsencrypt-auto renew && sudo service apache2 start