How it works
The engine, its pipeline, what happens when inspection fails, and how proxies talk to it.
Inkwall has two parts. The engine sits next to each proxy and decides, for every request, whether it may pass. The operator turns the policies you write into configuration for the engines and wires each proxy to its engine. The operator is never on the request path: if it is down, engines keep enforcing the last policy they received.
The engine
Every proxy integration feeds the same pipeline. Cheap checks run first, so most requests never reach a regular expression: paths you skip are not inspected, oversized bodies are handled by policy, and a bounded number of requests are inspected at once, so overload is answered at once instead of queueing. The rules are the OWASP Core Rule Set, run by OWASP Coraza.
Inspection currently costs about 0.5 ms per request plus roughly 0.15 ms per request argument. Benchmarks run against the base branch on every pull request, and a significant regression fails the build.
When inspection fails
A WAF has to decide what happens when it can’t decide. Inkwall’s answer depends on the mode:
- Detect mode never blocks. Requests that can’t be inspected are allowed and logged.
- Block mode never forwards a request uninspected. A timeout, an error or overload gets a 503,
unless you choose
failureMode: Openfor availability.
How proxies talk to the engine
Each proxy uses its own native hook, so there is no extra proxy in the path.
Traefik ForwardAuth. Traefik sends a subrequest describing the client request; the engine answers allow or deny before Traefik forwards anything.
The check API. For proxies without a native protocol, POST /v1/check takes a description of
the request, in protobuf or JSON, and returns the verdict.
Reverse proxy. Outside Kubernetes, or in front of a single service, the engine is the proxy: it inspects the request, then forwards it or answers itself.
Envoy (ext_proc, ext_authz), ingress-nginx (a Lua plugin), HAProxy (SPOE) and Caddy (a module)
are planned; see the roadmap.