Passwortgeschützter HTTPS Fernzugriff mit Synology NAS und Reverse Proxy

Passwortgeschützter HTTPS Fernzugriff mit Synology NAS und Reverse Proxy

Eine Homematic Anlage soll von überall erreichbar sein. Da Homematic keine Authentifizierung beim Zugang zur Web-Konsole mitbringt, es aber verhindert werden soll, dass die Heizung, Licht oder andere Komponenten von den fremden Personen gesteuert werden konnte, ist eine Absicherung notwendig. Die sicherste Variante ist sicherlich via VPN – der Komfort leidet darunter aber sehr. Daher veröffentliche ich hier ein Tutorial, wie die Homematic zumindest mit HTTP-basic-authentication mithilfe von Synology NAS abgesichert werden kann. Dieses Tutorial funktioniert natürlich auch auf anderen Systemen als einer Synology NAS, da diese (hier: Synology DS216j) aber in diesem Fall gegeben ist und der Reverse-Proxy bereits gut arbeitet, dient sie hier als Webserver (inkl. Reverse Proxy).

Technische Voraussetzungen

  • Internetanschluss
  • Router mit konfigurierbarer Firewall (Möglichkeit der eingehenden Portweiterleitung)
  • Homematic CCU / CCU2 / RaspberyMatic
  • Synology NAS mit DSM Version 6.X (hier: Synology DS216j mit DSM 6.1)
  • SSH Client (z .B. PuTTY)
  • Nicht zwingend erforderlich: Eine App für das Smartphone (z. B.: TinyMatic)

Konfiguration

Synology NAS konfigurieren

DDNS einrichten

DDNS (Dynamic Domain Name Service) vereinfacht die Verbindung von Synology NAS über das Internet durch Zuweisung eines Hostnamens zur IP-Adresse. DDNS erlaubt z.B. den Zugriff auf Synology NAS unter Verwendung eines Domänennamens (hier: ccu2httpauth.synology.me), ohne dass die IP-Adresse (z.B. 172.16.254.1) gemerkt werden soll. Es kann einen existierenden Hostnamen auf die IP-Adresse von Synology NAS gerichtet werden oder einen neuen, von Synology oder verschiedenen anderen DDNS Providern bereitgestellten, registriert werden.

Hier ist die Vorgehensweise:

  1. Systemsteuerung → Externer Zugriff → DDNS

  2. Auf Hinzufügen klicken.
  3. Bei gezeigtem Dialog sind die folgenden Einstellungen zu ändern:

    • Serviceanbieter: Einen Service-Anbieter wählen. Um einen kostenlosen Hostnamen von Synology zu registrieren, was von mir empfohlen wird, wählen Sie Synology aus dem Dropdown-Menü, auf Jetzt registrieren klicken und die Details wie gefordert eingeben.
    • Hostname: einen registrierten DDNS Hostnamen eingeben, zum Beispiel ccu2httpauth.synology.me.
    • Benutzername/E-Mail: Melden Sie sich bei Ihrem Synology-Konto an oder folgen Sie den Anweisungen des Assistenten, um ein Konto zu erstellen.
  4. auf Verbindung testen klicken, um zu prüfen, ob die Einstellungen korrekt sind.
  5. zum Speichern und Fertigstellen auf OK klicken.
  6. Im Abschnitt DDNS steht ihr DDNS-Hostnamen. Jetzt ist möglich, auf Synology NAS über das Internet durch Eingabe des DDNS Hostnamens in einem Webbrowser zugreifen.

Verbinden mit Synology NAS via SSH

Die Einstellungen werden als User „admin“ vorgenommen. In der Systemsteuerung unter „Terminal & SNMP“ im Reiter „Terminal“ den Haken bei “SSH-Dienst aktivieren“ setzen. Als Port wird in diesem Tutorial der Standardport 22 genutzt.

Unter „Erweiterte Einstellungen“ kommt die Sicherheitsstufe „Mittel“ zum Einsatz. Mit „Übernehmen“ werden die Einstellungen gespeichert.

Nun kann mit PuTTY der Zugriff auf die Synology NAS durchgeführt werden:

  1. PuTTY starten, um sich mit dem Server zu verbinden. Im Feld „Host name (or IP-Adress)“ die lokale IP-Adresse von Synology NAS eingeben (hier: 192.168.0.10, am besten soll es eine statische IP-Adresse sein, die sich nicht ändert).

     . 
  2. Sich als admin anmelden.
  3. Das Kennwort für „admin“ eingeben. Das Kennwort ist das gleiche wie im Web-Frontend.

     . 
  4. Den Befehl sudo -i ausführen. Es wird nun möglicherweise eine Standard-Datenschutzbenachrichtigung angezeigt.
  5. Das Kennwort für „admin“ erneut eingeben.

     . 
  6. Nun ist Root-Berechtigung verfügbar.

Wenn das funktioniert hat, ist der SSH-Zugang sauber eingerichtet und getestet.

Nginx konfigurieren

Weiter geht es nun mit der Web Station. Dieses Paket sollte eigentlich vorinstalliert sein. Falls nicht einfach im Paketzentrum nach „Web Station“ suchen und diese installieren und anschließend öffnen (oder direkt aus dem Menü heraus öffnen).

Unter “Status” gibt es unten eine Übersicht, welche Webserver und Komponenten installiert sind. Hier sollte „Nginx“ installiert sein. Ist dies nicht der Fall, kann das über den Status bzw. die Verwaltung nachgeholt werden.

Anschließend im Menü “Allgemeine Einstellungen” der Web Station folgende Konfiguration für HTTP-Backend-Server auswählen:

PHP wird für diese Konfiguration nicht benötigt, ist in diesem Fall aber schon vom System vorgegeben. „Persönliche Website aktivieren“ ist in diesem Fall aktiviert, spielt aber keine Rolle.

Damit ist die Synology vorbereitet und es geht mit der Nginx-Konfiguration weiter. Es geht zurück in die SSH-Konsole als User „root“, da der eingebaute Reverse Proxy der Synology leider keine Authentifzierungs-Konfiguration zulässt. Braucht man keine Authentifizierung, können trotz der folgenden manuellen Konfiguration in der Systemsteuerung → Anwendungsportal oben im Reiter „Reverse Proxy“ beliebig viele Einträge erstellt werden.

In der SSH-Konsole eingeben:

  1. Folgenden Befehl ausführen: cd /etc/nginx/sites-enabled

     . 
  2. Mit folgendem Befehl die Datei ccu2httpauth.conf erstellen: vi ccu2httpauth.conf
    Die Konfigurationsdatei „ccu2httpauth.conf“ kann auf den eigenen Namen geändert werden.

     . 
  3. Die i-Taste drücken, um in den Eingabemodus zu wechseln.
  4. Den folgenden Code einfügen.  Die IP-Adresse der Homematic CCU unter „proxy_pass“ und der Servername von Synology NAS unter „server_name“ soll den eigenen Bedürfnissen angepasst werden. Hier im Beispiel ist die IP-Adresse der Homematic CCU 192.168.1.20 und der Servername von Synology NAS ccu2httpauth.synology.me.
    server {
      listen 80;
      listen [::]:80;
      server_name ccu2httpauth.synology.me;
      return 301 https://$server_name$request_uri;
    }
    
    server {
      listen 443;
      listen [::]:443;
      server_name ccu2httpauth.synology.me;
      location / {
        proxy_set_header Authorization "";
        auth_basic "Protected";
        auth_basic_user_file /etc/nginx/basic_auth/.htpasswd;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_intercept_errors on;
        proxy_http_version 1.1;
        proxy_pass http://192.168.1.20:80;
      }
    }


     . 

  5. Die ESC-Taste drücken, um den Eingabemodus zu beenden.
  6. Die neue Datei bzw. die Änderungen mit folgendem Befehl abspeichern: :wq

     . 
  7. Folgenden Befehl ausführen: cd /etc/nginx/basic_auth

     . 
  8. Mit folgendem Befehl die Datei „.htpasswd“ erstellen: vi .htpasswd

     . 
  9. Betätigen Sie die i-Taste, um in den Eingabemodus zu wechseln.
  10. Inhalt der „.htpasswd“-Datei mit einem Online-Generator generieren (z. B. mit diesem). Als Benutzer wird hier die Benutzern „Benutzer1“, „Benutzer2“, „Benutzer3“ und „Benutzer4“ genommen – diese können frei gewählt werden, genau wie das Passwort.

     . 
  11. Fügen Sie den generierten Inhalt ein der „.htpasswd“-Datei

     . 
  12. Betätigen Sie die ESC-Taste um den Eingabemodus zu beenden.
  13. Speichern Sie die neue Datei bzw. die Änderungen mit folgendem Befehl ab: :wq

     . 
  14. Nginx-Server neustarten: synoservicectl --restart nginx

     . 
  15. nginx -s reload

     . 
  16. Um sich aus root-Account abzumelden, den folgenden Befehl ausführen: exit
  17. Um sich aus admin-Account abzumelden, den folgenden Befehl ausführen: exit

Mehr ist nicht notwendig, der Reverse Proxy-Eintrag inkl. Authentifizierung ist eingerichtet.

Router konfigurieren

Final wird nun der Router eingerichtet. Je nach Modell und Möglichkeiten muss nun extern ein Port-Forwarding eingerichtet werden. Port 80/443 extern auf Port 80/443 intern auf die lokale IP-Adresse der Synlogoy. Diese verarbeitet dann die Authentifizierung und leitet bei erfolgreicher Anmeldung die Anfrage an die Homematic CCU weiter.

App “TyniMatic” konfigurieren

Da die meisten Apps davon ausgehen, dass entweder die Homematic Onlineservices genutzt werden oder die CCU gar ohne Schutz im Netz steht, ist das obige Scenario nicht immer möglich. TyniMatic hat eine Funktion eingebaut, die HTTP-Authentifizierung unterstützt. Dazu in der App in den Einstellungen die Serveradresse eintragen (hier: ccu2httpauth.synology.me). Anschließend unter „Netzwerkeinstellungen“ den Haken bei „HTTP-Authentifizierung“ setzen und unter Benutzername und Passwort die oben eingerichteten Zugangsdaten eintragen.

Fehlermeldung 500

Falls eine Fehlermeldung 500 auftritt, kann es sein, dass es an dem AppArmor liegt und Ihr keine Lese-/Schreibreche für die Datei /etc/nginx/basic_auth/.htpasswd habt. Die einzige provisorische  Lösung, die ich gefunden habe, das AppArmor komplett zu deaktivieren (was nicht empfohlen wird).  Dabei muss so vorgegangen werden:

In die Systemsteuerung gehen → Aufgabeplannung → Erstellen → Ausgelöste Aufgabe → Benutzerdefiniertes Skript

Bei „Allgemein“ follgende Einstellungen vornehmen:

Bei den „Aufgabeneinstellungen“ in den Feld „Benutzerdefiniertes Skript“ /usr/syno/etc.defaults/rc.sysv/apparmor.sh stop einführen und OK klicken.

Die erstellte Aufgabe dann einmal ausführen:

Eine Lösung, wo AppArmor nicht deaktiviert wird, kenne ich zurzeit nicht. Falls jemand kennt, wie AppArmor unter Synology DSM 6 konfiguriert wird, kann es gerne als Kommentar angeben, ich nehme es dann in die Anleitung rein.

Fazit

Wenn ihr alles richtig gemacht haben, müsst ihr so was bekommen:

Dieser Beitrag hat einen Kommentar

  1. Ich glaube das Problem mit AppAmor gelöst zu haben. Wenn die Datei htpasswd in einem „Gemeinsamen Verzeichnis“ liegt, wo die Gruppe „http“ Leseberechtigung hat, geht es. Dazu habe ich über die normale Weboberfläche des NAS einfach ein „Gemeinsames Verzeichnis“ angelegt, danach kurz einen Virtuellen Host (auch über Weboberfläche) auf das Verzeichnis erstellt, dabei wird automatisch der Gruppe „http“ die Berechtigung erteilt. Danach hab ich den Host einfach wieder gelöscht, benötigt wird der ja nicht. Datei htpasswd da abgelegt und den Pfad in der nginx config angepasst. Appamor Dienst läuft und es geht ohne 500er Fehler.

Schreibe einen Kommentar

Menü schließen