Testwebserver fuer Port- und Firewall-Tests hinzufuegen

- testwebserver/: eigenstaendiger Python-Webserver (python:3.12-alpine, kein Build),
  Port/TLS/Text in .env, zeigt Client-IP und loggt jeden Zugriff
- start.sh: erkennt Docker/Podman (inkl. rootless Port-Grenze), prueft Port-Konflikte,
  erzeugt bei TLS=yes ein selbstsigniertes Zertifikat, Befehle up/down/restart/logs/ps/test/firewall
- firewall-check.sh: erkennt auch HTTP-Dienste ohne TLS als erreichbar
- .gitignore: testwebserver/.env versionieren, testwebserver/certs/ ausschliessen
- README: Abschnitt Testwebserver

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
duffyduck
2026-10-08 13:38:15 +02:00
co-authored by Claude Opus 5.5
parent 174c10505a
commit 2962e4a3d7
7 changed files with 225 additions and 4 deletions
+6 -4
View File
@@ -267,11 +267,13 @@ fi
# ---------------------------------------------------------------------------
head_ "5. Lokaler Verbindungstest"
probe() { # probe HOST -> "HTTP <code>" | "TCP offen" | leer
probe() { # probe HOST -> "HTTPS <code>" | "HTTP <code>" | "TCP offen" | leer
local code=""
have curl && code=$(curl -sk --max-time 5 -o /dev/null -w '%{http_code}' "https://$1:$PORT/" 2>/dev/null)
if [ -n "$code" ] && [ "$code" != 000 ]; then echo "HTTP $code"; return; fi
timeout 5 bash -c "exec 3<>/dev/tcp/$1/$PORT" 2>/dev/null && echo "TCP offen, aber keine HTTPS-Antwort"
if [ -n "$code" ] && [ "$code" != 000 ]; then echo "HTTPS $code"; return; fi
have curl && code=$(curl -s --max-time 5 -o /dev/null -w '%{http_code}' "http://$1:$PORT/" 2>/dev/null)
if [ -n "$code" ] && [ "$code" != 000 ]; then echo "HTTP $code, ohne TLS"; return; fi
timeout 5 bash -c "exec 3<>/dev/tcp/$1/$PORT" 2>/dev/null && echo "TCP offen, aber keine HTTP(S)-Antwort"
}
MYIP=$(ip route get 1.1.1.1 2>/dev/null | awk '{for(i=1;i<NF;i++) if($i=="src") print $(i+1)}' | head -1)
for h in 127.0.0.1 $MYIP; do
@@ -280,7 +282,7 @@ for h in 127.0.0.1 $MYIP; do
problem "$h:$PORT nicht erreichbar"
elif [[ $res == TCP* ]] && [ "$TCP_ONLY" = 0 ]; then
# conmon (Podman) bzw. docker-proxy halten den Port offen, auch wenn dahinter nichts ankommt
problem "$h:$PORT nimmt Verbindungen an, liefert aber kein HTTPS - Port nur reserviert (Weiterleitung kaputt?) oder Dashboard startet noch"
problem "$h:$PORT nimmt Verbindungen an, liefert aber keine HTTP(S)-Antwort - Port nur reserviert (Weiterleitung kaputt?) oder Dashboard startet noch"
else
ok "$h:$PORT erreichbar ($res)"
fi