staging.inyokaproject.org

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

Server 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.

szenario.png

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

Diese Revision wurde am 14. Januar 2022 15:07 von noisefloor erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Howto