Observation vs Enforcement
Purpose
State the product split that every other Zwall document depends on: Hosting observation passes traffic and exports bounded telemetry; Virtualization firewall programs can pass or drop. Mixing those jobs on a shared hosting node is an operational error.
Concept
Zwall is one platform with two Agent jobs.
Scroll sideways to see the full table. Use the arrow keys when focused.
| Job | Kernel programs | Packet drop | Typical node |
|---|---|---|---|
| Hosting Agent | hosting_observe.o via privileged loader | Prohibited (XDP pass / TC OK) | shared / panel host |
| Virtualization Agent | firewall.o (XDP) + firewall_egress.o (TC) | Intended capability | KVM/libvirt host |
The shared Agent binary (zwall-agent) implements both profiles. hosting.enabled plus fail-closed flags select observation. Active packet enforcement requires root and the Virtualization objects.
A config leaf agent.protection_model of virtualization, hosting, or hybrid exists. That leaf is not the same thing as the Enterprise Hosting Agent profile identity (hosting-plesk-observe-v2). Example hybrid can mislead (the hybrid example misleads vs Hosting identity).
Data/control flow
- Operators create rules, blocks, GeoIP, and detection settings on the Manager.
- Agents authenticate and synchronize those objects.
- Enforcement Agents program eBPF maps. XDP/TC then pass or drop.
- Hosting Agents do not use those programs to drop packets. They tail logs and poll a UNIX socket of category-safe network metadata. Assigning rules or restart commands to them returns HTTP 409.
- Telemetry (security logs, Hosting events, heartbeats, VM inventory) flows Agent → Manager. Policy flows Manager → assigned Virtualization Agents.
Testing / non-enforcing mode (zwallctl test-flush*, /api/v1/maintenance/testing-mode) lets operators inspect before they enforce. It is not a benchmark and not a Hosting feature.
Boundaries
- Hosting
hosting.enforcementmust be false;audit_onlyandlog_onlymust be true when enabled. - Hosting Agent: empty capabilities, user
zwall-hosting. Loader: root, pass-only object, socket/run/zwall-hosting-ebpf/observer.sock. - Virtualization Agent: root,
CAP_NET_ADMINamong others, unitzwall-agent.service. - UID/GID cgroup filtering is not Hosting, and is not a stable Virtualization customer contract.
- AI Preview drafts cannot become live rules through AI routes.
- Do not claim lossless event delivery.
Edition differences
Scroll sideways to see the full table. Use the arrow keys when focused.
| Topic | Community | Enterprise |
|---|---|---|
| Virtualization enforcement Agent | yes (source) | yes (unit /opt/zcs/bin/zwall-agent) |
| Hosting observation profile + loader | no | yes |
| Hosting status/events APIs | no | yes |
| 3-Agent cap | yes | license-defined, not this concept |
Common misconceptions
- “Hosting Agent is a silent firewall.” No. If it drops, that is a defect.
- “Turn on
hybridto get both jobs on a panel host.” No. Hosting validation requiresprotection_model: hostingand rejects enforcement-capable features. - “Assign rules to every Agent.” Hosting returns 409.
- “
zwallctl start/stopenforces remotely.” Not implemented; use systemd. - “UID/GID filtering is how Hosting isolates customers.” It is not.