DDNS für eigene Domain mit Fritzbox-Router und TLS
Achtung!
Die Verwendung dieses Howto geschieht auf eigene Gefahr. Insbesondere wird darauf hingewiesen, dass der Betrieb eines öffentlich erreichbaren Apache-Servers erhebliche Sicherheitsrisiken beinhaltet. Näheres dazu im Abschnitt Sicherheitshinweise. Bei Problemen mit der Anleitung melde dies bitte in der dazugehörigen Diskussion und wende dich zusätzlich an den Verfasser des Howtos.
Artikel für fortgeschrittene Anwender
Dieser Artikel erfordert mehr Erfahrung im Umgang mit Linux und ist daher nur für fortgeschrittene Benutzer gedacht.
Hinweis:
Diese Howto-Anleitung wurde zuletzt von mubuntuHH am 18.10.2020 unter Ubuntu 18.04 und Ubuntu 20.04 erfolgreich getestet.
Ziel¶
Es soll ein eigener, dezidierter Server (zu Hause) betrieben werden, der öffentlich über eine eigene Domain erreichbar ist, auch wenn der vom Server genutzte Internetanschluss eine täglich wechselnde IP-Adresse hat.
Im Detail: Es sollen lokal ein oder mehrere Linux-Apache-Server betrieben werden (zum Beispiel ein klassischer LAMP-Server), die über das Internet über eine oder mehrere eigene Domains erreichbar sind. Die Fritz!Box und ein MyFRITZ!-Konto sollen dabei als Portweiterleitung und als Dynamisches DNS (DDNS oder DynDNS) dienen - ohne einen zusätzlichen DDNS-Anbieter. Ein DynDNS-Dienst ist notwendig, weil normalerweise bei einem herkömmlichen (privaten) Internetanschluss die Internet Protocol (IP) Adresse regelmäßig vom Anbieter neu vergeben wird, womit eine Weiterleitung einer Domain-Adresse an den Rechner zu Hause auf herkömmlichen Wege unmöglich ist. Idealerweise sollen die Verbindungen noch über gültige und anerkannte Transport Layer Security (TLS) - in der Vergangenheit vor allem auch unter Secure Sockets Layer (SSL) bekannt - verschlüsselt werden.
Hinweis:
Das Prinzip hinter dieser Anleitung funktioniert auch mit einem andern DDNS-Anbieter, anstatt einem MyFRITZ!-Konto, und auch mit praktisch jeden anderem Internetrouter, in dem man Portweiterleitungen einrichten kann. Der Fokus dieser Anleitung liegt jedoch auf der Fritz!Box in Verbindung mit einem MyFRITZ!-Konto.
Mögliche Anwendungsfälle¶
Mit Hilfe der hier dargestellten Konfiguration lassen sich viele Anwendungsfälle umsetzen. Nachfolgend eine Auswahl möglicher Szenarien:
Betrieb einer eigenen Cloud („self-hosted“), um unabhängig von kommerziellen Cloud-Diensten und den damit verbundenen Folgen für den Datenschutz zu sein
Groupware-Dienste (gemeinsamer Kalender, Team- und Projektverwaltung, etc.) für die Familie oder kleine Teams, zum Beispiel mit der Open Source Software EGroupware CE 🇩🇪
Bilder mit der Familie und Freunden teilen - Webbasierte Bildverwaltungssysteme
Ein privater Streaming-Dienst für die eigene Video -und Musiksammlung
Oder einfach nur, um eine selbst gemachte Webseite Freunden oder Kunden zu präsentieren
Voraussetzungen¶
Eine oder mehrere Domains, gehostet bei einen beliebigen Anbieter, der es erlaubt, eigene CNAME-Einträge vorzunehmen
Eine Fritz!Box
Ein oder mehrere an die Fritz!Box angeschlossene Ubuntu-Rechner mit laufendem Apache-Server
Vorbemerkungen¶
In diesem Howto wird nicht für jede Einstellung in der Fritz!Box eine detaillierte Schritt-für-Schritt-Anleitung geliefert. Hierfür wird jeweils auf die ausführlichen Anleitungen in der Wissensdatenbank 🇩🇪 von AVM, dem Hersteller der Fritz!Box, verlinkt.
Zum besseren Verständnis werden folgende Seiten empfohlen:
Anleitung¶
1. Ein MyFRITZ!-Konto anlegen¶
Falls noch nicht geschehen, muss ein MyFRITZ!-Konto angelegt werden, das allen Besitzern einer Fritz!Box von AVM kostenlos angeboten wird.
AVM hat hierzu eine Schritt-für-Schritt-Anleitung 🇩🇪 veröffentlicht.
Ist das erledigt, erhält man eine zufällig generierte eigene myfritz.net
Subdomain, nach dem Muster:
MEIN-SUBDOMAIN-SCHLÜSSEL.myfritz.net
myfritz.net kümmert sich nun darum, dass die Fritz!Box immer unter dieser Adresse erreichbar ist, auch wenn sich die IP täglich ändert, und fungiert damit als DDNS-Dienst.
2. Fritz!Box Freigabe einrichten¶
Als nächstes muss nun eine sogenannte "Fritz!Box Freigabe" eingerichtet werden.
Im Dialog-Fenster in der Fritz!Box "Internet ➡ Freigaben ➡ Portfreigaben ➡ Gerät für Freigaben hinzufügen" unter "Gerät" den gewünschten Ubuntu-Rechner auswählen und dann auf "Neue Freigabe" klicken.
Hier "MyFRITZ!-Freigabe" anklicken - nicht "Portfreigabe". Als "Anwendung" nun "HTTP-SERVER" auswählen. "Verzeichnis" leer lassen, dies wird später im Apache konfiguriert. "MyFRITZ!-Adresse" ebenfalls leer lassen; wird automatisch von der Fritz!Box vergeben.
Normalerweise kann man die per Default eingetragenen Portangaben (80 für HTTP beziehungsweise 443 für HTTPS) so belassen, da sie einer Standardinstallation eines Apache-Servers entsprechen.
3. CNAME Umleitung aktivieren¶
Nun muss der CNAME-Eintrag beim Hoster angepasst werden. Dort gibt man den von MyFRITZ! vergebenen Subdomain-Domainnamen plus den vorangestellten Rechner-Namen des freigegebenen Ubuntu-Servers ein, also mit folgenden Schema:
UBUNTU-RECHNER-NAME
.MEIN-SUBDOMAIN-SCHLÜSSEL
.myfritz.net
Ohne Protokollangaben eintragen, also ohne http://
oder https://
.
Die genau Angabe findet man, wenn man in der Fritz!Box die eingerichtete MyFRITZ!-Freigabe öffnet oder auch in der Übersicht seines myfritz.net 🇩🇪 Benutzerkontos.
Hinweis:
Es kann erfahrungsgemäß mehrere Tage dauern, bis der CNAME-Eintrag greift und der Heimrechner auch tatsächlich und dauerhaft unter der eingerichteten Domain erreichbar ist.
Optional: Virtual Host anlegen¶
Nun ist das Verzeichnis /var/www/html über die eingerichtete Domain erreichbar. Vielleicht möchte man aber nur ein bestimmtes Verzeichnis über die frisch eingerichtete Domain erreichbar machen. Das ist mittels der Einrichtung eines Virtual Hosts möglich. Ein Beispiel: Soll die neu eingerichtete Domain example.com
auf das Verzeichnis /var/www/vhosts/example.com/public geleitet werden, so könnte die Apache-Konfigurationsdatei für einen Virtual Host folgendermaßen aussehen:
1 2 3 4 5 6 7 8 9 10 11 | <VirtualHost *:80> ServerAdmin admin@example.com ServerName example.com DocumentRoot /var/www/vhosts/example.com/public ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined </VirtualHost> <Directory /var/www/vhosts/example.com/public/> AllowOverride All </Directory> |
Optional: TLS-Verschlüsselung¶
Hat man die Domainweiterleitung wie in dieser Anleitung beschrieben eingerichtet, so ist es auch problemlos möglich, eine von den gängigen Browsern als vertrauenswürdig akzeptierte SSL-Verschlüsselung einzurichten. Dies sollte üblicherweise der Standard sein, da heutzutage kaum noch ein Browser ohne Warnungen und Umwege unverschlüsselte Verbindungen oder ein nicht offiziell gültiges Zertifikat akzeptiert.
Dazu wird das Zertifikat direkt auf dem lokalen Server eingerichtet und nicht bei dem Hoster oder bei myfritz.net. Dies ist natürlich sehr komfortabel, da man auf dem lokalen Ubuntu-Rechner viel mehr Möglichkeiten hat und zum Beispiel die Erneuerung des Zertifikates automatisieren lassen kann.
Zunächst muss aber direkt in der Fritz!Box eine weitere Freigabe eingerichtet werden, genau wie oben beschrieben, mit dem Unterschied, dass als "Anwendung" "HTTPS-SERVER" gewählt werden muss (üblicherweise Port 443).
Hinweis:
Zwar ist es direkt in der Fritz!Box möglich, ein Sicherheitszertifikat automatisiert anlegen zu lassen (mit Let's Encrypt). Damit wird aber nur der externe Zugriff auf die Benutzeroberfläche der FRITZ!Box abgesichert. Eine Verschlüsselung der Verbindung zu einem angeschlossenen Ubuntu-Rechner ist damit leider nicht möglich.
Anleitungen um Zertifikate von Let’s Encrypt 🇩🇪 unter Ubuntu einzurichten:
Mehrere Domains verwalten¶
Es ist möglich, mit dieser Methode beliebig viele Domains auf lokale Rechner umzuleiten und auch für jede einzelne ein eigenes TLS-Zertifikat anzulegen. Allerdings kann man in der Fritz!Box selbst pro Port nur eine einzige Weiterleitung einrichten, sprich: der Port 80 kann zum Beispiel nur für einen angeschlossenen Rechner allein vergeben werden. Mögliche Lösungsansätze:
Einen anderen Port vergeben¶
Bietet sich vor allem an, wenn die verschieden Domains auch auch auf unterschiedlichen an der Fritz!Box angeschlossenen Rechnern betrieben werden sollen. Dazu für den neuen Rechner eine MyFritz!-Freigabe wie folgt einrichten:
"Anwendung:" "Andere Anwendung"
"Bezeichnung:" beliebig, zum Beispiel "HTTP-SERVER II"
"Schema:" "http//:"
"Port an Gerät:" Einen beliebigen, freien vergeben, zum Beispiel 8080
"Verzeichnis" und "MyFRITZ!-Adresse" frei lassen
Gegebenenfalls für das "Schema" "https:// "wiederholen, falls ein verschlüsselter Zugang erwünscht ist.
Nun wieder beim Hoster für die gewünschte Domain einen CNAME-Eintrag vornehmen:
UBUNTU-RECHNER-NAME-2
.MEIN-SUBDOMAIN-SCHLÜSSEL
.myfritz.net
Ohne Protokollangaben eintragen und auch ohne Portangabe.
Nachteil dieser Methode: Die Domain muss immer mit der Portangabe aufgerufen werden, zum Beispiel www.example.com:8080/impressum
.
Virtual Hosts einrichten¶
Sollen die verschiedenen Domains (auch Subdomains) ohnehin nur auf einem Apache-Rechner betrieben werden, so ist dies die beste Methode
Die MyFritz!-Freigabe wie oben ganz normal für den Apache-Rechner einrichten
Auf dem Apache-Rechner für jede (Sub-)Domain einen Virtual Host anlegen
Beim Hoster für jede Domain beim CNAME-Eintrag die selbe myfritz.net-Subdomain-Adresse eintragen
Falls Verschlüsselung erwünscht, für jede Domain ein Zertifikat einrichten
Sicherheitshinweise¶
Wie immer bei einem Rechner, der öffentlich erreichbar ist, gilt: Man setzt sich damit dem beträchtlichen Risiko diverser bösartiger Attacken aus. Neben den üblichen Risiken, hier eine - nicht vollständige - Liste von Sicherheitsrisiken, die beim Befolgen dieser Anleitung entstehen:
Der Rechner ist nicht nur unter der Domain erreichbar sondern auch unter
UBUNTU-RECHNER-NAME.MEIN-SUBDOMAIN-SCHLÜSSEL.myfritz.net
, unter der aktuellen IP-Adresse der Fritz!Box und womöglich noch unter weiteren Adressen.Hat man einen Virtual Host (siehe oben) für ein bestimmtes Verzeichnis eingerichtet, so ist das Verzeichnis /var/www/html mit einer Apache-Standardinstallation trotzdem noch erreichbar, wenn per IP oder der myfritz.net-Adresse zugegriffen wird.
Über den offenen Port an der Fritz!Box sind auch andere Rechner im selben internen Netzwerk gefährdet.
Hat ein Angreifer Kontrolle über den Apache-Server erlangt, sind auch andere am lokalen Netzwerk angeschlossene Geräte gefährdet.
Es sind geeignete Maßnahmen zu treffen, um den Angriffen vorzubeugen. Auch die folgende Liste ist nur eine Auswahl und erhebt keinen Anspruch auf Vollständigkeit.
Bestimmte oder alle Verzeichnisse per Apache mit sicheren Passwörtern schützen. Anleitung in der selfhtml-Wiki
Den Zugriff auf Apache-Verzeichnisse nur bestimmten (lokalen) IP-Adressen mittels „Whitelisting“ erlauben, zum Beispiel nur Rechnern aus dem lokalen Netzwerk. selfhtml-Wiki-Anleitung
Den Apache-Server in einem isolierten Netz betrieben, zum Beispiel durch Einrichtung des sogenannten „LAN-Gastzugang“ in der Fritz!Box. Der Server selbst kann aber nicht im „LAN-Gastzugang“ betrieben werden, da man dort keine Portweiterleitungen einrichten kann. Anleitung von AVM
Links¶
fail2ban Server gegen DoS absichern
Howto-Liste - Übersicht aller Howto-Artikel