# HTL Workshop - Reverse Proxy & TLS Lab Dieses Repo ist ein **leichtes HTTP-Basissetup** fuer einen Workshop mit Fokus auf: - Reverse Proxy Grundlagen (Nginx) - Routing auf mehrere Backends - TLS/HTTPS manuell umsetzen (z. B. Easy-RSA) - Security-Hardening im Proxy Die Aufgaben sind absichtlich auf **manuelle Konfiguration** ausgelegt, nicht auf App-Entwicklung. ## Architektur - `reverse-proxy` (Nginx, Port `8080`) - `backend-a` (einfaches statisches Backend) - `backend-b` (einfaches statisches Backend) Basisrouten nach dem Start: - `http://localhost:8080/` -> Startseite - `http://localhost:8080/service/a` -> Backend A via Proxy - `http://localhost:8080/service/b` -> Backend B via Proxy ## WebUI Struktur - `http://localhost:8080/` -> Ueberblick + Navigation - `http://localhost:8080/challenges.html` -> Detaillierte Challenges - `http://localhost:8080/hints.html` -> Hint Cheatsheet - `http://localhost:8080/solutions.html` -> Musterloesungen ## Voraussetzungen ### Windows (empfohlen) #### 1. WSL + Ubuntu installieren WSL ist die Grundlage fuer den Workshop (alle Test-Kommandos laufen spaeter in der Linux-Shell). In einer **PowerShell als Administrator**: ```powershell wsl --install -d Ubuntu-24.04 ``` Das installiert WSL2 samt Ubuntu 24.04. Danach **Windows neu starten** und beim ersten Ubuntu-Start einen Linux-Benutzer (Name + Passwort) anlegen. Pruefen bzw. verfuegbare Distros anzeigen: ```powershell wsl --list --verbose # bereits installierte Distros + WSL-Version wsl --list --online # installierbare Distros ``` Ist WSL schon vorhanden, nur aktualisieren: `wsl --update`. Fehlt nur die Distro, separat nachziehen: `wsl --install -d Ubuntu-24.04`. #### 2. Tools installieren (winget) ```powershell winget install --id Microsoft.VisualStudioCode -e winget install --id Git.Git -e winget install --id Docker.DockerDesktop -e ``` Nach der Installation von Docker Desktop die WSL-Integration in den Einstellungen aktivieren (Settings -> Resources -> WSL Integration -> Ubuntu-24.04). #### 3. Optionale TLS-Tools (in Ubuntu/WSL) Die TLS-Challenges (Easy-RSA, OpenSSL, Wireshark/tshark) laufen am besten **innerhalb WSL**. Im Ubuntu-Terminal: ```bash sudo apt update sudo apt install -y easy-rsa openssl tshark ``` ### Linux / macOS Docker Engine oder Docker Desktop installieren. Optional fuer TLS-Challenges: #### Ubuntu/Debian (apt) ```bash sudo apt update sudo apt install easy-rsa openssl wireshark ``` #### Fedora/RHEL (dnf) ```bash sudo dnf install easy-rsa openssl wireshark ``` ## Schnellstart ### Windows ```powershell ./scripts/workshop.ps1 -Action bootstrap ``` Falls PowerShell das Script blockiert: ```powershell Set-ExecutionPolicy -Scope Process Bypass ``` Wenn mehrere WSL-Distros installiert sind: ```powershell ./scripts/workshop.ps1 -Action bootstrap -Distro Ubuntu-24.04 ``` Alternativ direkt im WSL-Terminal: ```bash ./scripts/bootstrap.sh ``` ### Linux / macOS ```bash ./scripts/bootstrap.sh ``` Das Skript: - prueft Docker + Compose - startet den Stack Der PowerShell-Wrapper ruft intern `./scripts/lab.sh` in WSL auf - dieselbe Steuer-Oberflaeche wie unter Linux/WSL. ## Neu deployen / resetten Alle Aktionen laufen ueber `./scripts/lab.sh ` (in WSL/Linux). Windows-PowerShell-Nutzer nehmen `./scripts/workshop.ps1 -Action ` - dahinter steckt dasselbe Skript. ```bash ./scripts/lab.sh up ./scripts/lab.sh redeploy ./scripts/lab.sh proxy-reload ./scripts/lab.sh down ./scripts/lab.sh logs ./scripts/lab.sh reset ./scripts/lab.sh reset-hard ./scripts/lab.sh reset-origin ``` - `up`: build + start (entspricht dem, was `bootstrap` am Ende macht) - `redeploy`: build + restart aller Services - `proxy-reload`: nur Reverse Proxy restart - `down`: Stack stoppen (Container entfernen, Volumes bleiben) - `logs`: Logs aller Services folgen (`Strg+C` zum Beenden) - `reset`: Container/Netzwerk/Volumes aufraeumen - `reset-hard`: wie `reset`, plus lokale Git-Aenderungen verwerfen (falls Git-Repo) - `reset-origin`: wie `reset-hard`, aber bevorzugt Ruecksetzen auf `origin/main` Hinweis: `redeploy` startet zusaetzlich den Reverse Proxy neu, damit Nginx-Config-Aenderungen sicher aktiv sind. ## Kurz testen ```bash curl http://localhost:8080/service/a curl http://localhost:8080/service/b ``` > **Windows:** Diese und alle weiteren Test-Kommandos (`curl`, `openssl`, `grep`, Schleifen) im **WSL-Terminal (bash)** ausfuehren, nicht in PowerShell. In PowerShell ist `curl` ein Alias fuer `Invoke-WebRequest` und versteht die genutzten Flags (`-I`, `-k`, `--cacert`) nicht. PowerShell nur fuer den Stack-Wrapper `scripts/workshop.ps1`. ## Fokus im Workshop Die Basis ist bewusst nur HTTP. HTTPS ist Teil der Aufgaben: - CA + Server-Zertifikat selbst erstellen - Nginx auf 443 erweitern - Root-CA importieren - HSTS und TLS-Haertung umsetzen - TLS mitschneiden und analysieren Vollstaendige TLS-Beispielkonfiguration mit HSTS: `proxy/nginx.tls.example.conf`.