Lässt es sich mit cremefarbenem Papier, einer Tönung, mehr Kontrast oder größerer Schrift besser lesen? Wählen Sie Ihre Farben und Ihre Schrift, einmalig für alle Seiten.

Kostenlose Lektion

Einen Webserver sicher ausliefern

Nach dieser Lektion: Ich kann die Einstellungen eines Webservers mit einer Checkliste prüfen.

Lektion, 55 Min.5 BefehleWebserver-Härtungslab: eine schwache nginx-Konfiguration reparieren und mit curl prüfen

Die Bäckerei, die Fremden zu viel verriet

Eine Bäckerei stellt ihre Webseite online. Niemand bricht ein. Doch jeder sieht, welche Software läuft, kann eine Sicherungsdatei lesen und einen Ordner mit Lieferantennamen auflisten.

Die Einstellungen waren die, mit denen die Software kam. Sichere Voreinstellungen sind die erste Aufgabe, wenn Sie einen Server ausliefern.

Am Ende dieser Lektion

Notiz

Ich kann die Einstellungen eines Webservers mit einer Checkliste prüfen.

Schlüsselbegriffe

BegriffWas er bedeutetBeispiel
HärtungEinstellungen so ändern, dass ein System weniger verrät und erlaubt
Headereine Zeile mit Angaben, die mit einer Antwort des Webservers reist
Statuscodedie Zahl, die sagt, wie eine Anfrage verlief404
Voreinstellungdie Einstellung, die gilt, wenn niemand eine gewählt hat
Angriffsflächealles, was ein Fremder erreichen kann
Neuladeneinen Server seine Einstellungen neu lesen lassen, ohne ihn zu stoppen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Ein Server antwortet mit mehr als einer Seite

Jede Antwort eines Webservers trägt einen Statuscode und einige Header. Der Code sagt, wie es lief: 200 klappte, 404 nicht gefunden, 405 Methode nicht erlaubt.

Header können zu viel verraten. Jede Angabe, die ein Fremder erfährt, vergrößert Ihre Angriffsfläche ein wenig.

Ihr Lab hat den Webserver einer Bäckerei namens web. Diese drei Runs sehen nur an, was er sagt.

Die Header einer Antwort lesen

Befehl
curl -s -I http://web

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Seite anfordern, die fehlt

Befehl
curl -s -o /dev/null -w "%{http_code}\n" http://web/gibt-es-nicht

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Methode probieren, die eine statische Seite ablehnt

Befehl
curl -s -o /dev/null -w "%{http_code}\n" -X DELETE http://web/

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Eine Prüfung vergleicht Einstellungen mit einer Checkliste

Um einen Server zu härten, lesen Sie seine Einstellungen Zeile für Zeile und stellen jedes Mal dieselben Fragen. Verrät er zu viel? Erlaubt er zu viel? Schreibt er ein Log?

Eine Voreinstellung soll den Start leicht machen, nicht den Dauerbetrieb sicher. Die Tabelle nennt einige häufige Risiken.

Beispiel: eine Checkliste

EinstellungRisikoSicherere Wahl
Alte ProtokollversionenBekannte Schwachstellen bleiben ausnutzbarNur die neueren erlauben
Keine Grenze für UploadsEine Person füllt die PlatteEine passende Grenze setzen
Zugriffslog ausNiemand sieht, was geschahZugriffe ins Log schreiben
Jede Seite darf die API rufenFremde Seiten lesen Ihre DatenErlaubte Seiten benennen

Die Zellen, die Lernende ausfüllen, bleiben in dieser Vorschau leer.

Die Einstellungen eines Shops zum Prüfen

Code: bash
server {
    listen 443 ssl;
    server_name buecher.example.com;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    client_max_body_size 0;
    access_log off;
    add_header Access-Control-Allow-Origin *;
    location / {
        proxy_pass http://127.0.0.1:3000;
    }
}

Ein häufiger Irrtum

Warnung

Viele glauben, das Verbergen der Versionsnummer mache einen Server sicher. Es verbirgt nur einen Hinweis. Ein Fremder kann weiter alle bekannten Fehler probieren. Verbergen Sie den Hinweis, halten Sie auch die Software aktuell und entfernen Sie, was nicht dort sein soll.

Erst testen, dann neu laden

Bei einem Neuladen liest der laufende Server neue Einstellungen, ohne einen Besuch zu verlieren. Ist die Datei fehlerhaft, lehnt nginx sie ab und läuft mit den alten weiter. Beim nächsten Neustart aber startet er gar nicht.

Darum testen Sie die Datei zuerst. nginx hat einen Test, der die Einstellungen liest und sagt, ob sie gültig sind. Erst dann laden Sie neu.

Ein Prüfskript macht aus jeder Regel der Checkliste ein Bestanden oder Durchgefallen, damit eine Maschine die Prüfung wiederholt. Das Lab hat eines, nutzen Sie es nach der Lektion.

Die Einstellungen testen, nichts ändern

Befehl
docker exec web nginx -t

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Fragen, welche Version läuft

Befehl
docker exec web nginx -v

Hier angezeigt, nicht ausgeführt. Erstellen Sie ein kostenloses Konto, um „Ausführen“ zu drücken und ihn im Terminal Ihres eigenen Labs einzugeben.

Weiterführend: eine siebte Regel

Ergänzen Sie in Ihrer Lösung der Aufgabe eine siebte Regel. client_max_body_size mit einem Wert über 100 Megabyte, etwa 500m oder 1g, ist hohes-upload-limit.

Schreiben Sie zwei eigene Tests: einen, bei dem client_max_body_size 500m; den Befund liefert, und einen, bei dem client_max_body_size 50m; keinen liefert.

Über dieses Lab und seinen Quellcode: Webserver-Härtungslab: eine schwache nginx-Konfiguration reparieren und mit curl prüfen

Sie unterrichten eine Gruppe? Weisen Sie dieses Modul Ihren Studierenden zu, mit Handbuch für Lehrende, automatisch geprüften Aufgaben und einem Lab für jede Person.