Challenges - Reverse Proxy & TLS

Fokus: manuelle Proxy-Konfiguration, saubere Security-Entscheidungen, TLS von Grund auf.

Abgabe-Format (fuer jede Challenge)

Easy

Easy 1) Routing verstehen

Ziel: Verstehen, wie der Reverse Proxy Requests anhand des Pfads verteilt.

Muss:

  • /service/a und /service/b aufrufen.
  • Unterschied der Antworten erklaeren.
  • In 1 Satz erklaeren, welche location auf welchen upstream zeigt.

Done-Check:

curl http://localhost:8080/service/a
curl http://localhost:8080/service/b
Easy 2) backend-c manuell hinzufuegen

Ziel: Proxy-Setup sinnvoll erweitern, ohne bestehenden Traffic zu brechen.

Dateien: docker-compose.yml, proxy/nginx.conf

Muss:

  • Service backend-c in Compose anlegen.
  • In Nginx upstream backend_c und location /service/c konfigurieren.
  • Routing fuer A/B darf danach nicht kaputt sein.

Done-Check:

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

Ziel: URL-Design vom Backend entkoppeln.

Muss:

  • Neue public Route (z. B. /demo/a) einbauen.
  • Intern auf bestehenden Backend-Pfad umbiegen (Rewrite oder eigene Route).
  • In der Demo erklaeren, warum solche Pfad-Abstraktion nuetzlich ist.

Done-Check:

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

Medium

Medium 4) Security Headers setzen

Ziel: Browser-Schutzmechanismen bewusst aktivieren.

Muss:

  • X-Content-Type-Options: nosniff
  • X-Frame-Options: DENY
  • Referrer-Policy: no-referrer

Done-Check:

curl -I http://localhost:8080/

Abgabe: kurz erklaeren, welchen Angriff jeder Header erschwert.

Medium 5) Interne Route absichern

Ziel: Zugangskontrolle direkt im Proxy umsetzen.

Muss:

  • Route /internal/status einbauen.
  • Nur 127.0.0.1 erlauben, alle anderen verbieten.
  • Sinn der Route erklaeren (z. B. intern fuer Ops/Monitoring).

Done-Check:

curl -i http://localhost:8080/internal/status
Medium 6) Logging verbessern

Ziel: Fehler schneller eingrenzen koennen.

Muss:

  • Eigenes log_format mit Upstream-Daten erstellen.
  • Mindestens enthalten: status, upstream_addr, Timing.
  • Access Log auf das neue Format stellen.

Done-Check:

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

Hard (TLS)

Hard 7) HTTPS von 0 (Easy-RSA)

Ziel: Eigene PKI und TLS-Endpoint fuer den Proxy aufbauen.

Muss:

  • Server-Zertifikat fuer localhost erstellen.
  • Proxy auf 443 erweitern (z. B. 8443:443).
  • Root-CA importieren und ohne -k testen.

Done-Check:

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

Ziel: Client sauber auf TLS umleiten.

Muss:

  • Alle HTTP Requests nach HTTPS redirecten.
  • /healthz darf optional auf HTTP bleiben.
  • Redirect-Statuscode + Location Header erklaeren.

Done-Check:

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

Ziel: TLS nicht nur aktivieren, sondern sinnvoll haerten.

Muss:

  • TLS auf 1.2/1.3 beschraenken.
  • HSTS Header setzen: Strict-Transport-Security.
  • Zertifikatskette pruefen und in der Demo erklaeren.

Hinweis: Im HTTP-Basissetup ist HSTS absichtlich noch nicht aktiv.

Done-Check:

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

Ziel: Nachweisbar zeigen, was bei HTTP lesbar und bei HTTPS geschuetzt ist.

Muss:

  1. HTTP Capture auf Port 8080, Request erzeugen, Klartext markieren.
  2. HTTPS Capture auf Port 8443, TLS Handshake markieren.
  3. Pakete mit ClientHello, ServerHello, Certificate zeigen.
  4. Kurze Analyse: Was sieht ein Angreifer im HTTP-Fall vs im HTTPS-Fall?

Optional: TLS Decrypt via SSLKEYLOGFILE und Unterschied vorher/nachher erklaeren.

Done-Check / Abgabe:

  • Mindestens 3 Screenshots mit Markierungen.
  • 3-5 Bulletpoints als technische Schlussfolgerung.
  • Ein Satz zu Grenzen der Methode (z. B. nur mit Keylog decryption).