Aus gegebenem Anlass, Beitrag von Schubbie zum Thema VPN vs Reverse-Proxy. Dachte ich mir hier mal einen kleinen Beitrag zu veröffentlichen wie ich einen Reverse-Proxy (DSM integriert) auf meiner Synology NAS eingerichtet habe.
Es gäbe hier natürlich alternative, die beiden bekanntesten will ich nur kurz Erwähnen:
Natürlich kann man das ganze auch direkt über NGINX machen auch muss es kein Synology NAS sein es kann auch z.b. ein Raspberry dafür herhalten.
Was macht ein Reverse-Proxy überhaupt?
Ein Reverse-Proxy ist ein Server, welcher als Proxy vor mehrere Server geschaltet wird und die Anfragen der Clients abfängt. Somit hat der Client niemals eine Direkte Kommunikation mit dem Ursprungsserver was zum einen die Sicherheit und auch die Performance verbessern kann.
Weitere Möglichkeiten auf welche ich ich nicht weiter eingehen werde (würde den Rahmen sprengen) sind:
- Load Balancing
- Schutz vor z.b. DDoS-Angriffen
- GSLB (Globaler Serverlastenausgleich)
- Caching
und natürlich SSL-Verschlüsselung was mit teil des Beitrags ist.
Für unseren Reverse-Proxy gibt es einige Vorraussetzungen die wir erfüllen müssen:
- ein Server (Synology NAS)
- Internetanschluss mit DualStack, DS-Lite funktioniert nicht
- Router/Modem welches die Erstellung von Port-Freigaben ermöglicht - ich verwende eine Fritz!Box 6591 Cable
- eine Domain, für das Tutorial verwende ich den dyndns Anbieter no-ip.com. Produktiv verwende ich meinen eigenen Dienst - Falls hier Interesse besteht könnte ich dazu auch ein Tutorial erstellen.
Welchen Service/Dienst man über den Reverse-Proxy laufen lassen möchte spielt eigentlich keine Rolle. Ich verwende hier als Beispiel Home Assistant. Für jeden weiteren Dienst benötigt man eine weitere Subdomain. Es gäbe noch die Möglichkeit über Pfade mehrere Dienste anzusprechen ist aber mit dem Synology Reverse-Proxy nicht ohne weiteres möglich. Oder über zusätzliche Ports was die Sicherheit verringert, jeder offene Port ist ein potentielles Risiko.
Was natürlich immer zu bedenken gilt ein Reverse-Proxy ist nur so sicher wie der Dienst der Freigeschalten wird. Wenn ich hier z.b. Home Assistant ohne vernünftigen Kennwortschutz freigebe bin ich auch selbst Schuld wenn jemand rein kommt!
Nun geht es aber endlich mal Los.
1. Dynamische Domain bei noip.com registrieren.
- Konto bei NO-IP erstellen
- In der linken Sidebar wählen wir "Dynamisches DNS > No-IP Hostnames" und klicken auf Hostnamen erstellen.
- Wir legen uns hier einen Hostname an und wählen einen Domain Namen aus, als IPv4 Adresse habe ich erst mal die Lokale IP der FritzBox eingetragen, das wird sich aber bald ändern.
2. NAS absichern (Minimale Konfiguration)
- Systemsteuerung öffnen und auf Sicherheit gehen.
- Im ersten Reiter "Sicherheit" sollten die Standards erst mal ok sein.
- Reiter "Firewall", diese ist natürlich zwingend zu aktivieren.
!!!ACHTUNG!!! dies ist lediglich eine Basic Konfiguration und sollte Produktiv nicht 1zu1 eingesetzt werden.
Im Bild zu sehen:
Erste Zeile alle Geräte im Lokalen Netzwerk dürfen auf alle Ports und Protokolle Zugreifen. Netzadresse (default FB) 192.168.178.0 und ein Subnetz 255.255.255.0 mit 256 IPv4-Adressen.
Zweite Zeile alle IP-Adressen dürfen auf Port 80 (Let's Encrypt) und 443 (Reverse-Proxy) zugreifen.
Dritte Zeile allen anderen IP-Adressen wird alles verweigert.
Reiter "Schutz" Automatische Blockierung und DoS-Schutz sollten aktiviert werden.
Reiter "Erweitert" der Punkt TLS- / SSL-Profilebene hier stelle ich Grundsätzlich auf Moderne Kompatibilität. Diese Punkte betreffen zwar den dienst Home Assistant nicht sollten aber Grundsätzlich mit Konfiguriert werden.
3. NAS NO-IP hinterlegen.
Systemsteuerung öffnen und auf Externer Zugriff gehen und hier auf den Reiter DDNS und auf Hinzufügen klicken.
Einstellungen entsprechend der Registrierung bei NO-IP hinterlegen, testen und mit OK Speichern.
4. Port-Freigabe in der Fritz!Box einrichten
- Fritzbox über die IP Aufrufen (default 192.168.178.1) auf den Punkt Internet gehen und auf Freigaben.
- Unter Portfreigaben auf "Gerät für Freigaben hinzufügen" klicken.
- Im Ersten Schritt das Gerät auswählen.
- Ganz nach unten Scrollen und auf "Neue Freigabe klicken" Portfreigabe auswählen Protokoll und entsprechend den Port 80 in alle drei Felder eingeben.
- Das ganze für Port 443 wiederholen.
Port an Gerät ist der Port am Synology NAS und Port extern gewünscht, die Freigabe auf der Fritz!Box.
Wer IPv6 mit nutzt und dies Entsprechend bei seinem DYNDNS Anbieter nutzen kann, darf dies gerne Aktivieren ansonsten sollte der Internetzugriff über IPv4 ausreichen.
5. Reverse Proxy Einrichten
- Systemsteuerung öffnen und auf das Anmeldeportal klicken.
- Im Reiter Reverse Proxy auf Reverse Proxy klicken.
- Oben links auf "erstellen" klicken.
Hier gibt man nun einen Beliebigen Namen under Reverse-Proxy-Name an.
Das Protokoll der Quelle ist HTTPS und natürlich der Hostname welcher bei NO-IP angelegt wurde.
Der Port ist der Freigegebene Port also 443 und HSTS sollte aktiviert werden. Das ist eine Zwangsweiterleitung auf SSL.
Unter Ziel wird das Prtorokoll auf HTTP eingestellt und die IP des Clients mit Home Assistant (oder einem anderen Dienst) angegeben.
Bei Home Assistant ist es der Port 8123 bei der Synology NAS wäre dies ohne SSL z.b. 5000, ein Einzelner Shelly hätte die 80 (ganz blöde Idee)
Für Home Assistant müssen wir noch zwei Benutzerdefinierte Kopfzeilen anlegen. Hier klicken wir auf "Erstellen" und wählen WebSocket aus.
<-- Dies erstellt automatisch diese beiden Einträge.
6. Zertifikat abrufen
- Systemsteuerung öffnen und auf Sciherheit klicken.
- Den Reiter Zertifikat aufrufen und auf Hinzufügen klicken.
- Neues Zertifikat hinzufügen und auf "Weiter" klicken
- Zertifikat von Let's Encrypt abrufen (Beschreibung ist optional) und wieder "Weiter"
- Domainname und E-Mail Adresse angeben und auf Fertig klicken.
Dauert ein wenig, nun wird ein Zertifikat von Let's Encrypt abgerufen. Wenn dies erfolgreich ist zeigt uns dies auch ob unsere Freigabe und Domain ordentlich läuft.
Auf Einstellungen klicken und dem Reverse-Proxy dienst noch das Zertifikat zuweisen.
7. Home Assistant configuration.yaml anpassen.
Nun muss nur noch Home Assistant für die Proxy zugelassen werden. Dies ist nur ein Basic Setup und sollte noch angepasst werden, weiter Informationen
http:
use_x_forwarded_for: true
trusted_proxies:
- 192.168.178.0/24
- 127.0.0.1
ip_ban_enabled: true
login_attempts_threshold: 5
Home Assistant Neustarten.
So nun sind wir fertig und können über unseren Hostname unsere Home Assistant instanz von überall über meinnas.dnsking.com erreichen.
Ich hoffe ich habe nichts vergessen oder ganz falsch erzählt, falls doch bitte korrigiert mich entsprechend.
Zum Thema Sicherheit möchte ich nur eines kurz sagen.
Ich hatte seit dem Einsatz von Home Assistant noch keinen einzigen Zugriffsversuch über meine Freigabe (ca. 1,5 Jahre).