Agentic proxy-WAF for SMBs: self-hosted nodes, cloud explainable ML, no traffic limits.
4.6K
Cloud-managed reverse-proxy Web Application Firewall (data plane).
The Threatail node sits in front of your web app, terminates traffic, and enforces protection — signatures, an ML detection model, a SQLi/XSS tokenizer, bot detection, rate-limiting, API protection (JWT/JSON/OpenAPI/ATO/DLP) and mTLS. It is operated entirely from the Threatail dashboard: the node enrolls with a one-time token, then pulls its site config and per-asset ML models at runtime (long-poll, changes apply within seconds) and reports incidents and metrics back.
Traffic and request bodies are processed locally on the node — only incidents and aggregated metrics are sent to the cloud.
docker run -d --name threatail-node \
-p 80:80 -p 443:443 \
-e THREATAIL_CLOUD_URL=https://api.threatail.com \
-e THREATAIL_ENROLLMENT_TOKEN=<enrollment-token> \
-v threatail-state:/var/lib/threatail \
--restart unless-stopped \
threatail/threatail-node:latest
The enrollment token is used once. After enrolling, the node stores its permanent node token in the state volume and appears online in the dashboard within a minute.
Prefer a host install (systemd) instead of Docker? Use the installer:
curl -sSL https://get.threatail.com/install.sh | sudo THREATAIL_TOKEN=<token> bash
latest and <version> (e.g. 1.1.42) — multi-arch: linux/amd64, linux/arm64.| Port | Purpose |
|---|---|
80 | HTTP + ACME (Let's Encrypt) challenge |
443 | HTTPS |
Mount THREATAIL_STATE_DIR (default /var/lib/threatail) as a named volume. It holds
the permanent node token and cached policy. Without it the node loses its identity on
restart and would need a fresh enrollment token each time.
| Variable | Required | Description |
|---|---|---|
THREATAIL_CLOUD_URL | ✅ | Cloud API base, e.g. https://api.threatail.com |
THREATAIL_ENROLLMENT_TOKEN | first run | One-time token from the dashboard (ignored once enrolled) |
THREATAIL_STATE_DIR | — | State/token dir (default /var/lib/threatail) — persist this |
THREATAIL_LISTEN_HTTP | — | HTTP listen addr (default :80) |
THREATAIL_LISTEN_HTTPS | — | HTTPS listen addr (default :443) |
THREATAIL_METRICS_LISTEN | — | Prometheus metrics listen addr (optional) |
THREATAIL_METRICS_TOKEN | — | Bearer token to protect the metrics endpoint |
THREATAIL_BLOCK_PRIVATE_BACKENDS | — | 1 = refuse backends on private/loopback ranges |
THREATAIL_GEOIP_DB | — | Path to a MaxMind GeoIP DB for geo rules (optional) |
Backends, TLS/mTLS, rules and detectors are configured per-site in the dashboard, not via environment variables.
enroll (one-time token) ──► node token saved to state volume
│
▼
long-poll cloud ──► site config + per-asset ML model (applied in seconds)
│
▼
protect traffic locally ──► incidents + metrics ──► dashboard
169.254.0.0/16) is always blocked as a backend;
private/loopback backends are off unless explicitly allowed.Content type
Image
Digest
sha256:ed6326c7f…
Size
8.9 MB
Last updated
about 1 month ago
docker pull threatail/threatail-node