Self-Host Extravaganza

Allerspätestens seit dem Wegfall von Google Reader (Jaja, ich weiß, Opa erzählt zum hundertsten Male davon, wo ist mein Fuffi?) betreibe ich meine meistgenutzten Dienste bevorzugt selbst. Eigentlich soll es hier nicht um die einzelnen Services gehen, aber um mal einige übliche Verdächtige erwähnt zu haben:

  • Pi-Hole (Werbe- und Trackingblocker auf DNS-Ebene)
  • PiVPN (Wireguard-VPN nach Hause für die gelegentlichen Roadwarrior-Tage)
  • Calibre-Web (Ich habe meine Bücher gerne überall verfügbar)
  • Komga (Weil Calibre-Web nicht gut mit Comics und Mangas umgehen kann)
  • Paperless-ng (Papierkram ohne Papier ist bestes Papierkram)
  • Homer (Den ganzen Krempel kann sich ja keiner merken, ein übersichtliches Dashboard wirkt Wunder)

Die allermeißten dieser Dienste inklusive ihrer Abhängigkeiten, zum Beispiel Datenbanken, laufen bei mir mittlerweile unter Docker (nach den ersten erfolgreichen Gehversuchen wurde der holprige jetzt-mache-ich-es-richtig-Einstieg hier angesprochen). Das macht Dinge zwar insgesamt komplexer, bei der regelmäßigen Wartung jedoch einfacher, denn damit sind Erweiterungen, Verkleinerungen, Backups und Wiederherstellungen bequem umzusetzen.

Ich kann meine Konfigurationen in Gestalt von Docker-Compose-Dateien in einem Git-Respository verwalten und den persistenten Nutzdatenbestand mit simplen Befehlen an zentraler Stelle wegsichern. Meine Infrastruktur ist ständig im Wandel und ich stellte nicht nur einmalig erst nach Wochen fest dass irgendwas im Backup fehlt, nur weil ich in irgendeinem Script einen neuen Pfad einzutragen vergaß. Jetzt: rsync -a /var/lib/docker/volumes/ /pfad/zum/backup1 und gut ist.

Docker macht es leicht und verführt dazu noch einen draufzusetzen: Statt nun also mit http://host:8080 für Calibre-Web, http://host:8081 für Komga und so weiter herumzuhantieren, knalle ich also den Reverse Proxy Traefik davor, und in Verbindung mit Pi-Hole kann ich lokal auch beliebige Domains in die einzelnen Container leiten. Und schon stehen unsere Dienste unter netten und aussagekräftigen Adressen wie http://books.lan oder http://comic.lan in unserem Heimnetz zur Verfügung.

Wie bitte? Noch etwas aufwendiger? Okay, nichts leichter als das: Heutzutage hat man dank des Internet of Things gerne unzählige Geräte mit zweifelhaften Eigenschaften in puncto Sicherheit im Netzwerk. Idealerweise spannt man für diese Gesellen ein eigenes Netz auf, aber es hilft (auch gerne zusätzlich), das eigene LAN als nicht vertrauenswürdig einzustufen. Ergo hätten wir gerne eine Transportverschlüsselung für unsere Dienste. TLS zu Hilfe!

Traditionell bemühte man dafür selbstsignierte Zertifikate, aber wer wären wir, wenn wir wie so'n Höhlenmensch in jedem Browser auf jedem Gerät dafür diese ekligen Warnungen wegklicken und die hässlichen, durchgestrichenen Vorhängeschlösser in unseren Adressleisten dulden würden? Zum Teufel damit, sage ich euch!

Abgesehen von ästhetischen Gründen gibt es damit auch handfeste Probleme, wenn man beispielsweise eine Smartphone-App in Verbindung mit einem unserer Intranetdienste nutzt, denn diese sind bei selbstsignierten Zertifikaten in der Regel stur wie ein Esel, zumindest unter iOS.

Was also tun? Vielleicht folgendes: Sich eine Domain klicken, ein Zertifikat von Let's Encrypt besorgen (Bonuspunkte für Wildcard via DNS-Challenge2) und dann abermals mit Pi-Hole die DNS-Anfragen dorthin in Richtung Traefik umbiegen.

https://paperless.example.xyz macht schon ordentlich was her, ist nicht von Hans und Franz aus dem Netz abruf- und damit angreifbar und Apps stinken nun nicht mehr wegen Validierungsfehlern rum. Dank PiVPN, beziehungsweise Wireguard ist der ganze Spaß auch von unterwegs erreichbar. Win-Win-Win, die Menge tobt.

  1. Na gut, in der Praxis wird es dann doch leicht komplexer, aber hier geht es nur um Veranschaulichung, lasst mich in Ruhe. 

  2. Was sich so auch wunderbar automatisieren lässt, sofern man (API-) Zugangsdaten für den Domainregistrar auf dem Server liegen lassen kann/möchte.