Der Server, den ein Port-Scanner nicht findet
Der trutz.io-Server hat von außen keinen offenen SSH-Port und keine erreichbare Kubernetes-API. Ein Port-Scanner läuft auf jedem TCP-Port in den Timeout. Und trotzdem logge ich mich auf diesem Server jeden Tag ein, ganz normal, per SSH.
Warum der Aufwand? Weil ein offener Port 22 keine theoretische Angriffsfläche ist. Ich habe es gemessen: Für das Video habe ich einen zweiten, nackten Hetzner-Server hochgezogen, Port 22 offen für die ganze Welt, so wie in jedem Schnellstart-Tutorial. Der erste Angriff kam nach 113 Sekunden. In einer Nacht waren es 2013 fehlgeschlagene Login-Versuche aus 63 IP-Adressen, im Schnitt 145 pro Stunde, auch nachts um drei.
Die Alternative ist nicht, die Tür besser zu bewachen. Die Alternative ist, von außen gar keine Tür zu haben:
Der sicherste Admin-Zugang ist der, den ein Port-Scanner nicht einmal finden kann.
Die komplette Firewall des Servers sind zwei Regeln: Ping und ein UDP-Port für WireGuard. Und WireGuard hat eine Eigenschaft, die dafür perfekt ist: Auf Pakete ohne gültigen Schlüssel antwortet es überhaupt nicht. Der Port, hinter dem der komplette Admin-Zugang hängt, ist im Scan von einem toten Port nicht zu unterscheiden.
| Video ansehen → |
Im Video baue ich den Server komplett nach, mit OpenTofu auf Hetzner: die zwei Firewall-Regeln, der Tunnel, die Provisionierung über cloud-init, ganz ohne offene Tür. Und dann werfe ich ihn live weg und baue ihn mit einem Kommando wieder auf, ohne dass sich seine Adresse ändert.
Eine Messung hat mich dabei selbst überrascht: Ich dachte, der WireGuard-Private-Key liegt über user_data im OpenTofu-State. Tut er nicht, der Hetzner-Provider speichert nur einen SHA-1-Hash. Verschlüsselt habe ich den State trotzdem, denn das Hashing ist ein Implementierungsdetail eines einzelnen Providers, und in gespeicherten Plan-Dateien stehen sensitive Variablenwerte sehr wohl im Klartext. Auch das zeige ich im Video, mit einem grep in die Plan-Datei.
Zum Ausdrucken und Weitergeben: die Firewall-Minimalregeln, die WireGuard-Vorlage, der encryption-Block, das Wegwerf-Rezept und die Nachweis-Kommandos, als Spickzettel im PDF-Format, drei Seiten, auch fürs Team.
Lieber lesen als schauen? Die Langfassung mit allen Messungen steht als Beitrag im Blog, inklusive der Frage, wo die Wegwerf-These ihre Grenze hat.
Der Satz, der davon bleibt: Die kleinste Angriffsfläche hat die Tür, die es von außen nicht gibt.
Bis nächste Woche,
Christian