Enforcement
Enforcement not applying
Symptom
A block or rule exists on the Manager, but traffic is not dropped (or not dropped on the node you expected). zwallctl deny printed success. Console shows the rule enabled.
Likely verified causes
- The target node is a Hosting Agent. Hosting never enforces.
- Assign API:
409Hosting observation Agents cannot receive rules - Validation:
hosting observation Agent %d cannot receive rules - Hosting config must keep
hosting.enforcement: false(withaudit_only: true,log_only: true) or the Agent refuses to start.
- Assign API:
- Rule was not assigned to that Virtualization Agent (
POST /api/v1/rules/:id/assign). - Testing mode is flushing or disabling enforcement (
zwallctl test-flush-status;GET /api/v1/maintenance/testing-mode). - Agent not syncing (
zwallctl reload/ Agent sync). Agent disconnected. - eBPF not attached / maps empty. Enterprise:
GET /api/v1/dashboard/ebpf-health. Community: that route is absent. zwallctl denycreatedBLOCK_IP_INBOUNDon the Manager; that is not a Hosting action and is not a PPS guarantee.- UID/GID filtering (
enable_uid_gid_filtering,uid_gid_filter_v3.o) is not a supported customer contract. Non-application is not necessarily a bug. xdp_attach_modefailed (exampleautotries native then generic).- Agent not root / missing capabilities — eBPF.
Diagnostic commands/endpoints
Confirm profile first:
zwallctl list-agentsprotection_model: hosting → stop. Hosting will not drop. Enforcement for hosting estates belongs on Virtualization Agents, not on the Hosting profile.
zwallctl list-rules
zwallctl test-flush-status
zwallctl reloadGET /api/v1/rules
POST /api/v1/rules/:id/assign # body {"agent_id": <int>}
GET /api/v1/agents/:id
GET /api/v1/dashboard/ebpf-health # Enterprise only
GET /api/v1/dashboard/ebpf-health?agent_id=<id>
GET /api/v1/maintenance/testing-modeOn a Virtualization node:
sudo systemctl status zwall-agent
sudo journalctl -u zwall-agent -n 200 --no-pager
zwallctl map lszwallctl deny posts:
{
"rule_type": "BLOCK_IP_INBOUND",
"action": "block",
"direction": "INBOUND",
"enabled": true
}to POST /api/v1/rules. Success means the Manager accepted the object, not that XDP dropped a packet.
What each result means
Scroll sideways to see the full table. Use the arrow keys when focused.
| Result | Meaning |
|---|---|
409 Hosting observation Agents cannot receive rules | Correct product behavior. Pick a Virtualization Agent. |
Hosting Agent start error hosting profile must set audit_only=true, log_only=true, enforcement=false | Enforcement flag is forbidden on this profile. |
| Testing mode enabled | Rules may be temporarily applied and flushed (zwallctl test-flush; disable with test-flush-disable). |
| Rule exists, not in Agent assignment list | Not synced to that Agent. |
Enterprise ebpf-health overall_status unhealthy / unknown, ebpf_loaded: false | Programs not loaded; maps/security-state summary only (redaction: summary_only_no_raw_map_keys). |
Community ebpf-health 404 Endpoint not found | Handler not registered. Use Agent journal and map ls. |
map ls empty on-node | Maps not programmed or pin dir empty (ZWALL_PIN_DIR / default /sys/fs/bpf/fw). |
UID/GID surprises with enable_uid_gid_filtering: true in example YAML | Incomplete ABI. Disable until a complete contract exists. |
| Agent not root (non-Hosting) | The Agent exits if it is not root, unless Hosting is enabled. |
Safe remediation
- Assign rules only to Virtualization Agents.
- Keep Hosting
enforcement: false. Do not runzwall-agent.service(drop-capable) on the shared hosting node as a substitute for Hosting observation. - If testing mode is on unintentionally:
zwallctl test-flush-disableafter confirming you intend to keep current rules.test-flushitself can flush — use with caution. - Restore Agent connectivity;
zwallctl reloadto force rule sync. - Fix eBPF attach (eBPF). Controlled fallback:
ebpf.xdp_attach_mode: generic— not a performance claim. - Set
enable_uid_gid_filtering: falseif UID/GID behavior is the incident. - Verify with a lab flow on a Virtualization host, not on a production Hosting node.
Do-not-do warnings
- Do not claim Hosting “silently firewalls.” Observation programs pass.
- Do not claim PPS, latency, or certified drop rates.
- Do not document UID/GID V3 as a supported customer feature.
- Do not disable
verify_artifact_integrityor setallow_unsigned_artifacts: trueexcept break-glass. - Do not use testing-mode flush on production as a cleanup tool without intent.
- Do not treat
zwallctl denysuccess as dataplane proof.
Escalation condition
Escalate when:
- Virtualization Agent is online, eBPF loaded, rule assigned and enabled, testing mode off, maps contain the object, and traffic still matches the rule’s IP/direction without drop
- Hosting pass-only programs drop (defect)
- Community needs a Manager eBPF health API — not present in Community router
Related documentation
Edition
SHARED Virtualization path. Hosting 409 and Hosting enforcement=false are ENTERPRISE Hosting profile. dashboard/ebpf-health ENTERPRISE_ONLY.
Status
SUPPORTED as implemented assignment/sync/attach diagnosis. Not a product-wide enforcement certification.