ANZEIGE

Loxone mit Reverse Proxy absichern

Loxone mit Reverse Proxy absichern

Ein wichtiges Thema im Smart Home sind Portfreigaben. Schnell besteht die Möglichkeit Loxone von außen erreichbar zu machen, doch ohne Reverse Proxy und/oder VPN ist dies nur bedingt sicher. Wie eine Absicherung funktionieren kann, möchte ich in diesem Beitrag anhand des Reverse Proxy erklären.

Was ist ein Reverse Proxy?

Ein Reverse Proxy kein normaler Proxy wie man ihn vielleicht kennt. Es ist, wie der englische Begriff es schon sagt, ein umgekehrter Proxy.

reverse proxy loxone

Bei einer Portfreigabe wird immer der jeweilige Port des Netzwerkgerätes im Internet mehr oder weniger direkt durchgereicht. Bedeutet, dass zwischen dem Gerät und dem Internet keine wirklich sichere Verbindung besteht und Passwörter so im schlimmsten Fall auch abgefangen werden können. Um das zu verhindern ist die sicherste Variante einen VPN Tunnel nach Hause aufzubauen. Eine meiner Meinung nach flexiblere Alternative, ist der Reverse Proxy. Dieser ermöglicht einen von außen initiierenden Verbindungsaufbau zu einem hinter der Weiterleitung liegenden Server im internen Netzwerk weiterzuleiten. Das wichtige hierbei ist, dass diese Weiterleitung verschlüsselt per https Protokoll erfolgen kann. Somit kann dein Loxone Smart Home über eine sichere Verbindung gesteuert werden.

Hinweis
Die Verschlüsselung erfolgt auf diesem Weg nur über das Webinterface von Loxone.
Die App's können mit der Verschlüsselung bislang leider nicht umgehen.

Was wird benötigt?

Alles was für einen Reverse Proxy benötigt wird, ist ein dynDNS Anbieter und ein Raspberry Pi. Und natürlich etwas Zeit.

DynDNS Anbieter

Um eine feste URL zu erhalten, die stets mit der aktuellen Internet IP des eigenen Anschlusses verknüpft ist, wird ein DynDNS Anbieter benötigt. Da die IP-Adresse des Routers (z.B. der FritzBox) in der Nacht meistens wechselt, wird diese damit dann an den Anbieter gepushed um so auch wieder aus dem Internet heraus Zugriff auf das eigenen Heimnetzwerk zu erhalten.

Hierfür gibt es verschiedene (Gratis)Anbieter wie z.B. NO-IP oder Dyndnss. Mittels NO-IP werde ich die Einrichtung kurz erläutern.

Registrierung eine Hostnames

Wie Eingang erwähnt wird eine URL benötigt, die jederzeit auf die aktuelle Router IP des Heimnetzwerkes zeigt. Diese kann einfach und gratis bei No-IP registriert werden.

noip ddns erstellen

Es muss hier ein Account angelegt werden. Es entstehen allerdings keine Kosten. In der Gratis-Version ist 1 Domain und 3 Hostnames inklusive.

Wichtig ist hier am Ende der Registrierung der Klick auf Free Sign Up!

noip free sign up

Der Account wird anschließend in der erhaltene E-Mail aktiviert. Mit dem Klick auf Get started with Dynamic DNS geht es nun weiter.

noip get started

Es wird ein Username für die spätere Anmeldung in der FritzBox benötigt. Dieser wird allerdings standardmäßig nicht automatisch erstellt. Daher muss in dem Reiter Account und dort unter Account Info ein Username angelegt werden.

noip add username

In der FritzBox wird DynDNS nun aktiviert, als Anbieter NO-IP ausgewählt und die Zugangsdaten eingegeben.

noip fritzbox dyndns

Portfreigabe in der FritzBox aktivieren

Damit auf den Webserver über die spätere URL zugegriffen werden kann, muss noch der https Port 443 in der FritzBox für den Raspberry Pi freigegeben werden. Ebenso muss der Port 80 zwecks der späteren Zertifizierung bei LetsEncrypt freigegeben werden.

Das geht schnell und einfach in der FritzBox unter Internet -> Freigaben.

fritzbox https freigabe

Die Installation des Reverse Proxy

Wie die Installation des Betriebssystems auf einem Raspberry Pi funktioniert, habe ich bereits ausführlich erklärt. Aus dieser Anleitung muss lediglich Schritt 1 und Schritt 2 ausgeführt werden! Ebenfalls wichtig ist, dass die Raspberry Pi eine feste IP Adresse von der FritzBox erhält.

tradfri gateway feste ip adresse

Dies ist an dieser Stelle die Grundvoraussetzung, damit es weiter gehen kann.

Es wird nun eine SSH Verbindung mit dem Raspberry Pi hergestellt, um nun noch verschiedene Abhängigkeiten und Software zu installieren.

Zunächst wird ein update mit anschließenden upgrade ausgeführt um alle Pakete und Abhängigkeiten aktuell zu haben. Nach dem folgenden Neustart des Raspberry Pi muss sicher mit diesem nochmal neu verbunden werden.

sudo apt update && sudo apt upgrade && sudo reboot

Nun wird nacheinander nginx und der Certbot inklusive der ganzen Abhängigkeiten installiert.

sudo apt install nginx certbot -y

Jetzt muss in das Verzeichnis sites-available von nginx gewechselt werden.

cd /etc/nginx/sites-available

Hier wird nun eine neue Konfigurationsdatei angelegt.

sudo nano ownsmarthome.ddns.net

In diese Datei muss nun die folgende Config kopiert werden.

server {
  listen 80;
  server_name ownsmarthome.ddns.net;
  return 301 https://$host$request_uri;
}

# SSL configuration
server {
  listen 443 ssl;
  server_name ownsmarthome.ddns.net;
  ssl_certificate      /etc/letsencrypt/live/ownsmarthome.ddns.net/fullchain.pem;
  ssl_certificate_key  /etc/letsencrypt/live/ownsmarthome.ddns.net/privkey.pem;

  # Improve HTTPS performance with session resumption
  ssl_session_cache shared:SSL:10m;
  ssl_session_timeout 5m;

  # Enable server-side protection against BEAST attacks
  ssl_prefer_server_ciphers on;
  ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DH+3DES:!ADH:!AECDH:!MD5;

  # Disable SSLv3
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

  # Diffie-Hellman parameter for DHE ciphersuites
  #ssl_dhparam /etc/ssl/certs/dhparam.pem;

  # Enable HSTS (https://developer.mozilla.org/en-US/docs/Security/HTTP_Strict_Transport_Security)
  add_header Strict-Transport-Security "max-age=63072000; includeSubdomains";

  # Enable OCSP stapling (http://blog.mozilla.org/security/2013/07/29/ocsp-stapling-in-firefox)
  ssl_stapling on;
  ssl_stapling_verify on;
  ssl_trusted_certificate /etc/letsencrypt/live/ownsmarthome.ddns.net/fullchain.pem;
  resolver 8.8.8.8 8.8.4.4 valid=300s;
  resolver_timeout 5s;

  location / {
    proxy_pass http://LOXONE-IP:80;
    proxy_set_header Host $host;
    proxy_redirect http:// https://;
    proxy_http_version 1.1;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Upgrade $http_upgrade;
  }
}

Überall, wo die MyFritz-Adresse steht ownsmarthome.ddns.net muss diese natürlich mit der eigenen Adresse ersetzt werden! LOXONE-IP muss mit der IP-Adresse des Loxone-Miniserver ersetzt werden.
Am einfachsten vorher alles in einem Editor deiner Wahl anpassen und dann per CopyPaste in die Datei kopieren.

Nun mit STRG + X beenden und mittels y und Enter das Speichern in diesem Verzeichnis bestätigen.

Damit eine Zertifizierung mit einem LetEncrypt Zertifikat erfolgen kann, muss nun noch eine weitere Datei erstellt werden:

sudo nano /etc/nginx/snippets/letsencrypt.conf

Hier wird der folgende Code eingefügt und anschließend wieder mit STRG + X und y + Enter abgespeichert.

location ^~ /.well-known/acme-challenge/ {
 default_type "text/plain";
 root /var/www/letsencrypt;
}

Ebenso wird noch der Ordner acme-challenge erstellt.

sudo mkdir -p /var/www/letsencrypt/.well-known/acme-challenge

Bevor es nun mit der Zertifizierung los gehen kann, wird noch eine weitere Zeile in der letsencrypt config eingefügt.

sudo nano /etc/nginx/sites-available/default

Hier wird unterhalb von listen [::]:80 default_server; die Zeile eingefügt:

include /etc/nginx/snippets/letsencrypt.conf;
letsencrypt include

Beim Aufruf der IP Adresse des Raspberry Pi sollte nun die Startseite von nginx gezeigt werden. Das zeigt also, dass der Dienst ordnungsgemäß läuft.

Das Zertifikat für unsere Domain wird nun von LetsEncrypt angefordert und installiert.

sudo certbot certonly --rsa-key-size 4096 --webroot -w /var/www/letsencrypt -d ownsmarthome.ddns.net

Es wird die eigene E-Mail Adresse abgefragt, die zwingend angegeben werden muss. Danach müssen noch die AGBs akzeptiert werden. Hierzu wird ein A für agree eingegeben und mit Enter bestätigt.

Die nächste Abfrage „Would you be willing to share your email address with the Electronic Frontier
Foundation, […]“ kann mit N beantwortet werden um keine Werbung zu erhalten.

Die Meldung „IMPORTANT NOTES: Congratulations! Your certificate and chain have been saved at:  /etc/letsencrypt/live/ownsmarthome.ddns.net/fullchain.pem“ besagt, dass alles funktioniert hat.

Das Zertifikat muss nun noch an die richtige Stelle kopiert werden.

ln -s /etc/nginx/sites-available/ownsmarthome.ddns.net /etc/nginx/sites-enabled/

Danach wird nginx einmal neugestartet.

sudo systemctl restart nginx

Nun sollte der Loxone Miniserver unter der erstellten DynDNS Adresse erreichbar sein – und das per https! Das ist an dem grünen Schloss im Browser zu erkennen.

loxone https webinterface

Damit ist dein Loxone Miniserver nun aus dem Internet erreichbar und das aber verschlüsselt per https! Alle Anfragen, also auch die auf den Port 80, werden ab sofort auf https umgeleitet.

Auch in der Loxone Config kann nun die neue externe Adresse ownsmarthome.ddns.net hinzugefügt werden.

loxone miniserver ddns dienst noip

Damit ist die Online Kommunikation mit dem Server nun per https verschlüsselt. Wer noch weiter gehen möchte, könnte noch die Deffie Hellmann Zertifikate hinzufügen.

Achtung: Die Verschlüsselung ist, wie oben bereits erwähnt, lediglich über das Webinterface gegeben. Die App’s unterstützen derzeit keine Verschlüsselung.

Klicke auf einen Stern um eine Bewertung abzugeben!

Durchschnittsbewertung 4.8 / 5. Bewertungen: 8

Es tut uns leid, dass dieser Beitrag für dich nicht hilfreich war!

Lassen Sie uns diesen Beitrag verbessern!

Wie können wir den Beitrag verbessern?

1 Gedanke zu „Loxone mit Reverse Proxy absichern“

1 Kommentar

  1. Hallo Michael,
    vielen Dank für deine Installationsanweisung.
    Ich bin Linuxanfänger und möchte den Videostream mehrere IP Kamaras auf einer Website einbinden.
    Den der RTSP Stream rufe ich mit Motion-eye auf. Damit der Motion-eye Server nicht direkt im Internet steht möchte ich einen Reverse Proxy davorstellen.
    Ich habe viele Anleitungen ausprobiert es hat jedoch nur deine funktioniert. Bei allen anderen Versuchen hat funktionierte entweder die SSL Verschlüsselung oder der Reverse Proxy nicht wie gewünscht.
    Nun zu meinem Problem. Über den nach deiner Anleitung konfigurierten Proxy kann ich einen Kamarastream wunderbar in meine Website einbinden. Parallel eine zweite Kamara zu streamen bekomme ich nicht hin.
    Die Streams sind lokal unter 192.168.178.50:8080, 192.168.178.50:8081, etc. zu erreichen.
    Hast du einen Tipp für mich, der es mir ermöglicht mehrere Ziele, gleiche IP unterschiedlicher Port über den Proxy anzusprechen, wenn möglich mit nur einem SSL Zertifikat.
    Viele Grüße
    Winfried

Schreibe einen Kommentar

OwnSmartHome.de