Documentation

How to run, configure and operate Light WAF — from a single waf binary in front of one backend to a governed fleet with a control plane. These docs cover version 1.0.2(changelog).

Start here

  • Quickstart — install the waf binary, point it at your backend, and see it block.
  • Concepts — how a request is judged: the anomaly score, the block threshold, verdicts.
  • Full stack — run the WAF, the control plane and the node agent together.

The three services

A single node needs only the WAF. A fleet adds up to two more services, neither of them on the request path:

ServiceBinaryRoleRequest path?
WAF proxywaf or waf-enterpriseTerminates traffic, inspects every request, allows or blocks. waf is the core; waf-enterprise adds the at-scale components.Yes
Control planewaf-controlplaneCollects telemetry, serves the dashboard and API, governs rules and users.No
Node agentwaf-node-agentPulls published rulesets onto each WAF node and triggers a reload.No

Reference

  • Configuration — the core config file, section by section.
  • Detection modules — what each module catches, and how requests are scored.
  • At-scale components — the [enterprise.*] tables: Redis state, managed TLS, reputation, curated rules, schema enforcement, bot detection, signed plugins, request capture.

Operate

  • Control plane & dashboard — configuration, telemetry, the dashboard tour, alerting, the API.
  • Rule management — publish and roll back ruleset versions, the node agent, convergence.
  • Governance — RBAC, users, service tokens, sessions, OIDC SSO, the signed audit log.
  • Compliance & SIEM — signed SOC2/PCI evidence bundles and the SIEM feed.
  • Operations — reloads, the failure posture, monitoring, backups, troubleshooting.
  • Kubernetes — Helm charts, the WafProxy operator, capture on k8s.

Secrets

Every service reads its secrets from environment variables that override the config file, so the .toml files can be committed safely.

Env varUsed byWhat it is
WAF_REDIS_URLproxyRedis connection for cluster-wide rate limit / reputation
WAF_CERT_STORE_KEYproxyencrypts the ACME private key at rest (clustered DNS-01)
WAF_CAPTURE_TOKENproxyingest bearer for shipping captured requests (matches WAF_CP_API_TOKEN)
CF_API_TOKEN, AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEYproxyDNS-01 provider credentials
WAF_CP_DATABASE_URLcontrol planePostgres connection string
WAF_CP_API_TOKENcontrol planestatic bearer token (governance off)
WAF_CP_AUDIT_KEYcontrol planeEd25519 seed (64 hex) signing the audit chain — must persist
WAF_CP_BOOTSTRAP_ADMIN_PASSWORDcontrol planeinitial admin password, used once
WAF_CP_OIDC_CLIENT_SECRETcontrol planeOIDC client secret
WAF_CP_SIEM_AUTH_<NAME>control planeauth header for SIEM destination <name>
WAF_AGENT_TOKENnode agentcontrol-plane service token

Crates

Fourteen crates are published on crates.io, all on version 1.0.2; API docs are on docs.rs.

CrateWhat it isLinks
waf-proxyThe reverse-proxy binary — cargo install it and run it as waf.docs.rs · crates.io
waf-coreBase types, config, and client-IP resolution.docs.rs · crates.io
waf-normalizerDecoding, NFKC, and request parsing (anti-evasion).docs.rs · crates.io
waf-pipelinePhased orchestration and anomaly scoring.docs.rs · crates.io
waf-detectionDetection modules, the CRS engine, and the fast-path prefilter.docs.rs · crates.io
waf-wasmThe Proxy-Wasm plugin runtime (wasmi).docs.rs · crates.io
waf-enterpriseThe data-plane binary with every component wired in.docs.rs · crates.io
waf-state-redisRedis state store: cluster-wide rate limiting and shared certificates.docs.rs · crates.io
waf-tls-managedManaged TLS: ACME (TLS-ALPN-01, DNS-01), hitless rotation, mutual TLS.docs.rs · crates.io
waf-threatintelIP reputation module and the single-writer threat-intel feed.docs.rs · crates.io
waf-crs-curatedCurated SecRule content: CVE, application and evasion signatures.docs.rs · crates.io
waf-schema-enforcementGraphQL, gRPC and OpenAPI schema enforcement, and bot detection.docs.rs · crates.io
waf-wasm-signingMinisign verification of WASM plugins before they load.docs.rs · crates.io
waf-captureOff-path capture of full denied requests for the drill-down.docs.rs · crates.io

Container images

Multi-arch (amd64 + arm64) images on the GitHub Container Registry. They run as a non-root user on a distroless base.

ImageWhat it runs
ghcr.io/0x00spor3/waf-enterprise:1.0.2The data plane: the WAF proxy with every component wired in.
ghcr.io/0x00spor3/waf-controlplane:1.0.2The control plane: API, embedded dashboard and governance.
ghcr.io/0x00spor3/waf-node-agent:1.0.2Pulls published rulesets onto a WAF node and triggers a reload.
ghcr.io/0x00spor3/waf-operator:1.0.2The Kubernetes operator for the WafProxy custom resource.

Verify an image

Every image is signed with cosign by the release workflow, keyless: the signature is bound to that workflow's identity and logged in the public Sigstore transparency log, and each image carries a signed SBOM. Check one before you run it:

$ cosign verify ghcr.io/0x00spor3/waf-enterprise:1.0.2 \
    --certificate-oidc-issuer https://token.actions.githubusercontent.com \
    --certificate-identity-regexp '^https://github\.com/0x00spor3/Light-WAF/\.github/workflows/images\.yml@refs/(tags/v.+|heads/main)$'

The SBOM attestation, and admission policies that enforce the signature in Kubernetes, are in the security policy.

Source on GitHub → · Architecture notes → · Per-feature runbooks →