Das eigene Netz nach außen anbinden? Da zuckt man erstmal instinktiv zusammen, denn: Das klingt gefährlich. Das muss es aber nicht sein, zeigt c't 3003.
Transkript des Videos
(Hinweis: Dieses Transkript ist für Menschen gedacht, die das Video oben nicht schauen können oder wollen. Der Text gibt nicht alle Informationen der Bildspur wieder.)
Guckt mal hier, ich sitze in der U-Bahn und gucke einen Film. Toll, denkt ihr jetzt, kann ja wohl jeder Netflix auf dem Smartphone benutzen. Nee, nee, nee: Das Besondere ist, das ist ein von mir selbst gekaufter Film, der von meinem NAS gestreamt wird. Und das funktioniert auch mit jedem anderen Dienst, der auf meinem Home-Server läuft und über den Browser oder eine App erreichbar ist. Zum Beispiel Nextcloud, Paperless, Nginx, Audiobookshelf, Jellyfin und was es da halt noch so alles gibt.
Und jetzt denkt ihr vielleicht, oh nein, das ist doch viel zu gefährlich, den Home-Server aus dem großen Netz erreichbar zu machen. Ich zeige euch hier, wie ihr das sicher hinbekommt. Dafür gibt es mehrere Wege, wir schauen uns zwei davon an: einmal per VPN, also über WireGuard, und einmal per Reverse-Proxy, also über Nginx Proxy Manager.
In diesem Video zeige ich euch, wie das alles funktioniert. Und ihr erfahrt auch noch ein paar andere interessante Dinge über Netzwerke. Also zumindest wusste ich die noch nicht, bevor ich das Video gemacht habe. Bleibt dran.
*Keno am Telefon*: Ja, ach so, nee, kein, nee, kein KI. Wir machen nicht nur KI-Themen. Nee, auch keine Haushaltsgeräte. Ja, nee, das war jetzt nur Thermomix einmal. Ja, nein, kein KI. Tschüss.
Liebe Hackerinnnen, liebe Internetsurfer, herzlich willkommen hier bei...
So, und bevor wir jetzt anfangen, ganz kurz noch ein Disclaimer: Es ist natürlich immer am sichersten, wenn ihr euer Heimnetzwerk bzw. euren Homeserver gar nicht nach außen öffnet. Ich zum Beispiel schalte bei Routern sogar immer als Erstes aus, dass man sich da von draußen drauf einloggen kann, weil – jetzt mal ehrlich – wenn ich auf meinem Router irgendwas frickeln will, dann bin ich zu Hause. Also ich brauche das nicht.
Und auch wenn es jetzt nicht wahnsinnig gefährlich ist, da von außen auf zuzugreifen, je mehr Möglichkeiten es gibt, von außen auf euer Netz zuzugreifen, desto größer ist natürlich die Angriffsfläche. Deshalb überlegt euch vorher genau, was ihr machen wollt und was ihr braucht. Aber wie gesagt, es gibt ja durchaus sehr, sehr viele gute Gründe, warum ihr oder andere von außen auf euer Netzwerk zugreifen wollt.
Ihr müsst dafür allerdings unterschiedliche Probleme lösen. Das erste Problem ist, dass ihr in großer Sicherheit keine Fest-IP von eurem Internetprovider bekommen habt, sondern eine dynamische, die sich also regelmäßig ändert. Feste IPs gibt es meist nur für Business-Anschlüsse. Bei einigen DSL-Anschlüssen ändert sich die Adresse sogar täglich. Da gibt es immer noch die berühmte Zwangstrennung, einmal in 24 Stunden. Bei anderen ist der Wechsel seltener, aber die IP-Adresse wechselt trotzdem manchmal.
Ja, und für eine Verbindung per VPN oder Reverse-Proxy benötigt man halt immer einen festen Ankerpunkt im Internet. Also ihr könnt natürlich für alles eure aktuell vom Provider vergebene IP-Adresse verwenden, und sobald die sich ändert, kommt ihr dann von außen nicht mehr in euer Netzwerk. Ihr könnt die IP ja nicht raten.
Das Problem löst ihr mit dynamischem DNS, kurz DynDNS. Das ist quasi eine Domain, die immer auf euren Anschluss zu Hause zeigt, auf eure aktuelle IP-Adresse. Da läuft ein Service auf eurem Home-Server oder auf einem Router, und der guckt bei jedem Reconnect: Was habe ich gerade für eine IP-Adresse? – und teilt die dem DynDNS-Service mit. Und das Resultat ist, dass eure DynDNS-Adresse immer auf eure aktuelle IP zeigt.
DynDNS wird von unterschiedlichen Hostern angeboten. In den kostenfreien Varianten bekommt man dann z. B. sowas wie ct3003.ipv64.de. Ja, ich habe zum Testen den kostenlosen Anbieter ipv64.net verwendet. Der ist vom Server-YouTuber Dennis Schröder und das Ding macht zumindest auch einen guten Eindruck.
Falls ihr eine Fritzbox verwendet – und das scheinen ziemlich viele von euch zu sein, ist unsere Erfahrung – könnte es sein, dass ihr schon automatisch sowas wie DynDNS laufen habt und da gar nichts konfigurieren müsst. Denn wenn ihr einen MyFritz-Account angelegt habt – das habe ich z. B. gemacht, also ohne DynDNS im Hinterkopf zu haben, sondern ich habe das gemacht, weil mir dann die Fritzbox manchmal Mails schickt, wenn irgendwas los ist, und ich fand das praktisch – dann habt ihr schon so eine feste Adresse, mit der ihr immer euer Netzwerk erreicht. Das ist so eine ganz kryptische Buchstaben- und Zeichenfolge und dann .myfritz.net. Das wäre dann damit schon alles vorkonfiguriert.
Wenn ihr das nicht benutzen wollt, also MyFritz oder auch nicht könnt, dann packt ihr halt einen anderen DynDNS-Provider in euren Router. Das geht bei der Fritzbox über Internet Freigaben DynDNS. Da knallt ihr dann eure sogenannte Update-URL rein und Login und Passwort und so. Und das könnt ihr aber alles copy-pasten von eurem DynDNS-Anbieter, wenn ihr da einen Account angelegt habt.
So, und wenn ihr jetzt die MyFritz-URL oder die DynDNS-URL in den Browser eintippt, dann passiert nix. Genau. Also wenn da was passiert, dann ist das eher ein Problem, weil ihr eigentlich noch nichts freigegeben haben solltet. Wenn da schon was kommt im Browser, solltet ihr eure Portfreigaben am Router mal lieber sicherheitshalber checken. Denn ihr wollt auf gar keinen Fall euer komplettes Netzwerk nach außen öffnen.
Okay, MyFritz bzw. DynDNS ist geregelt.
Methode Nummer 1: VPN über WireGuard
Ja, fangen wir mit VPN an. VPN steht für Virtual Private Network und ist eine gängige Methode, um eine verschlüsselte Verbindung in ein geschlossenes Netzwerk herzustellen. Viele Unternehmen nutzen sowas, um Mitarbeiterinnen und Mitarbeitern Zugriff auf Dateien, Zeitverwaltung und andere Dienste zu geben, die von außen standardmäßig nicht erreichbar sein sollen.
Der große Vorteil von VPN ist auch gleichzeitig der Nachteil: Ihr habt direkt Zugriff auf euer komplettes Heimnetzwerk. Es eignet sich also nicht unbedingt, um es an andere weiterzugeben. Außerdem benötigt ihr immer eine Zusatzsoftware oder zumindest eine zusätzliche Konfiguration auf euren Endgeräten.
Bei VPN-Verbindungen gibt es unterschiedliche Protokolle wie IPsec, OpenVPN oder WireGuard. Wir schauen uns in diesem Video aber nur WireGuard an, da das sehr leicht zu konfigurieren ist, viele Router-Modelle das standardmäßig unterstützen und es auch sehr ressourcenschonend und sicher läuft. Es gibt unseres Wissens noch keinen erfolgreichen WireGuard-Angriff von außen. Das heißt, es ist also sicher.
Ihr könnt das zum Beispiel auf eurem Smartphone im Hintergrund laufen lassen, ohne dass sich das allzu stark auf die Akkulaufzeit auswirkt. Um es einfach zu halten, zeigen wir euch, wie ihr die WireGuard-Integration der Fritzbox nutzt. Seit der FritzOS-Version 7.5 ist WireGuard komplett in der Fritzbox implementiert. Natürlich könnt ihr den Dienst aber alternativ auch auf eurem Home-Server laufen lassen, wenn ihr das wollt.
Ja, aber auf meiner Fritzbox war die WireGuard-Installation wirklich – das klingt jetzt fast, als würde ich irgendwie Werbung machen wollen. Mache ich aber nicht. Ich verspreche es euch. Mich nervt es zum Beispiel, dass es so wenig 6-Gigahertz-Fritzboxen gibt. Aber okay, lassen wir mal am Rande – war die WireGuard-Installation wirklich so surreal einfach? Also ich muss echt sagen, ich habe gedacht: Hä, das kann’s doch jetzt noch nicht gewesen sein. Bin ich da schon drin?
Hier mit Erklärungen, was ihr klicken müsst: Internet Freigaben VPN WireGuard. Dann auf das Plus „Verbindung hinzufügen“. Voreinstellung bei „Einzelgerät verbinden lassen“. Auf „Weiter“ klicken. Irgendeinen beliebigen Namen eingeben. Fertigstellen. Auf der Fritzbox eine beliebige Taste drücken – ist ein Sicherheitsfeature zum Bestätigen. Auf dem Handy die WireGuard-App installieren. Auf Plus tippen. Dann „Aus QR-Code erstellen“. Abfotografieren. Fertig.
Wenn ihr Geräte ohne Kameras nutzen wollt – also was weiß ich, Desktop-PCs zum Beispiel oder so – könnt ihr einfach die Config-Datei hier runterladen und da dann in WireGuard installieren. Ja, wie gesagt, wenn ihr MyFritz eingerichtet haben solltet, geht das komplett ohne jegliche vorherige Konfiguration. Da ist dann eure MyFritz-Adresse in der WireGuard-Config schon automatisch drin. Ihr könnt aber auch auf den Bleistift hier klicken, und dann könnt ihr in der Config zum Beispiel eine DynDNS-Adresse eingeben. Ist wirklich ziemlich simpel.
Ja, und sobald dann die WireGuard-Verbindung steht, dann könnt ihr aus der Ferne – also Timbuktu oder sonst wo ihr seid – euer Heimnetzwerk so verwenden, als wärt ihr zu Hause, als wärt ihr direkt mit dem Netzwerk verbunden. Ihr könnt hier in der Config auch sehen, dass euer mit WireGuard verbundenes Gerät einfach auch ein Gerät im lokalen Netzwerk ist. Hier bei mir ist es die 187.202, also das heißt, das Netzwerk denkt also quasi, das ist hier ein internes Gerät, auch wenn ihr ganz woanders seid.
Ja, und das Tolle ist, ihr müsst jetzt auch nicht mit Portfreigaben oder so herumhantieren, sondern es ist alles genauso wie im lokalen Netz. Also ihr kommt überall drauf, wo ihr im lokalen Netz auch draufkommt.
Jetzt muss ich aber natürlich noch mal disclaimern: Es gibt durchaus Leute in der c’t-Redaktion, die sagen, ja, WireGuard ist schon okay, aber da ist dann auf jeden Fall der VPN-Port nach draußen offen. Macht doch lieber Tailscale, da sieht man von außen gar nichts. UDP-Hole-Punching ist da das Stichwort.
Aber da will ich jetzt gar nicht im Detail drauf eingehen, weil halt andere in der Redaktion sagen: Ja, Tailscale ist schon auch gut, aber da muss man ja einem Anbieter vertrauen – und das will man ja vielleicht auch nicht.
Man kann die Tailscale-Infrastruktur auch selbst betreiben, aber das ist dann schon ziemlich aufwendig. Also mal gucken, wie das Video hier bei euch ankommt. Wenn gut, dann machen wir noch mal was separat zu Tailscale.
Ja, und wie gesagt, mit WireGuard gibt es Zugriff ins ganze Netz. Wenn ihr eurer Kollegin vielleicht nur kurz eine Datei über Nextcloud schicken wollt, macht ihr das vielleicht besser anders, nämlich mit Reverse-Proxy. Könnt ihr dann einen einzelnen Dienst nach außen freigeben.
Direkt nochmal Disclaimer: Reverse-Proxy ist unsicherer als WireGuard, weil ihr Services wirklich ins ganze Netz direkt öffnet. Da ist nicht nochmal so eine sicherheitsverschlüsselte Tür dazwischen. Also da können alle drauf.
Wenn ihr das alles sorgfältig konfiguriert und ihr die Server-Dienste immer aktuell haltet, gute, lange Passwörter verwendet, die nicht in Wörterbüchern stehen, dann kann man das aber schon machen. Aber man sollte sich auf jeden Fall darüber im Klaren sein, dass da ein Restrisiko bleibt.
Methode Nummer 2: Reverse-Proxy mit Nginx Proxy Manager
Bei einem Reverse-Proxy werden Dienste aus dem Heimnetzwerk direkt im Internet verfügbar gemacht. Das könnt ihr zwar auch über eine einfache Portfreigabe erreichen. Dafür müsst ihr euch aber Ports merken und für jede Anwendung mindestens einen Port in eurer Firewall freigeben.
Bei einem Reverse-Proxy werden nur die Standard-Ports für HTTP und HTTPS freigegeben und direkt an den Reverse-Proxy weitergeleitet. Das weitere Management wird direkt in dem Tool konfiguriert. Sollten zwei Anwendungen die gleichen Ports brauchen, müsstet ihr euch ohne Reverse-Proxy an der Stelle entscheiden. Mit einem Reverse-Proxy ist das kein Problem.
Und als großes i-Tüpfelchen: Reverse-Proxy kümmert sich auch um die Verschlüsselung per SSL. Das heißt, Let's-Encrypt-Zertifikate können dort bequem angelegt werden.
Schauen wir uns das mal in einem Beispiel an. Ihr wollt über jellyfin.3003.ipv64.de auf eure Jellyfin-Instanz zugreifen. Normalerweise müsstet ihr dann den Port 8096 für Jellyfin in der URL angeben und diesen auch in der Firewall freigeben. Mit Reverse-Proxy wird dieser direkt für die Subdomain in der Konfiguration angegeben.
Was ich übrigens gelernt habe bei der Recherche für dieses Video: Die Kombination aus IP-Adresse und Port heißt Socket. Habe ich schon super oft gehört, habe ich jetzt erst richtig verstanden. Bin ich ehrlich. Okay, aber weiter geht's.
Wenn der Reverse-Proxy eine Anfrage für die genannte Subdomain bekommt, dann kann der diese direkt an das richtige Gerät mit dem richtigen Port im Heimnetzwerk zuordnen und weiterleiten. Kommt eine Anfrage für nextcloud.3003.ipv64.de zum Reverse-Proxy, leitet er die natürlich entsprechend an den Nextcloud-Server mit dem richtigen Port weiter.
Ihr seht: Ist eine ziemlich bequeme Sache, wenn es erst mal eingerichtet ist. Allerdings sind jetzt eure Dienste für alle im Internet erreichbar. Ich habe ja schon gesagt: Es ist also wichtig, dass ihr diese auch entsprechend passwortschützt, wenn die Inhalte nicht alle sehen sollen.
Für den Reverse-Proxy muss ein Server im Heimnetzwerk laufen. Reverse-Proxy-Dienste sind zum Beispiel Traefik, Caddy oder halt auch der Nginx Proxy Manager. All diese laufen auf einem NAS oder Heimserver. Das kann zum Beispiel aber auch ein Raspi sein.
Für den einfachen Einstieg in die Reverse-Proxys bietet sich der Nginx Proxy Manager an. Darunter werkelt, wie der Name schon vermuten lässt, der Nginx-Reverse-Proxy. Die Steuerung läuft über eine einsteigerfreundliche Web-Oberfläche. Bei den Alternativen müsst ihr die Verbindung per Kommandozeile und Texteditor konfigurieren.
Legen wir mal los mit der Installation des Nginx Proxy Manager. Das geht zum Beispiel per Docker. Wenn ihr Docker noch nie benutzt habt, schaut gerne das Video von uns an. Da haben wir das erklärt. Den richtigen Docker-Container haben wir außerdem unten verlinkt. Die Config für die YAML-Datei findet ihr auf der Website des Nginx Proxy Managers. Einfach kopieren, in eure YAML-Datei einfügen und schon sollte das Ding laufen.
Falls ihr Unraid oder TrueNAS Scale benutzt, könnt ihr auch den Nginx Proxy Manager einfach als App downloaden. Das ist dann auch Docker, aber kann man dann einfach anklicken und wie eine App installieren. Einfach in den entsprechenden Stores danach suchen. Hier, so sieht das in meinem Unraid aus.
Ihr erreicht dann den Proxy Manager jetzt einfach über die IP-Adresse des Servers mit dem Port 81. Also zum Beispiel 192.168.178.110:81 – Socket, wisst ihr. Der Standard-User ist admin@example.com und das Standard-Passwort ist change.me. Das solltet ihr auch direkt nach dem Einloggen tun – also changen. Wählt dort wirklich ein starkes Passwort.
Ja, der Proxy Manager läuft jetzt. Aber damit er jetzt auch die Anfragen von draußen an die richtige Stelle im Heimnetzwerk weiterleiten kann, muss dieser selbst erst mal von außen erreichbar sein. Dafür müssen wir jetzt nochmal zum Türsteher eures Netzwerks – also eurem Router.
Wir zeigen das jetzt wieder am Beispiel der Fritzbox, aber geht auch mit den meisten anderen Routern. Stichwort heißt hier: Port-Weiterleitung. Also wieder in die Fritzbox einloggen und auf „Internet – Freigaben“ klicken, dort auf „Gerät für Freigaben hinzufügen“ und unter „Gerät“ den Server auswählen, auf dem euer Proxy Manager läuft.
Weiter unten dann wieder auf „Neue Freigabe“ klicken und bei „Anwendung“ wählt ihr HTTP-Server aus. Das heißt auch nichts anderes als Port 80. Anschließend noch auf OK. Danach fügt ihr über den Button unten noch eine neue Freigabe hinzu. Diesmal wählt ihr aber HTTPS-Server aus, wodurch dann der HTTPS-Standardport 443 freigegeben wird. Nochmal mit OK bestätigen und auf Übernehmen.
Und jetzt geht ihr auf das Webinterface des Proxy Managers und klickt im oberen Menü auf „SSL Certificates“. Dort noch auf „Add SSL Certificate“ und wählt „Let's Encrypt“ aus. Die sind kostenlos und für unsere Zwecke vollkommen ausreichend. Im folgenden Fenster gebt ihr euren DynDNS-Hostnamen ein. Bei uns ist das ja wie gesagt ct3003.ipv64.de. Und unten drunter klickt ihr dann auf „Test Server Reachability“.
Und das ist jetzt der große Moment, in dem sich herausstellt, ob ihr alles richtig gemacht habt. Wenn das so ist, wird das Licht grün. Yeah, super, füllt das Zertifikat. Nehmt noch eure Mail-Adresse ein, stimmt den Terms of Service zu und speichert das Ganze. Das kann jetzt einen kleinen Moment dauern – und endlich seid ihr fertig mit der Grundkonfiguration.
Ihr seid jetzt so weit, dass ihr nur noch die Dienste nach draußen freigeben müsst. Und das geht dank eurer Grundkonfiguration sehr leicht. Dafür klickt ihr oben im Hauptmenü auf „Hosts“ – „Proxy Host“ – und legt mit „Add Proxy Host“ einen neuen Host an.
Bei „Domain Names“ nehmt ihr den Namen, den ihr gerne nutzen wollt, gefolgt von eurer Domain. Also zum Beispiel audio-bookshelf.ct3003.ipv64.de. Ihr gebt hier die interne Adresse ein. Das ist okay, dass das unverschlüsselt, also nur HTTP ist. Wir stellen gleich noch ein, dass nach draußen ausnahmslos alles SSL-verschlüsselt wird.
Wichtig ist an der Stelle noch der Haken bei „Block Common Exploits“, damit eben bekannte Exploits direkt geblockt werden. Anschließend wechseln wir noch zum Tab und wählen bei „SSL Certificate“ „Request a New SSL Certificate“ aus. Unten drunter stellen wir noch „Force SSL“, „HTTP/2 Support“, „HSTS Enabled“ sowie „HSTS Subdomains“ auf ein. Dann noch die Terms of Service akzeptieren und auf „Save“ drücken.
Wenn ihr alles korrekt eingestellt habt, sollte der Status auf Online springen. Und ob das Ganze funktioniert, seht ihr, wenn ihr auf die Domain klickt und sich euer entsprechendes Ziel öffnet. In diesem Fall hier komme ich auf die Login-Seite meines Audio-Bookshelf-Servers.
Das Ganze funktioniert aber auch mit anderen Diensten, wie am Anfang schon gesagt: Jellyfin, Paperless, NGX, Nextcloud und so weiter und so weiter.
Jetzt nochmal: Wie sicher ist das Ganze, fragt ihr euch bestimmt. Da habe ich auch schon gesagt: Die sichere der beiden Lösungen ist die VPN-Verbindung. Aber auch der Proxy Manager ist jetzt kein offenes Scheunentor, nur weil Ports freigegeben wurden.
Über die Ports kommt ein potenzieller Angreifer erst einmal nur an die weitergeleitete Anwendung – also den Proxy Manager oder die jeweiligen Web-Anwendungen. Wie wir alle wissen, ist keine Software perfekt. Allerdings ist der Proxy Manager Open-Source-Software. Das bedeutet, dass der Code im Regelfall von vielen Leuten angeschaut wird und Sicherheitsprobleme hoffentlich schnell erkannt werden.
Also achtet darauf, dass ihr das Betriebssystem, die Container und die freigegebenen Anwendungen regelmäßig aktualisiert. Das reduziert auf jeden Fall die Gefahr auf ein Minimum.
Abgesehen davon eignet sich vielleicht auch nicht jede Heimserver-Software, um sie nach draußen freizugeben. Stellt euch immer die Frage: Was würde passieren, wenn jemand die Software im Worst Case übernimmt? Bei einer Smart-Home-Zentrale ist das wohl wesentlich dramatischer, als wenn jemand in eure Jellyfin-Bibliothek einbricht.
Ein wesentliches Sicherheitsmerkmal sind auch hier Backups. Diese sollten immer physikalisch von eurem Server getrennt sein, damit sie bei einem Einbruch nicht betroffen sind.
Das war eigentlich schon mein Fazit. Wie sicher ist das?
Also ich persönlich werde weiter WireGuard benutzen, weil ich diese Freigaben nur für mich selbst brauche, hin und wieder mal. Das fühlt sich für mich besser an. Aber für viele von euch ist sicherlich auch der Reverse-Proxy sinnvoll.
Ja, wie seht ihr das? Reverse-Proxy, VPN-Verbindung? Oder sagt ihr, ist uns alles nicht so geheuer, lassen wir alles dicht?
Gerne in die Kommentare schreiben. Wir lesen alles – vor allem am Anfang des Videos. Wenn dann so später noch so Sachen reinfizzeln in alte Videos, da gucke ich immer nur so sporadisch rein. Aber so in den ersten Tagen, nachdem Video gedroppt ist, lese ich wirklich alles.
Und ihr könnt auch gerne noch Fragen stellen, die versuchen wir dann auch zu beantworten. Und natürlich abonnieren und gerne Daumen hoch – und ihr wisst, was ihr machen müsst.
Tschüss!
c't 3003 ist der YouTube-Channel von c't. Die Videos auf c’t 3003 sind eigenständige Inhalte und unabhängig von den Artikeln im c’t Magazin. Die Redakteure Jan-Keno Janssen, Lukas Rumpler, Sahin Erengil und Pascal Schewe veröffentlichen jede Woche ein Video.
(jkj)