Policy Model
Purpose
Name the objects operators manage on the Manager and where they may be applied. This is not a formal policy language and not a promise that every object type is production-complete.
Concept
Policy is Manager-owned. Virtualization Agents synchronize and enforce. Hosting Agents observe and cannot receive rules.
Enable/disable exists on rules (POST /api/v1/rules/:id/enable and disable) in addition to delete. Testing mode exists so operators can inspect before they enforce.
Data/control flow
Administrator → PostgreSQL object → Agent sync → eBPF maps on Virtualization Agents.
Implemented v1 groups:
Scroll sideways to see the full table. Use the arrow keys when focused.
| Object | Prefix | Notes |
|---|---|---|
| Firewall rules | /api/v1/rules | including assign-to-agent |
| CIDR rules | /api/v1/rules/cidr | |
| DNS rules | /api/v1/rules/dns | implemented, not a resolver WAF |
| UID/GID rules | /api/v1/rules/uid-gid | implemented, not production-complete |
| Blocked IPs | /api/v1/security/blocked-ips | |
| GeoIP rules | /api/v1/geoip/rules | |
| External blocklists | /api/v1/blocklists | |
| Agent policy | PUT|PATCH /api/v1/agents/:id/policy | |
| Detection settings | /api/v1/agents/:id/detection-settings |
CLI (zwallctl allow|deny|remove|whitelist|unwhitelist|rate-limit|block-port|temp-block|temp-allow) talks to the Manager API, not directly to maps, except local map maintenance commands (map ls/clear/pin) on a node with pin dir /sys/fs/bpf/fw.
AI Preview can draft unpublished rule-review records. Those drafts cannot become live policy.Rule through AI routes. There are no registered apply/enforce/create-rule AI routes.
Boundaries
- Hosting observation Agents: HTTP 409 on rule assignment.
protection_modelhybridvs Hosting profile is a known profile-identity mismatch — do not use hybrid as “policy works everywhere.”- Edge mode policy/fail-open is not a public certified product.
- DHCP guard and SMTP proxy are specialized, example-disabled or Hosting-rejected.
- Detection example
profileslist may not load as a map.
Edition differences
Object types above are SHARED unless a handler is nil (then the group is not registered). License gates apply to some Enterprise writes (blocklists/RBL/discovery). Community has a 3-Agent cap, which caps where policy can land.
Common misconceptions
- “Approving an AI recommendation created a rule.” It did not.
- “DNS rules replace the customer’s DNS server.” They do not.
- “UID/GID rules replace Hosting observation.” Hosting rejects UID/GID features; virt UID/GID is incomplete.
- “Testing mode is a throughput test.” It is inspect-before-enforce.