b9b40ae9041466c5db98e3c031855f34b667590c
Squid + WPAD + Configurator Stack
Selbstgehosteter Squid-Proxy mit Domain-Whitelist-Routing zu Gluetun, plus WPAD-Verteilung und einer Web-UI zur Konfiguration.
Komponenten
| Service | Zweck | Erreichbar |
|---|---|---|
squid |
HTTP-Proxy, leitet Whitelist-Domains zu Gluetun | Port 3128 (LAN) |
wpad |
nginx, served wpad.dat für Auto-Config |
https://wpad.lan |
configurator |
Web-UI + API zum Pflegen der Config | https://squid.lan |
Setup
# 1. Verzeichnisse anlegen
sudo mkdir -p /opt/squid/{config,cache,logs,wpad,configurator/data}
# 2. Repo nach /opt/squid/ kopieren
sudo cp -r ./configurator/* /opt/squid/configurator/
sudo cp ./wpad/nginx.conf /opt/squid/wpad/
sudo cp ./docker-compose.yml /opt/squid/
# 3. Stack hochziehen (Configurator schreibt beim ersten Start die Default-Configs)
cd /opt/squid
docker compose up -d --build
# 4. AdGuard DNS Rewrites:
# wpad.lan -> <Cerberus-IP>
# squid.lan -> <Cerberus-IP>
# 5. DHCP Option 252 setzen:
# http://wpad.lan/wpad.dat
# (oder https mit Step CA falls alle Geräte der CA vertrauen)
Sicherheitshinweise
-
Docker socket mount: Der Configurator hat Zugriff auf den Docker Socket, um
squid -k reconfigureperdocker execauszulösen. Das ist effektiv root auf dem Host. → Daher hinter Forward-Auth (Pocket ID) stellen, niemals ohne Auth ans Internet hängen. -
Auth via Pocket ID: Im
docker-compose.ymlist die Middleware-Zeile auskommentiert. Aktiviere sie sobald deine Pocket-ID-Forward-Auth-Middleware in Traefik definiert ist:- "traefik.http.routers.squid-cfg-lan.middlewares=pocketid-auth@file" -
Input-Validierung: Das Backend validiert CIDRs, Hostnames und Ports per Regex, bevor irgendwas geschrieben wird. Trotzdem: nicht öffentlich erreichbar machen.
API
| Endpoint | Method | Zweck |
|---|---|---|
/api/config |
GET | aktuellen State zurückgeben |
/api/config |
POST | State validieren, speichern, Configs schreiben, Squid reloaden |
/api/reload |
POST | Squid manuell reloaden (z.B. nach manueller Änderung) |
/api/health |
GET | Healthcheck |
Datenfluss
Browser ─POST /api/config─► configurator
│
├─► /data/state.json (state of truth)
├─► /squid-config/squid.conf
├─► /squid-config/vpn_domains.txt
├─► /wpad/wpad.dat
│
└─► docker.sock ──► squid -k reconfigure
Languages
HTML
75.4%
JavaScript
23.7%
Dockerfile
0.9%