Skip to content

Secure Proxy ManagerSelf-hosted forward proxy with a WAF and a DNS sinkhole

Squid, a Go ICAP WAF, dnsmasq, a Go API and a React UI in one Docker Compose stack, for one controllable egress point on your own 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.

Tested like an attacker ​

make adversarial builds an isolated sandbox of the real images, attacks it and tears it down. CI runs it on every pull request and push to main, and daily; any failing plane fails the run:

  • Block matrix: 28 malicious cases (19 request categories and the 2 response categories) must be blocked and 11 benign cases must pass, through the real proxy and WAF.
  • API attacker: 18 cases of missing, forged and tampered credentials, login SQL injection and a login burst against the backend.
  • Latency: a k6 run through the proxy and the WAF must keep p95 under 800 ms and errors under 5%.
  • Config matrix: disabling a WAF category lets that attack through and re-enabling it blocks it again.
  • Resilience: with the WAF stopped the proxy does not answer 200; after a restart it blocks again.

Details are in tests/adversarial/README.md.

Manage it from an MCP client ​

bash
SPM_URL=http://localhost:5001 SPM_TOKEN=spm_... uvx spm-mcp

SPM_TOKEN is an API token (see API tokens); it needs spm-mcp 0.4.0 or later and Secure Proxy Manager 3.28.0 or later. With older versions, use SPM_USERNAME and SPM_PASSWORD.

Read-only by default; set SPM_MCP_READONLY=false to also register the tools that block domains, toggle WAF categories, add egress entries and reload the proxy.

Install ​

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

The installer installs Docker if it is missing, writes a .env with random credentials, pulls the release images and starts the stack. Then point a client at <host>:3128 and open https://<host>. See Getting Started.

Released under the MIT License. · Privacy & legal