Four subsystems in one product: policy as code, in-kernel enforcement, observability with audit on every change, and automation. One policy governs the whole Linux fleet.
qf is a centrally managed eBPF host firewall for Linux. It combines four subsystems: policy as code with label selectors, in-kernel enforcement at the TC hook, observability with audit on every change, and automation via Terraform and signed bundles. One policy governs the whole fleet instead of hand-editing iptables on each host.
The control plane compiles label-selector policies into BPF-map data and pushes signed bundles over mTLS gRPC to lightweight agents that enforce them in the kernel. Control is centralized; enforcement is distributed across hosts.
Each subsystem is its own page with details and numbers.
Label selectors (matchLabels/anyOf), object groups — ipset (LPM) / portset / hostset, cascade recompute of affected hosts, and a dry-run preview of which hosts and rules change before you apply.
eBPF datapath at the TC hook: TCX on kernels ≥6.6 (coexists with Cilium), classic TC on <6.6. Conntrack for TCP/UDP/ICMP. Policy compiles to BPF maps — no iptables dependency.
Before/after audit on every change, rule verdict events, and system events. SIEM forwarding in RFC5424 / CEF / LEEF / ECS formats over syslog, HTTP(S) or Kafka.
Terraform provider (qf_policy / qf_object_group resources, installed locally for now — not yet in the public Registry), mTLS between agents and CP, and Ed25519-signed bundles for policy authenticity.
The same L3/L4 filter, but centrally managed, with preview and history.
| qf | Hand-managed iptables | |
|---|---|---|
| Source of truth | One policy for the whole fleet | N hosts — N divergent rule sets |
| Check before apply | dry-run + preview of affected hosts and rules | changes land straight on production |
| Change history | before/after audit on every change | only the person who changed it knows |
| Fleet rollout | cascade: 5–15 s across 500 hosts | by hand or scripts, host by host |
| Datapath | eBPF at the TC hook | netfilter / iptables |
| Policy authenticity | Ed25519-signed bundles, mTLS | none |
qf enforces L3/L4 (TCP/UDP/ICMP). L7/DNS filtering and an identity model are not part of the datapath.
Up to 32 rules on kernels 5.15–5.16 and up to 2048 on ≥5.17. Fan-out is sequential: 30–90 s across 5000 hosts. Validated to 1000 hosts; 5000 is a projected estimate.
By default qf runs fail-open (ALLOW): a forgotten rule will not cut a host off. Segmentation is rolled out gradually and observably — log → watch → deny — rather than default-deny out of the box.
Minimum kernel is 5.15. Up to 32 rules on 5.15–5.16 and up to 2048 on ≥5.17. TCX attach and coexistence with Cilium require kernel ≥6.6; on <6.6 without Cilium qf uses classic TC.
No. The control plane is autonomous: state lives in PostgreSQL and a PKI directory, with no Kubernetes or etcd. If the CP is unreachable, agents keep enforcing the last bundle from their offline cache.
qf enforces in the kernel at the TC hook via eBPF, with no iptables dependency. Management is centralized: one policy instead of hand-maintained rule sets on each host.
The datapath is L3/L4 (TCP/UDP/ICMP). There is no L7/DNS filtering or identity model, no network map or dependency auto-discovery, no AI policy generation, and no Windows agent. The agent is Linux only (x86_64/arm64).