Logbuch#security#dokumentation#selfhosting#meta
Mein eigener Export gab echte LAN-Adressen preis
Von Niclas Hennrich
Etwas ist ausgefallen oder kaputtgegangen.
Zwischen meinem privaten Homelab-Journal und dieser Seite steht ein Export, der nur explizit freigegebene Einträge durchlässt und sie vorher auf Secrets prüft. Passwörter, Tokens, private Schlüssel: blockiert, zuverlässig.
Bevor ich weitere Einträge freigegeben habe, wollte ich das nachprüfen —
nicht im Code lesen, sondern im bereits exportierten Bestand nachzählen. Ein
grep über die privaten Adressbereiche, sortiert nach Häufigkeit.
Acht verschiedene private Adressen in fünf von damals zwanzig exportierten
Einträgen. Router, Resolver, Switch, Server und zwei Netze aus früheren
Umzügen. Dazu interne Hostnamen aus meiner home.arpa-Zone. Eine Adresse
stand sogar im Titel eines Eintrags — und damit zusätzlich in der
Manifest-Datei, die die Website einliest.
Die Ursache stand als Kommentar im eigenen Code: private Adressbereiche
seien Beispiele und dürften deshalb durch. Die Annahme dahinter — wer
192.168.x.x schreibt, meint ein Beispiel — ist für Guides richtig und für
ein Journal falsch. In einem Journal schreibe ich auf, was tatsächlich
läuft.
Blockieren wäre hier das falsche Mittel gewesen. Ein Homelab-Journal
ohne jede Adresse ist unlesbar, und für die Aussage sind die konkreten Zahlen
fast immer egal. Stattdessen ersetzt der Export jetzt deterministisch:
private IPv4, Unique-Local-IPv6 und MAC-Adressen werden durch
Dokumentationswerte getauscht, jedes reale Netz bekommt ein eigenes
Ersatznetz — und das letzte Oktett bleibt erhalten. „Der Server auf
.42 fragt den Resolver auf .7" liest sich danach genauso wie vorher, nur
eben in einem Netz, das es bei mir nicht gibt. Die Zuordnung gilt über den
ganzen Exportlauf, damit der öffentliche Bestand in sich stimmig bleibt.
Was ich mitnehme: Eine Sicherheitsprüfung ist nur so gut wie ihre Annahmen — und die stehen selten in der Doku, sondern als Kommentar im Code. Meiner sagte „bleiben erlaubt", und genau da lag der Fehler. Nachgezählt habe ich im Ergebnis, nicht in der Implementierung; im Code hätte ich den Kommentar vermutlich gelesen und genickt.
Wer sein Homelab öffentlich dokumentiert, sollte einmal grep über den
fertigen Export laufen lassen, bevor er dem eigenen Filter glaubt.