From ff28f01ce07e3a14fd076382ba11bb03c82199d9 Mon Sep 17 00:00:00 2001 From: hkoeck Date: Sun, 31 May 2026 22:57:29 +0200 Subject: [PATCH] Verlinke pro Challenge die passende offizielle Doku MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Jede Challenge in challenges.html bekommt direkt unter dem Titel eine Doku-Zeile, die auf die jeweils einschlaegige Direktive/Doku zeigt - so finden Teilnehmer die maßgebliche Quelle statt zu googeln. - 1-9, 11: offizielle nginx-Modul-/Direktiven-Doku (location, proxy_pass, upstream, rewrite, add_header, allow/deny, log_format, proxy_hide_header, return, Load-Balancing-Guide) - 10: configuring_https_servers + ngx_http_ssl_module + Easy-RSA - 12: ssl_protocols + add_header + HSTS (MDN) - 13: Wireshark TLS-Wiki Alle Ziel-URLs vorab auf HTTP 200 geprueft; Links oeffnen in neuem Tab (target=_blank rel=noopener). Co-Authored-By: Claude Opus 4.8 --- proxy/html/challenges.html | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/proxy/html/challenges.html b/proxy/html/challenges.html index e07b451..9ba4104 100644 --- a/proxy/html/challenges.html +++ b/proxy/html/challenges.html @@ -196,6 +196,7 @@
Easy 1) Routing verstehen (aktiv) +

nginx-Doku: location · proxy_pass

Muss: zuerst in proxy/nginx.conf nachsehen, dann testen.

Warum wichtig: Routing ist die Grundfunktion jedes Reverse Proxys - ohne sauberes Matching ist alles andere instabil.

    @@ -209,6 +210,7 @@ curl http://localhost:8080/service/b # -> "Target B"
    Easy 2) backend-c hinzufuegen +

    nginx-Doku: upstream · proxy_pass

    Muss: Compose-Service + Upstream + Route /service/c.

    Zusatz: backends/c/index.html ist vorhanden und darf angepasst werden.

    Warum wichtig: Neue Services kommen laufend dazu; Erweiterungen ohne Seiteneffekte sind Praxisalltag.

    @@ -220,6 +222,7 @@ curl http://localhost:8080/service/b # -> weiterhin "Target B"
    Easy 3) Eigene Route /demo/a +

    nginx-Doku: rewrite · location

    Muss: Alias-Route bauen, die auf Backend A fuehrt.

    Warum wichtig: Der Proxy entkoppelt externe Pfade von internen Backend-Implementierungen.

    Zielzustand: /demo/a liefert dieselbe Antwort wie /service/a.

    @@ -232,6 +235,7 @@ curl http://localhost:8080/service/b # -> weiterhin "Target B"
    Medium 4) Security Headers +

    nginx-Doku: add_header

    Setze mindestens nosniff, DENY, strict-origin-when-cross-origin, Permissions-Policy, COOP, CORP.

    Optional: CSP fuer statische Seiten.

    Warum wichtig: Diese Header reduzieren konkrete Browser-Angriffsvektoren und gehoeren zur Security-Baseline.

    @@ -242,6 +246,7 @@ curl http://localhost:8080/service/b # -> weiterhin "Target B"
    Medium 5) Interne Route absichern +

    nginx-Doku: ngx_http_access_module (allow/deny)

    Muss: /internal/status nur fuer 127.0.0.1.

    Wichtig: Host-Request zeigt typischerweise 403 (Docker-Netzwerk).

    Warum wichtig: Nicht jeder Endpoint darf oeffentlich erreichbar sein; Netzsegmentierung beginnt oft am Proxy.

    @@ -252,6 +257,7 @@ curl http://localhost:8080/service/b # -> weiterhin "Target B"
    Medium 6) Logging verbessern +

    nginx-Doku: log_format

    Eigenes log_format mit Upstream-Infos einbauen.

    Hinweis: log_format gehoert in den http {}-Block, sonst startet Nginx nicht.

    Warum wichtig: Ohne brauchbare Logs dauert Fehleranalyse deutlich laenger und Incident-Response wird unzuverlaessig.

    @@ -262,6 +268,7 @@ curl http://localhost:8080/service/b # -> weiterhin "Target B"
    Medium 7) Load Balancing +

    nginx-Doku: Load Balancing (Guide) · upstream

    Zweite Instanz von Backend A (backend-a2) einbauen und Round-Robin zeigen.

    Warum wichtig: Lastverteilung ist Kernnutzen eines Reverse Proxys fuer Skalierung und Verfuegbarkeit.

    Zielzustand: Ueber mehrere Requests antworten beide Instanzen (Mischung aus A und A2).

    @@ -272,6 +279,7 @@ done # -> Mischung aus "INSTANCE=A" und "INSTANCE=A2"
    Medium 8) Response Header Minimization +

    nginx-Doku: proxy_hide_header

    Mindestens einen Backend-Response-Header per proxy_hide_header ausblenden.

    Abgrenzung zu #4: #4 setzt Schutz-Header, #8 entfernt unnoetige Header aus Upstream-Responses.

    Warum wichtig: Weniger preisgegebene Metadaten erschweren Fingerprinting und zielgerichtete Angriffe.

    @@ -281,6 +289,7 @@ done # -> Mischung aus "INSTANCE=A" und "INSTANCE=A2"
    Medium 9) Debugging Challenge +

    nginx-Doku: proxy_pass (Trailing-Slash-Semantik) · upstream

    Mit proxy/nginx.broken.conf arbeiten, Fehler finden und reparieren.

    Zuerst sichern: diese Challenge ueberschreibt deine nginx.conf → vorher cp proxy/nginx.conf proxy/nginx.conf.bak, am Ende zurueckkopieren.

    Warum wichtig: In der Praxis geht es oft um Diagnose unter Zeitdruck, nicht nur um Greenfield-Konfiguration.

    @@ -297,6 +306,7 @@ curl http://localhost:8080/service/b # -> "Target B"
    Hard 10) HTTPS von 0 (Easy-RSA) +

    Doku: HTTPS-Server konfigurieren · ngx_http_ssl_module · Easy-RSA

    Zertifikat fuer localhost, Port 8443:443, Root-CA importiert.

    Wichtig: Der neue Port ist eine Compose-Aenderung → mit ./scripts/lab.sh redeploy deployen, nicht nur ./scripts/lab.sh proxy-reload.

    Warum wichtig: TLS-Grundaufbau ist Voraussetzung fuer vertrauliche und manipulationssichere Kommunikation.

    @@ -306,6 +316,7 @@ curl http://localhost:8080/service/b # -> "Target B"
    Hard 11) HTTP -> HTTPS Redirect +

    nginx-Doku: return

    Voraussetzung: Challenge 10 abgeschlossen. Bestehende Config weiterverwenden.

    Warum wichtig: Redirect verhindert unabsichtliche Klartext-Nutzung und erzwingt den sicheren Transport.

    Zielzustand: HTTP auf 8080 antwortet mit 301 und Location: https://localhost:8443/....

    @@ -314,6 +325,7 @@ curl http://localhost:8080/service/b # -> "Target B"
    Hard 12) TLS Haertung + Chain + HSTS +

    Doku: ssl_protocols · add_header · HSTS (MDN)

    Voraussetzung: Challenge 10 und 11 abgeschlossen. Gleiche Config weiter erweitern.

    Warum wichtig: Erst Haertung + HSTS reduzieren Downgrade-Risiken und sorgen fuer dauerhaft sichere Clients.

    Warnung (HSTS-Falle): Der Browser merkt sich HSTS host-weit fuer localhost (nicht pro Port). Nach https://localhost:8443 wird auch http://localhost:8080 auf https erzwungen. Zum Testen curl nutzen; Browser-HSTS ggf. unter chrome://net-internals/#hsts fuer localhost loeschen. max-age ist im Lab bewusst kurz (1h).

    @@ -328,6 +340,7 @@ openssl s_client -connect localhost:8443 -servername localhost
    Expert 13) Wireshark: HTTP vs HTTPS sauber ausarbeiten +

    Doku: Wireshark: TLS

    Warum wichtig: Sichtbarkeit auf Paketebene macht den Sicherheitsgewinn von TLS fuer alle nachvollziehbar.

    1. HTTP auf 8080 mitschneiden und Klartext zeigen.