A data-center security model where policy is enforced on every host — distributed stateful firewalling and microsegmentation instead of hair-pinning east-west traffic through a central perimeter box.
This is the companion to the plain IPv6 DC fabric page. There we build a routed leaf-spine substrate; here we answer the question that substrate forces: in a large, flat, end-to-end-routable IPv6 fabric, where does the firewall live? The modern answer is on the host — Host-Based Firewalling (HBF).
A big IPv6 DC has no meaningful "inside vs outside" for east-west traffic — every server can route to every other server. A single perimeter firewall can neither see nor scale to that server-to-server volume, and forcing traffic through it adds a latency tax and a blast-radius bottleneck. HBF pushes a stateful, identity-based policy down to every host, so the enforcement point sits right next to the workload and scales linearly with the fleet.
HBF is a security model layered on top of the routed IPv6 fabric — it does not replace it. The substrate, covered in depth on the DC IPv6 architecture page, is a leaf-spine (Clos) L3 fabric:
fe80::/10) and carries
IPv4 and IPv6 NLRI without configuring per-link addresses — far less config to manage per port./64 per segment, global addressing end-to-end, no NAT.The takeaway for security: every host is directly routable from every other host. That is exactly why the enforcement problem moves onto the host.
The classic design puts a big stateful firewall pair at the DC edge and treats "inside" as trusted. That model breaks in a modern DC for three reasons:
| Problem | Why the perimeter firewall fails |
|---|---|
| Visibility | Most DC traffic is east-west (service-to-service, replication, RPC). It never crosses the edge, so a north-south perimeter box simply never sees it. |
| Scale | East-west volume is often 5–10× north-south. A central appliance can't grow to Tbps of intra-fabric traffic; the fabric can. |
| Latency / hair-pinning | To inspect east-west you must hair-pin flows to the firewall and back — extra RTTs, a bandwidth tax, and a single chokepoint that also becomes the blast radius when it fails. |
HBF inverts this: instead of steering traffic to the policy, the policy travels to the traffic. Enforcement happens at the source and/or destination host, on the path the packet was already taking. Capacity scales with the number of hosts, and there is no central box to hair-pin through or overwhelm.
A stateful firewall enforced on each host — in the kernel, the hypervisor, or the NIC — rather than in a network appliance. The enforcement point is co-located with the workload, so the rules move with the workload (across reschedules, migrations, autoscaling).
| Enforcement point | Mechanism | Notes |
|---|---|---|
| Linux kernel | nftables / iptables | Classic stateful firewall via conntrack; per-host rulesets programmed by an agent. |
| eBPF / XDP | Programs at the socket, TC, or driver hook | Cilium-style: policy as bytecode, map-based lookups, enforcement before the packet hits the stack. Fast and scalable. |
| Hypervisor vSwitch | OVS + security groups | Enforced on the host for every VM; the guest can't bypass it. |
| Cloud security groups | Provider-enforced on the host/NIC | AWS SG / Azure NSG / GCP firewall — HBF you don't run yourself, applied at the vNIC. |
| Service mesh | Sidecar / ambient proxy (mTLS) | L7 identity-based policy with cryptographic workload identity (SPIFFE), complementary to L3/L4 HBF. |
| SmartNIC / DPU | Offloaded datapath | Enforcement runs on the NIC's own cores — frees host CPU and cuts latency (see offload below). |
The point of putting a firewall on every host is not to draw the same coarse zones in more places — it is to make the segments small. The stated goal is the segment of one: every workload is its own zone and nothing may reach it unless a policy explicitly allows it.
allow app=web → app=db:5432.
The controller resolves those labels to the current set of addresses.HBF is only as good as the system that keeps millions of per-host rules correct and current. That is a control-plane problem: authors write high-level intent; a central engine compiles it into the concrete rules each host must enforce.
Intent (identity/label policy)
│ "web may talk to db:5432; deny all else"
▼
┌───────────────────────┐
│ Policy controller │ compiles intent → per-host rulesets
│ (label → address DB) │ resolves labels to current addresses
└───────────┬───────────┘
│ push / pull (incremental deltas)
┌───────┼───────┬───────────────┐
▼ ▼ ▼ ▼
┌───────┐┌───────┐┌───────┐ ┌───────┐
│ agent ││ agent ││ agent │ ... │ agent │ (one per host)
│nft/eBPF││nft/eBPF││nft/eBPF│ │nft/eBPF│
└───────┘└───────┘└───────┘ └───────┘
each host: local ruleset + conntrack state
nft sets) keep per-packet cost roughly O(1) instead of walking a linear chain.IPv6 is not just "IPv4 with longer addresses" for a firewall — several of its properties directly shape HBF design.
| IPv6 property | Consequence for HBF |
|---|---|
Huge /64 space | 264 addresses per subnet — you cannot enumerate or scan by IP. Policy must be identity/label-based; address-list ACLs are a non-starter. |
| SLAAC + temporary addresses (RFC 8981) | A host cycles through many ephemeral privacy addresses. Policy must key off stable identity, never a specific address; egress rules must tolerate the source address changing under them. |
| Multiple addresses per interface | Link-local + one or more globals + temporaries all coexist. Rules must account for the full set the workload may source from, and for link-local NDP. |
| ND / NS / NA | Neighbor Discovery replaces ARP and runs over ICMPv6. The host firewall must permit NS/NA (and RS/RA where used) or the host loses L2 reachability entirely. |
| ND cache exhaustion | A sparsely populated /64 lets an attacker trigger ND for countless non-existent hosts, bloating the neighbor cache. Per-host ND cache limits / rate-limits are part of the hardening. |
ICMPv6 is load-bearing in IPv6 — unlike ICMP in IPv4, you cannot just drop it. Two categories the host firewall must always allow:
Also generally permit echo (types 128/129) and the essential error types (Destination Unreachable, Time Exceeded, Parameter Problem) rather than a wildcard drop.
Enforcing a stateful firewall on the host is not free: every packet costs CPU cycles for classification and conntrack lookups, and each hook adds latency and jitter. In a low-latency / trading context that tax is the whole ballgame, so where enforcement runs matters.
iptables chain walked per packet steals cycles from the
workload and inflates tail latency. Set/map-based matching (nftables sets, eBPF hash/LPM maps) turns
linear scans into near-constant-time lookups.sk_buff
allocation — so dropped/allowed decisions happen with minimal overhead and no per-packet chain traversal. See
Linux basics & troubleshooting
for the kernel datapath context.| Dimension | Host-based (HBF) | Centralized / perimeter |
|---|---|---|
| East-west visibility | Full — enforced at every host on the real path | None unless you hair-pin traffic to it |
| Scale | Linear with the fleet — capacity added with hosts | Bounded by the appliance pair; a hard ceiling |
| Latency / hair-pinning | On-path, no detour; can be offloaded to the NIC | Extra RTT and bandwidth tax to steer through the box |
| Blast radius | Small — one host's failure is isolated | Large — the central box is a single chokepoint |
| Per-host CPU cost | Real — cycles/jitter on every host (mitigate via eBPF/DPU) | None on the host; cost is centralized |
| Policy consistency | Eventually consistent across millions of agents — harder | One place to configure; trivially consistent |
| Operational complexity | Distributed control plane, agents, fleet-wide rollout | Fewer, well-understood chokepoints to manage |
| Bypass resistance | Enforced below the guest (kernel/hypervisor/NIC) | Enforced only where traffic transits it |
In practice large DCs run both: a perimeter firewall for coarse north-south and DDoS scrubbing at the edge, and HBF for the fine-grained east-west microsegmentation the perimeter can't see. HBF is "in addition to," not purely "instead of."
Distributing the firewall distributes the debugging. A dropped connection no longer has one place to look — it could be enforced at the source host, the destination host, or dropped by a stale policy on either.