Challenges - Reverse Proxy & TLS

Manuelle Proxy-Konfiguration, Security-Entscheidungen und TLS von Grund auf.

Abgabe-Format

Easy

Easy 1) Routing verstehen (aktiv)

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

  • Welche location matched /service/a?
  • Welcher upstream wird verwendet?
curl http://localhost:8080/service/a
curl http://localhost:8080/service/b
Easy 2) backend-c hinzufuegen

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

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

curl http://localhost:8080/service/c
curl http://localhost:8080/service/a
curl http://localhost:8080/service/b
Easy 3) Eigene Route /demo/a

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

curl http://localhost:8080/demo/a

Medium

Medium 4) Security Headers

Setze mindestens nosniff, DENY, no-referrer.

curl -I http://localhost:8080/
Medium 5) Interne Route absichern

Muss: /internal/status nur fuer 127.0.0.1.

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

curl -i http://localhost:8080/internal/status
./scripts/compose.sh exec -T reverse-proxy sh -lc "wget -qO- http://127.0.0.1/internal/status"
Medium 6) Logging verbessern

Eigenes log_format mit Upstream-Infos einbauen.

curl http://localhost:8080/service/a
./scripts/compose.sh logs reverse-proxy
Medium 6a) Load Balancing

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

for i in $(seq 1 8); do
  curl -s http://localhost:8080/service/a | grep -o "Target A2\|Target A"
done
Medium 6b) Header Stripping

Mindestens einen Backend-Response-Header per proxy_hide_header ausblenden.

curl -I http://localhost:8080/service/a
Medium 6c) Debugging Challenge

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

curl http://localhost:8080/service/a
curl http://localhost:8080/service/b
./scripts/compose.sh logs reverse-proxy

Hard (TLS)

Hard 7) HTTPS von 0 (Easy-RSA)

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

curl https://localhost:8443/service/a
Hard 8) HTTP -> HTTPS Redirect

Voraussetzung: Challenge 7 abgeschlossen. Bestehende Config weiterverwenden.

curl -I http://localhost:8080/service/a
Hard 9) TLS Haertung + Chain + HSTS

Voraussetzung: Challenge 7 und 8 abgeschlossen. Gleiche Config weiter erweitern.

curl -I https://localhost:8443/service/a
openssl s_client -connect localhost:8443 -servername localhost

Bonus Expert

Expert 10) Wireshark: HTTP vs HTTPS sauber ausarbeiten
  1. HTTP auf 8080 mitschneiden und Klartext zeigen.
  2. HTTPS auf 8443 mitschneiden.
  3. ClientHello, ServerHello, Certificate markieren.
  4. 3-5 Bulletpoints: was ist sichtbar, was ist geschuetzt?

Optional: TLS Decrypt mit SSLKEYLOGFILE.

Abgabe: mind. 3 Screenshots + technische Interpretation.