Einstieg
Ein Klick – und wer ist alles dabei?
Der Server ruht nie. Nächstes nächtliches Backup in
--:--:--
Du tippst lernwerft.example ein. Wer ist alles beteiligt, bis die Seite erscheint?
Auftrag: Tippt alle an, die ihr für beteiligt haltet. Dann „Auflösen“.
Von den acht Karten sind fünf beteiligt: Browser, Netz, DNS, Firewall, Pförtner. Bei einer App kommt ihr Container dazu.
Das Backup von der Uhr links läuft nachts, ohne Besucher. GitHub und CodeLotse sind auch nicht dabei. Doch woher weiß der Browser, wo der Server steht?
Fachlich: DNS-Auflösung, TCP (oder QUIC), TLS, Reverse Proxy. DNS-Antworten werden zwischengespeichert.
Überblick · Der Hafenplan
Sechs Bauteile, ein Hafen
Hafenbild: der ganze Hafen · Fachbegriff: Architektur
Auftrag: Baut den Hafen Schritt für Schritt auf. Vermutet bei jedem Bauteil zuerst: Was ginge schief ohne? Dann aufdecken.
Bauteil 1 von 6
draußenBrowser
- Was macht es?
- Warum gibt es das?
- Was ginge schief ohne?
Station 1 · Der Weg einer Anfrage
Wo wohnt lernwerft.example – und welche Tür ist offen?
Telefonbuch = DNS · Hafenmauer = Firewall · Tür = Port
Auftrag: Schlagt die Adresse nach. Begründet dann für jede Tür: offen oder zu? Achtung bei 3000: Dort läuft doch die Quiz-App!
1 · Im Telefonbuch nachschlagen
Noch nicht nachgeschlagen.
Namen sind für Menschen, Nummern für Computer. Zieht der Server um, ändert man nur den Eintrag. Wer ihn ändern kann, lenkt alle Besucher um.
Name und Nummer sind für Beispiele reserviert, im echten Internet gibt es sie nicht.
Bei einer echten Domain (z. B. .de): Resolver → Root → Nameserver für .de → NamensAmt; Antworten werden zwischengespeichert (TTL). Reserviert: RFC 2606, 5737.
2 · Klopft an die Türen der Hafenmaueroffen gefunden: 0
Tippt eine Tür an.
Ein Server hat 65 535 Türen (Ports), je für TCP und UDP.
Firewall z. B. ufw oder nftables. Achtung Docker: Von Docker veröffentlichte Ports umgehen ufw. Darum Apps nur an 127.0.0.1 binden: "127.0.0.1:3000:3000" (zuverlässig ab Docker 28).
Station 1 · Der Weg einer Anfrage
Der Pförtner: Welche Anfrage geht wohin?
Pförtner = Caddy · Fachbegriff: Webserver, Reverse Proxy
Auftrag: Wählt eine Adresse. Sagt voraus, was der Pförtner damit macht. Dann tippt sie an.
Ins Adressfeld getippt
Wählt eine Adresse.
Das Zertifikat: Ohne Zertifikat kein HTTPS. Caddy holt es sich selbst und erneuert es rechtzeitig.
Per ACME von einer Zertifizierungsstelle; Prüfung über Port 80 (HTTP-01) oder 443 (TLS-ALPN-01). Rechts: Ausschnitt aus der Konfiguration.
lernwerft.example {
handle_path /quiz/* {
reverse_proxy 127.0.0.1:3000
}
handle {
root * /srv/lernwerft
file_server
}
}
Station 2 · Docker
Jede App in ihrem eigenen Container
Schiffscontainer = Docker-Container
Auftrag: Spielt ein paar Quizrunden. Vermutet dann: Was passiert mit den Ergebnissen, wenn die Container neu gebaut werden? Probiert beide Varianten.
Gespeicherte Quiz-Ergebnisse: 3
Wie ein Schiffscontainer
- genormtBringt alles mit, was die App braucht. Läuft darum auf jedem Linux-Server mit Docker gleich.
- abgeschlossenEigene Programme, eigene Datenbank. Apps kommen sich kaum in die Quere.
- austauschbarFür ein Update wegwerfen und neu bauen. Darum gehören die Daten nach draußen.
Aber: Abgeschlossen heißt nicht dicht. Alle Container teilen sich den Kern des Betriebssystems (Kernel).
Container ≠ virtuelle Maschine: gemeinsamer Linux-Kernel, Abschottung über Namespaces, Grenzen für Rechenzeit und Speicher über cgroups. Daten in Volumes oder Bind Mounts, z. B. ./quiz-daten:/data.
Station 2 · Docker
Wer ist der Container, wenn er ausbricht?
Fachbegriff: Benutzernummer (UID)
Auftrag: Wählt eine Benutzernummer für den Quiz-Container. Vermutet: Was erbeutet ein Angreifer, der ausbricht? Dann „Ausbruch!“.
Der Quiz-Container läuft als …
Echter Fund:Bei einer Überprüfung lief ein Container mit derselben Nummer wie der hafenmeister, der Admin-Benutzer.
Linux erkennt Benutzer an der Nummer, nicht am Namen. Ohne Zusatzschutz ist Nummer 1000 im Container dieselbe wie 1000 auf dem Server.
In Docker Compose: user: "10001:10001". Viele fertige Images bringen Benutzer 1000 mit; 1000 ist unter Linux oft der erste angelegte Mensch. Zusatzschutz: User Namespaces (userns-remap) oder rootless Docker.
Station 3 · Rollen und Rechte
Jeder bekommt nur die Rechte, die er braucht
Hafenmeister, Werkstatt = Benutzer · Fachbegriff: Prinzip der minimalen Rechte
Auftrag: Tippt die Felder an: Wer darf was? (einmal = ✓ darf, noch einmal = ✗ darf nicht). Dann vergleicht mit der Lösung.
| sich per SSH anmelden | Testserver starten | Apps veröffentlichen | Server verwalten | echte Quiz-Daten ändern | |
|---|---|---|---|---|---|
| hafenmeisterAdmin | |||||
| werkstattEntwicklung | |||||
| Dienst „quiz“die Quiz-App |
Faustregel
Jeder bekommt nur die Rechte, die er wirklich braucht. Das gilt für Menschen, Dienste und Container.
- werkstatt entwickelt, ändert aber nichts Produktives. Ein Fehler beim Testen trifft nicht die echte App.
- Dienste bekommen eigene Benutzer ohne Login. Wer einen Dienst übernimmt, kommt nur an dessen Daten und nicht per SSH herein.
- hafenmeister darf alles. Darum benutzt man ihn nur, wenn es nötig ist.
Mitglied der Gruppe docker zu sein, wirkt wie Administrator-Rechte (Docker-Doku); werkstatt gehört nicht hinein. Dienstbenutzer mit Shell /usr/sbin/nologin; SSH nur für AllowUsers hafenmeister werkstatt. Grundsatz nach Saltzer und Schroeder (1975): „least privilege“.
Station 4 · Sicherer Zugang
Schlüssel statt Passwort – einer pro Gerät
Schloss am Server, Schlüssel in der Tasche = SSH-Schlüsselpaar
Auftrag: Das iPad geht verloren. Was müsst ihr tun? Vermutet für beide Varianten, dann tippt „iPad verloren“.
Server: erlaubte Schlösser
Der öffentliche Schlüssel ist das Schloss am Server; ihn darf jeder sehen. Der private Schlüssel bleibt auf dem Gerät, geschützt durch eine Passphrase.
Drei Regeln für die Tür 22
- 1Anmelden nur mit Schlüssel. Passwörter lassen sich durchprobieren.
- 2Nie direkt als root. Den Namen root kennt jeder, und root hat sofort alles. Man meldet sich als hafenmeister oder werkstatt an.
- 3Beim ersten Verbinden den Fingerabdruck des Servers prüfen. Sonst merkt man nicht, wenn sich jemand dazwischenschiebt.
Technisch: Das Gerät unterschreibt mit dem privaten Schlüssel eine Kennung, die nur für diese Verbindung gilt; der Server prüft mit dem öffentlichen (RFC 4252). In sshd_config: PasswordAuthentication no, KbdInteractiveAuthentication no, PermitRootLogin no; prüfen mit sudo sshd -T.
Station 4 · Sicherer Zugang
Drei Situationen: Was tut ihr?
Fachbegriffe: Fingerabdruck, Zwei-Faktor, Tunnel
Auftrag: Lest die Situation, entscheidet gemeinsam, dann „Auflösen“.
Beim ersten Verbinden zeigt SSH einen Fingerabdruck des Servers, den ihr nicht kennt.
Nur über einen zweiten Weg merkt ihr, ob ihr wirklich mit eurem Server sprecht. Danach merkt sich SSH den Fingerabdruck und bricht ab, wenn er sich ändert.
Das Passwort eures Kontos bei ServerHafen taucht in einem Datenleck auf.
Das Konto steht über allen Schutzschichten: Wer es hat, setzt den Server neu auf oder öffnet die Konsole. Darum ist Zwei-Faktor (Passwort plus zweiter Nachweis, z. B. Code vom Handy) hier der größte Hebel: bei ServerHafen, NamensAmt, DeichDepot, GitHub und beim E-Mail-Konto.
Im Schul-WLAN kommt keine SSH-Verbindung zum Server zustande, zu Hause klappt sie.
Das Schul-WLAN sperrt Tür 22. Durch den Tunnel läuft SSH trotzdem. Vorher klären, ob die Nutzungsordnung das erlaubt.
Tailscale: WireGuard, notfalls über Relais (DERP). Zwei-Faktor beim Konto, mit dem man sich anmeldet.
Station 5 · Backup
Drei Kopien, zwei Medien, eine außer Haus
DeichDepot = Backup bei einem anderen Anbieter · Fachbegriff: 3-2-1-Regel
Auftrag: Wählt ein Unglück. Vermutet zuerst: Welche Kopie rettet uns?
Server–
bei ServerHafen, das Originaljede Nacht 03:30
DeichDepot–
mit restic: verschlüsselt, versioniert; dazu eigene Schnappschüssewöchentlich, Zugang nur lesen
Laptop–
holt sich eine KopieTime Machine
Platte A–
verschlüsselt, zu HausePlatte B–
verschlüsselt, anderes GebäudeGezählt: Server, Depot, Laptop, Platte A und B. restic: AES-256, Snapshots; der Server darf nur hinzufügen (append-only), aufgeräumt wird von anderswo (forget --prune). Passwort auch außerhalb des Servers aufbewahren.
Was passiert, wenn …
Wählt ein Unglück.
Station 5 · Backup
Drei Merksätze, die Backups retten
Fachbegriffe: Synchronisation, Wiederherstellung, Totmannschalter
Auftrag: Probiert jeden Kasten aus. Formuliert danach jeden Merksatz in eigenen Worten.
1 · Sync ist kein Backup
Sync spiegelt jede Änderung, auch Löschen und Verschlüsseln.
2 · Erst die Wiederherstellung zählt
- ✓Sicherung von letzter Nacht auswählen
- ✓mit dem Passwort entschlüsseln
- ✓auf einen Testrechner zurückspielen
- ✓App starten, Daten prüfen
Ein Backup gilt erst, wenn die Wiederherstellung getestet ist. Ohne Passwort ist die verschlüsselte Sicherung wertlos.
Datenbanken vorher als Dump sichern; der Test zeigt, ob es klappt.
3 · Der Totmannschalter
Nach jedem Backup schickt der Server eine Erfolgsmeldung an einen Alarmdienst. Bleibt sie aus, meldet sich der Dienst.
Station 6 · Arbeiten mit KI
KI hilft – ein Mensch entscheidet
Lotse = Coding-KI · Repository = Projektordner mit allen Versionen
Auftrag: Tippt die Wege an. Wo entscheidet ein Mensch? Wer kommt nicht an den Server?
Tippt einen Weg an.
Wie ein Lotse berät die KI; entscheiden muss ein Mensch. Ihre Vorschläge klingen überzeugend und können trotzdem falsch sein. GitHub ist Drehscheibe und Gedächtnis: Frühere Versionen bleiben gespeichert, jede Änderung ist nachvollziehbar.
Station 6 · Arbeiten mit KI
Wie weit kommt ein Fehler?
Fachbegriffe: Pull statt Push, Reichweite eines Schadens
Auftrag: Wählt einen Fall. Vermutet zuerst, wie weit der Schaden reicht. Beim GitHub-Fall: Schaltet zwischen Pull und Push um.
Der Fall
Wählt einen Fall.
Nicht verwechseln: Ein Pull Request ist ein Änderungsvorschlag. „Pull“ beim Veröffentlichen heißt: Der Server holt ab.
Reichweite des Schadensunten klein, oben groß
Push-Deployment, z. B. über GitHub Actions mit einem SSH-Schlüssel als Secret: Wer Schreibrechte am Repository hat, kann die Secrets benutzen. Einschränken lässt sich das, ganz ohne Schlüssel ist es sicherer.
Station 7 · Datenschutz
Wer erfährt, dass du die Seite besuchst?
Fachbegriffe: personenbezogene Daten, Auftragsverarbeitung
Auftrag: Schaltet die fremden Server an und aus. Zählt: Wer bekommt eure IP-Adresse?
Webserver, die deine IP-Adresse bekommen: 2 davon 1 fremder
Das Netz und das DNS sehen sie ohnehin (Station 1).
LG München I, 20.01.2022: Eine Website ließ Google Fonts von Google-Servern laden. So ging die IP-Adresse eines Besuchers ohne Einwilligung an Google. Rechtswidrig, weil man die Schrift auch auf dem eigenen Server einbinden kann: 100 € Schadensersatz.
Vier Regeln für den eigenen Server
- 1Schriften und Bibliotheken selbst hosten: Sie liegen auf dem eigenen Server.
- 2Vertrag zur Auftragsverarbeitung (AVV) mit ServerHafen und DeichDepot: Sie verarbeiten Daten in unserem Auftrag.
- 3Logs nur begrenzt aufheben. Auch sie enthalten IP-Adressen.
- 4Nur so viele Daten wie nötig. Was man nicht speichert, kann nicht verloren gehen.
DSGVO: Art. 28 (Auftragsverarbeitung), Art. 5 Abs. 1 lit. c (Datenminimierung) und lit. e (Speicherbegrenzung). Urteil: Az. 3 O 17493/20, Art. 82 DSGVO. IP-Adressen können personenbezogen sein (EuGH, 19.10.2016, C-582/14, Breyer). Diese Klicktafel lädt ihre Schriften aus dem eigenen Ordner schriften/.
Station 8 · Was die Überprüfung fand
Vier echte Funde – und was sie lehren
Fachbegriff: Bestandsaufnahme (Audit)
Auftrag: Lest einen Fund. Was kann passieren? Welche Station hätte ihn verhindert? Erst überlegen, dann aufdecken.
Sicherungskopien lagen im öffentlichen Webordner und waren abrufbar.
Risiko: Wer den Dateinamen errät, lädt alle Daten herunter.
Besser: Sicherungen nie in den Webordner, sondern verschlüsselt ins DeichDepot.
Station 1 (Pförtner) und 5 (Backup)
Eine Verwaltungsschnittstelle des Webservers war für jeden Benutzer auf dem Server erreichbar.
Risiko: Auch werkstatt oder ein übernommener Dienst hätte den Pförtner umstellen können.
Besser: nur für den hafenmeister freigeben oder abschalten.
Station 3 (Rollen und Rechte)
Alte Testserver liefen wochenlang weiter und belegten fast die Adresse einer echten App.
Risiko: Alter Code mit Lücken; ein Zahlendreher im Port, und Besucher landen im Testserver.
Besser: Testserver nach Gebrauch beenden, regelmäßig nachsehen.
Keine Station allein: Genau dafür gibt es die Bestandsaufnahme.
Es gab kein externes Backup, nur Kopien auf derselben Festplatte.
Risiko: Platte kaputt oder Konto gesperrt: Original und Kopie sind zusammen weg.
Besser: 3-2-1 mit dem DeichDepot bei einem anderen Anbieter.
Station 5 (Backup)
Bestandsaufnahme z. B. mit ss -tlnp, docker ps -a, systemctl list-timers, Blick in den Webordner. Fund 2 bei Caddy: Admin-API auf localhost:2019; besser als Unix-Socket mit Dateirechten (admin unix//…).
Abschluss
Welches Bauteil hilft bei welchem Problem?
Auftrag: Tippt erst ein Problem an, dann das passende Bauteil (oder umgekehrt). Jedes Bauteil passt genau einmal.
Zu A: Ports, die Docker veröffentlicht, umgehen ufw. Darum Apps zusätzlich nur an 127.0.0.1 binden (Station 1).