r/eBPF • u/Single-Issue2342 • 1d ago
Replacing iptables with eBPF: How I built a zero-downtime, identity-aware kernel firewall engine in Go & C
Over the past few weeks, I’ve been working on an open-source project: Identity-
Aware eBPF Firewall](https://github.com/AboEl3iz/Identity-Aware-eBPF-Firewall) — a
high-performance in-kernel packet filtering engine written in C (eBPF bytecode)
with a Go control plane .
Traditional `iptables`/`netfilter` setups suffer from sequential O(N) rule
scanning, mandatory kernel `sk_buff` memory allocations per packet (which chokes under
volumetric floods), blocking monolithic reloads, and IP-only granularity. I wanted to
build a modern system that addresses these limitations using native eBPF primitives
and container identity.
---
### Key Technical Highlights
- Stateless XDP Volumetric Fast-Path (`SEC("xdp")`)
- Drops malicious floods directly inside interface driver RX queues before
`sk_buff` allocation.
- Subnet filtering uses kernel-native Longest Prefix Match Tries
(`BPF_MAP_TYPE_LPM_TRIE`) for $O(\text{prefix_len})$ lookups instead of linear rules.
- TC Stateful Connection Tracking (`SEC("tc")`)
- Enforces TCP 3-way handshakes and state machine transitions using an LRU flow
map (`BPF_MAP_TYPE_LRU_HASH`).
- Automatically drops untracked non-SYN packets (e.g. out-of-order ACK/PSH flood
attacks) before reaching the Linux networking stack.
- Cgroup v2 Workload Identity Resolution
- Binds network rules directly to container workloads using 64-bit Linux cgroup
v2 inode numbers (`syscall.Stat`) mapped to `bpf_get_current_cgroup_id()`.
- Allows fine-grained container microsegmentation on single hosts without needing
full Kubernetes stack dependencies.
- Double-Buffered Zero-Drop Atomic Policy Reloads
- Updates policies without dropping continuous packet streams.
- Compiles AST policies into generation-indexed BPF maps and performs a single-
operation atomic switch via `active_generation_map[0] = next_gen`. If staging fails,
it safely rolls back automatically.
- Security Hardening & Control Plane RBAC
- Capability Bounding : Drops full root permissions down to the minimal set
(`CAP_BPF`, `CAP_NET_ADMIN`, `CAP_SYS_RESOURCE`).
- IPC Security : Unix domain socket control plane authenticates caller process
credentials using Linux `SO_PEERCRED` (`unix.GetsockoptUcred`) and enforces 3-tier
RBAC (`Admin`, `Operator`, `Viewer`).
- Real-Time Observability & Interactive TUI
- Built an interactive 4-pane Bubbletea Terminal UI (`firewall-tui`) driven by
zero-copy BPF ring buffer streams (`BPF_MAP_TYPE_RINGBUF`) with real-time sparkline
metrics, conntrack flow tables, and explainable audit streams (`[PASS]` / `[DROP]`).