Protect Your Services with Synit WAF: The Cloud-Native, Tenant-Aware Firewall - Powered by synit.io
310
Tenant-aware reverse proxy and Web Application Firewall for modern web applications and APIs.
Synit WAF is an open-source reverse proxy and WAF written in Go. A single instance can protect multiple hostnames, apply an independent security policy to each tenant, and route accepted traffic to healthy upstream services.
It combines application-layer firewalling with authentication, network policies, API protection, optional threat intelligence, LLM request controls, response masking, health-aware load balancing, and Prometheus observability.
Source: github.com/synit-io/synit-waf Maintained by: synit.io License: Apache License 2.0 Community: Discord
Pull the latest stable image:
docker pull synitio/synit-waf:latest
For reproducible deployments, use a versioned tag:
docker pull synitio/synit-waf:1.0.0
Production deployments should preferably pin the image digest as well:
synitio/synit-waf:1.0.0@sha256:<digest>
Supported platforms:
linux/amd64linux/arm64Synit WAF reads its configuration from /etc/waf/config.yml.
docker run --rm \
-p 8080:80 \
-p 127.0.0.1:9090:9090 \
-e WAF_GLOBAL_ADMIN_ADDRESS=0.0.0.0:9090 \
-v /absolute/path/config.yml:/etc/waf/config.yml:ro \
synitio/synit-waf:latest
The container image is distroless and runs as a non-root user.
The Synit WAF binary is located at:
/usr/local/bin/synit-waf
The container also includes example rule profiles under:
/etc/waf/rules
Protect multiple applications from one Synit WAF instance.
Requests for unknown hosts are rejected.
Synit WAF integrates with Coraza and supports:
Synit WAF does not bundle the OWASP Core Rule Set. Supply and evaluate the rule sets required by your deployment.
Authentication can be configured independently for each tenant:
Apply edge-level network controls before requests reach your applications:
/64 groupingSynit WAF can query an external CrowdSec LAPI for IP decisions.
Features include:
GraphQL endpoints can be protected with configurable limits for:
Controls apply only to configured GraphQL paths.
Synit WAF includes request controls designed for applications exposing LLM functionality.
Supported modes:
rulesmlhybridCapabilities include:
Machine-learning mode uses the optional synit-llm-guard sidecar. No model weights are bundled with the WAF image.
Synit WAF can mask sensitive information in eligible upstream responses using regex-based rules.
Supported response types include bounded:
Proxy functionality includes:
Deploy Synit WAF behind an existing TLS terminator or let the WAF manage certificates using ACME.
Supported deployment approaches include:
At least one tenant and one HTTP or HTTPS upstream are required.
global_settings:
log_level: "INFO"
admin_address: "127.0.0.1:9090"
request_body_limit: 1048576
write_timeout: "0s"
waf_rule_sets:
starter: |
SecRule REQUEST_METHOD "@rx (?i:^(trace|track)$)" "id:110001,phase:1,deny,status:403,log,msg:'Blocked unsafe method'"
tenants:
"app.example.com":
upstreams:
- url: "http://app:8080"
response_header_timeout: "30s"
health_check:
path: "/healthz"
security:
waf_enabled: true
audit_mode: true
paranoia_level: 1
include_rule_sets:
- "starter"
Start new WAF rules in audit mode, observe representative traffic, tune false positives, and enable enforcement once the policy has been validated.
Requests pass through a defined security pipeline:
Client
↓
IP policy
↓
GeoIP
↓
Global rate limit
↓
Tenant matching
↓
Tenant rate limit
↓
JWT / Basic Auth
↓
CrowdSec
↓
Coraza WAF
↓
GraphQL / LLM controls
↓
Healthy upstream
↓
Response masking / header transforms
Only configured exact or wildcard hostnames are served.
Synit WAF uses strict YAML configuration.
A sibling tenants.d/ directory can optionally be used to split tenant configurations across multiple .yml or .yaml files.
Configuration validation rejects issues such as:
Configuration files are watched for changes.
Reloads are transactional: Synit WAF builds and validates the complete candidate configuration before publishing it. If validation fails, the currently running configuration stays active.
Synit WAF exposes separate public and administrative health endpoints.
| Listener | Endpoint | Purpose |
|---|---|---|
| Public | GET /livez | Process liveness for non-tenant hosts |
| Public | GET /healthz | Process health for non-tenant hosts |
| Admin | GET /livez | Process liveness |
| Admin | GET /healthz | Process health |
| Admin | GET /readyz | Upstream and dependency readiness |
| Admin | GET /metrics | Prometheus metrics |
The administrative listener defaults to:
127.0.0.1:9090
Keep the admin listener on a private operations network.
Synit WAF supports JSON or text logs and exposes Prometheus metrics covering:
An optional authenticated ai-logs-receiver service is also available for receiving batched NDJSON log events.
Docker Hub publishes stable version aliases without a v prefix.
For a release such as 1.0.0, tags include:
1.0.0
1.0
1
latest
Use an explicit version or immutable digest for production deployments rather than relying solely on latest.
Synit WAF can be deployed using:
Deployment templates are available in the GitHub repository.
For production deployments:
The Synit WAF project also publishes optional supporting services:
synitio/synit-llm-guard
synitio/ai-logs-receiver
Authenticated ONNX text-classification sidecar used by the WAF's ml and hybrid LLM protection modes.
Operators supply and evaluate their own compatible classification model.
Optional authenticated sink for WAF log forwarding.
It accepts NDJSON batches and JSON events and stores bounded tenant-specific daily log files.
See the project documentation for the complete operational and security details.
For questions, configuration help and deployment discussions:
Discord: https://www.synit.io/discord
For defects and feature requests, use GitHub Issues.
Security vulnerabilities should be reported privately according to the project's security policy rather than through public issues or Discord.
Synit WAF is open source under the Apache License, Version 2.0.
See the repository's LICENSE, NOTICE, and third_party/ files for licensing and attribution information.
Content type
Image
Digest
sha256:b59cadf9a…
Size
9.1 MB
Last updated
1 day ago
docker pull synitio/synit-waf