Skip to content

Secure Proxy ManagerSelf-hosted Secure Web Gateway

One controllable egress point for your network — Squid forward proxy + a real WAF (ICAP) + DNS sinkhole + a modern UI, in a single Docker Compose stack. The self-hosted counterpart to cloud SWGs, with no traffic leaving your network.

Secure Proxy Manager

See it block

Malicious requests blocked by the proxy + WAF, benign traffic allowed

Malicious requests get 403'd at the proxy by the WAF; benign traffic passes.

How it compares

CapabilityPi-hole / AdGuardNginx Proxy ManagerCloud SWG (Zscaler…)ZionSecure Proxy Manager
DNS sinkhole
Forward proxy (egress control)
HTTP request/body inspection (WAF)
Default-deny egress allowlist
Reverse proxy / ingress
Self-hosted — traffic stays local
Free / no per-seat cost

SPM is the self-hosted outbound counterpart to a cloud Secure Web Gateway — WAF inspection + DNS sinkholing + egress control, on your own metal.

Pair it with Zion — a single-binary Rust TLS reverse proxy with a built-in WAF — to cover the other direction: Zion inspects traffic coming in, SPM controls what goes out. Both self-hosted, both single-purpose, no cloud.

Tested like an attacker

An adversarial e2e harness (make adversarial, gated in CI) drives real attack traffic through the running proxy + WAF and fails the build on any regression — five planes:

  • block-matrix — SQLi / XSS / RCE / SSRF / … across 21 categories → false negatives = 0, benign → false positives = 0.
  • API attacker — auth-bypass, forged/tampered JWTs, login SQLi, rate-limit → no bypass.
  • bench/latency — p95 + ICAP overhead, regression-gated.
  • config-matrix — flip a setting → prove the data plane changes.
  • resilience — kill the WAF → the proxy fails closed, then self-heals.

Manage it from an agent (MCP)

bash
SPM_URL=http://localhost:5001 SPM_USERNAME=admin SPM_PASSWORD= uvx spm-mcp

Exposes the management API as MCP tools so an assistant/agent can query traffic, manage block/allow lists, toggle WAF categories, and reload config.

30-second start

bash
curl -fsSL https://raw.githubusercontent.com/fabriziosalmi/secure-proxy-manager/main/deploy/install.sh | sudo bash

The installer checks Docker, generates random admin credentials, pulls the signed images, and starts the stack. Then point a client at the proxy on :3128 and open the dashboard. See the Getting Started guide.

Released under the MIT License. · Privacy & legal