CluPilotCloud/tests/Feature/Provisioning
nexxo c99911ca55 Sicherheitsdurchsicht: Passwort-Logins am Host zu, und die Konsole sagt selbst, wo sie offensteht
DER FUND. Auf einem uebernommenen Host blieb die Anmeldung als root MIT PASSWORT
erlaubt. Port 22 steht waehrend der ganzen Uebernahme offen im Internet — die
Host-Firewall macht ihn erst als vorletzter von sechzehn Schritten zu. Dazwischen
lag ein Fenster von Stunden, in dem jede Maschine der Welt Root-Passwoerter
durchprobieren durfte. Und wer spaeter das Notfallskript benutzt, reisst es
wieder auf.

EstablishSshTrust schreibt jetzt /etc/ssh/sshd_config.d/99-clupilot.conf und
verbietet Passwort-Anmeldung. Der Zeitpunkt ist genau richtig gewaehlt: eine
Zeile darueber hat sich `keyLogin()` erfolgreich MIT DEM SCHLUESSEL angemeldet —
wir wissen also, dass der Weg hinein steht, bevor wir den anderen zumachen.
`reload` statt `restart`, und `sshd -t` davor. Ein Fehlschlag bricht die
Uebernahme NICHT ab: eine Haertung, die einen ganzen Aufbau scheitern laesst,
wird beim naechsten Mal weggelassen.

DIE KONSOLE SAGT ES JETZT SELBST. Neue Pruefgruppe „Sicherheit" auf der
Bereitschaftsseite, drei Punkte, alle drei aus dieser Durchsicht:

- Ist die Konsole ueberhaupt eingeschraenkt? (blockierend)
- Steht in TRUSTED_RANGES nur, was dort hingehoert? Alles andere wurde von Hand
  in die .env geschrieben und erscheint in der Oberflaeche als „nicht
  entfernbar" — beim naechsten Anschlusswechsel ein Aussperren.
- Haengen APP_PORT/REVERB_HOST_PORT auf der Schleife? Docker traegt
  veroeffentlichte Ports VOR der Firewall ein: ein Dienst auf 0.0.0.0 ist von
  aussen erreichbar, auch wenn ufw zu aussieht — und wer ihn direkt anspricht,
  geht am Reverse Proxy vorbei, an dessen Zugangsliste und an TLS.

Diese Entwicklungsmaschine meldet prompt zwei davon. Genau dafuer ist die Gruppe
da: eine fehlende Einrichtung faellt beim ersten Versuch auf, eine offene Tuer
nie — bis sie jemand benutzt.

WAS DIE DURCHSICHT SONST ERGAB, und was in Ordnung ist: TrustProxies traut nur
privaten Bereichen und ausdruecklich NICHT X-Forwarded-Host, eine gefaelschte
Herkunftsadresse greift also nicht. Zwei-Faktor ist erzwungen, nicht optional.
Die Anmeldung bremst nach fuenf Versuchen. Geheimnisse liegen mit eigenem
Schluessel verschluesselt. Die Host-Firewall laesst 22 und 8006 nur aus dem
Tunnel. Der Terminal-Pfad umgeht die Netzsperre bewusst — sein Riegel ist das
Einmal-Ticket, dreissig Sekunden, an Host und Betreiber gebunden.

2523 Tests gruen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-03 10:28:56 +02:00
..
BridgeScriptTest.php Codex-Runde 2: der Gateway-Fix erreichte den Produktivpfad nicht 2026-08-01 13:34:12 +02:00
CollectHostLoadTest.php Release v1.3.93 — die Seite konnte den Host gar nicht fragen 2026-08-01 11:23:00 +02:00
CustomerDataModelTest.php Release v1.3.85 — Handshake-Prüfung hing an einem Programm, das es nicht gibt 2026-08-01 03:00:19 +02:00
CustomerProvisioningEndToEndTest.php Release v1.3.85 — Handshake-Prüfung hing an einem Programm, das es nicht gibt 2026-08-01 03:00:19 +02:00
CustomerStepBaseTest.php Die neue Leiter: Start 39, Team 79, Business 139 2026-08-01 17:05:58 +02:00
CustomerStepsTest.php Release v1.3.85 — Handshake-Prüfung hing an einem Programm, das es nicht gibt 2026-08-01 03:00:19 +02:00
DataModelTest.php Make host onboarding survive the machine it runs on 2026-07-30 00:54:16 +02:00
EndInstanceServiceTest.php Take the address by field, fix the customer type, ask why they leave 2026-07-30 16:41:32 +02:00
HetznerCloudDnsTest.php Hetzner-Cloud-DNS, Bereitschaftsseite aus sich heraus behebbar 2026-07-31 19:50:01 +02:00
HostOnboardingEndToEndTest.php Hostnamen vergibt CluPilot: ein Name statt zweier, und der Zaehler ueberlebt das Loeschen 2026-08-01 13:45:43 +02:00
HostStepsTest.php Sicherheitsdurchsicht: Passwort-Logins am Host zu, und die Konsole sagt selbst, wo sie offensteht 2026-08-03 10:28:56 +02:00
HostTokenKeyMigrationTest.php Make host onboarding survive the machine it runs on 2026-07-30 00:54:16 +02:00
InstanceRestartTest.php Fix nine defects in the provisioning pipelines 2026-07-30 01:34:55 +02:00
LiveProgressTest.php Send a guest bounced off the console to the console's own sign-in 2026-07-28 13:32:05 +02:00
PipelineRegistryTest.php Fix nine defects in the provisioning pipelines 2026-07-30 01:34:55 +02:00
PruneHostDnsTest.php Hetzner-Cloud-DNS, Bereitschaftsseite aus sich heraus behebbar 2026-07-31 19:50:01 +02:00
RunRunnerTest.php Fix nine defects in the provisioning pipelines 2026-07-30 01:34:55 +02:00
ServicesTest.php Hostnamen vergibt CluPilot: ein Name statt zweier, und der Zaehler ueberlebt das Loeschen 2026-08-01 13:45:43 +02:00
StoragePackHeadroomTest.php Die neue Leiter: Start 39, Team 79, Business 139 2026-08-01 17:05:58 +02:00
StripeWebhookTest.php Stop charging for a service that has ended 2026-07-30 00:52:19 +02:00
SubscriptionSnapshotTest.php Die neue Leiter: Start 39, Team 79, Business 139 2026-08-01 17:05:58 +02:00
TickProvisioningTest.php feat(billing): the plan catalogue becomes three tables, and config stops selling 2026-07-26 12:05:56 +02:00