Network Observation
Hosting network observation
Purpose
Describe how Hosting network telemetry is attached, what operators can see, and why drops are a defect rather than a tuning knob.
Audience
Operators who will start zwall-hosting-ebpf-loader.service and interpret Hosting Network Security UI / status counters.
Edition
ENTERPRISE_ONLY. Virtualization XDP/TC firewall programs are a different object family (firewall.o / firewall_egress.o) and must not be loaded on a shared hosting node as a substitute.
Status
SUPPORTED as pass-only observation. Isolated attach evidence in the Hosting matrix used Ubuntu 20.04 kernel 5.4.0-216-generic. That is an isolated test, not a certified OS/kernel matrix.
Prerequisites
hosting.network.enabled: truehosting.network.socket_path: "/run/zwall-hosting-ebpf/observer.sock"(example)- Loader env
ZWALL_HOSTING_EBPF_SHA256andZWALL_HOSTING_INTERFACES - Agent user
zwall-hostingcan connect to the socket; it does not needCAP_NET_ADMINorCAP_NET_RAW
Required permissions
Root to run the loader. The Agent must remain unprivileged. A Hosting network preflight that observes CAP_NET_ADMIN or CAP_NET_RAW on the Agent prints INCOMPATIBLE.
Dependencies
Kernel XDP/TC attach on the listed physical interfaces. Loader CapabilityBoundingSet=CAP_CHOWN CAP_SYS_ADMIN CAP_NET_ADMIN. The Agent reads category-safe pages from the UNIX socket only.
Configuration
Loader ExecStart (unit):
/opt/zwall-hosting/bin/zwall-hosting-ebpf-loader \
--object /opt/zwall-hosting/ebpf/hosting_observe.o \
--sha256 ${ZWALL_HOSTING_EBPF_SHA256} \
--interfaces ${ZWALL_HOSTING_INTERFACES} \
--run-user zwall-hosting \
--run-group zwall-hostingExecStop is --detach (exact loader-owned programs only).
Agent hosting.network example:
Scroll sideways to see the full table. Use the arrow keys when focused.
| Key | Example |
|---|---|
enabled | true |
socket_path | /run/zwall-hosting-ebpf/observer.sock |
poll_interval | 5s |
max_response_bytes | 1048576 |
max_events_per_poll | 64 |
request_timeout | 20s |
read_timeout / write_timeout | 2s |
Do not point ebpf.program_path at firewall.o on this profile. Hosting example leaves program paths empty and enable_uid_gid_filtering: false.
Procedure
- Write
/etc/zwall-hosting/hosting-ebpf.envwith the object digest and comma-separated physical interfaces. Do not list customer TAP/veth names as a substitute for the Virtualization inventory API. systemctl enable --now zwall-hosting-ebpf-loader- Confirm the socket:
/run/zwall-hosting-ebpf/observer.sock - Start the Hosting Agent unit after the loader.
- Optional read-only preflight from the Agent binary:
zwall-agent --hosting-network-preflight-url https://manager.example.com:8443 \
--hosting-network-preflight-id PREFLIGHT1Prints COMPATIBLE or INCOMPATIBLE with a reason (INCOMPATIBLE_INTERFACE_DISCOVERY, INCOMPATIBLE_NETWORK_CAPABILITIES, INCOMPATIBLE_MANAGER_REACHABILITY). The probe GETs /api/v1/health?hosting_preflight=ID and asserts the Agent has no CAP_NET_ADMIN / CAP_NET_RAW.
What operators see
Bounded packet metadata and counters, not payload. Detector version hosting-network-detectors.v1. Conservative classes (logged only; action must be logged):
Scroll sideways to see the full table. Use the arrow keys when focused.
| Event type | Class |
|---|---|
HOSTING_NETWORK_VERTICAL_SCAN | vertical port scan |
HOSTING_NETWORK_HORIZONTAL_SCAN | horizontal host scan |
HOSTING_NETWORK_SYN_FANOUT | SYN-rate / fan-out |
HOSTING_NETWORK_UDP_SCAN | UDP heuristic |
HOSTING_NETWORK_CONNECTION_BURST | burst |
HOSTING_NETWORK_TCP_FLAG_ANOMALY | TCP-flag anomalies |
HOSTING_NETWORK_CLOSED_PORT_ATTEMPTS | closed-port when inferable |
HOSTING_NETWORK_UNIQUE_DEST_PORT_RATE | unique destination-port rate |
HOSTING_NETWORK_UNIQUE_DEST_HOST_RATE | unique destination-host rate |
Hosting network events must not carry unrestricted packet fields (source_ip, destination_ip, MACs, raw ports, rule_id, …) on the security-log request. Prefix identifiers in details are category-safe. Do not expect customer IPs in Hosting event APIs.
Drops are prohibited. Observation programs pass (XDP pass / TC OK). If pass-only programs drop traffic, treat it as a product defect. Do not “fix” it by loading Virtualization firewall objects on that node.
Verification
systemctl is-active zwall-hosting-ebpf-loader- Socket present and owned for
zwall-hosting - Hosting status
runtime_available: trueand network attach lists populated for the interfaces you passed - UI / status: observation counters; drops remain zero
- Packet path still forwards
Expected result
Category-safe network signals in the Hosting Agent story. Enforcement, if required for the estate, belongs on Virtualization Agents — not on this node.
Failure modes
Scroll sideways to see the full table. Use the arrow keys when focused.
| Symptom | Cause | Action |
|---|---|---|
| No network telemetry | loader not attached; socket missing | start loader; confirm SHA-256 env |
INCOMPATIBLE_NETWORK_CAPABILITIES | Agent has net admin/raw caps | you are not on the Hosting unit |
INCOMPATIBLE_MANAGER_REACHABILITY | Manager health probe failed | TLS URL, /api/v1/health |
| Unexpected drops | wrong profile (zwall-agent.service firewall programs) | remove enforcement unit from the hosting node |
| Kernel attach fail | kernel/interface | isolated 5.4 evidence is not a global guarantee |
Troubleshooting
journalctl -u zwall-hosting-ebpf-loader -u zwall-hosting-agent-v2 -n 200ls -l /run/zwall-hosting-ebpf/observer.sock- Hosting status network fields:
XDPAttachedInterfaces,TCAttachedInterfaces,EligibleInterfaces,ScanEventCounts - Confirm
observation_onlyon heartbeat / profile — not an enforcement Agent
Security considerations
- Loader is root with a reduced capability set, then the Agent receives none.
--detachon stop removes loader-owned programs only.- Do not document UID/GID cgroup filtering as a Hosting network control. It is not.
- Do not publish PPS or latency numbers.
Limitations
- Not a firewall.
- Not payload capture.
- Not a certified kernel matrix.
- Closed-port emits only when inferable.
- Hosting sources remain ineligible for automatic/provider AI.