Live workload endpoints
Observe live sockets, identify their workloads, and classify the ingress zone.
Host-aware protection. Explicit control.
Auto XDP treats a Linux host's actual service exposure as the source of truth for firewall policy, then continuously reconciles that state into XDP when available or nftables when it is not.
Linux native · Open source · Local control
Toggle a listener. Green passes; red stops.
Postgres is running without a grant. Try approving it ↓
Loading latest release...
A standalone Linux server has a live service state and a separate firewall state. When an operator has to keep both aligned by hand, stopped services leave holes and new services break until someone remembers another rule.
Auto XDP is a local reconciliation controller. It discovers live endpoints, matches them to explicit workload grants, and keeps effective exposure converged as services change.
Observe live sockets, identify their workloads, and classify the ingress zone.
Intersect runtime evidence with explicit workload grants. Fast events update state; a full pass repairs drift.
Native XDP first, generic XDP next, synchronized nftables when XDP cannot attach.
A listener tells Auto XDP what exists. Your grant decides what may be exposed. Try granting Postgres access, then stop its listener: the exposure closes even though the grant remains.
| Service | Listener | Grant | Exposure |
|---|---|---|---|
| sshTCP :22 | OPEN | ||
| nginxTCP :443 | OPEN | ||
| postgresTCP :5432 | NO GRANT |
Simulated UI only. Changes stay in this page and update the hero above.
The same socket discovery and reconciliation control plane drives every enforcement path. The effective policy follows the available backend. Ports requiring unavailable XDP-only protection stay closed.
Preferred XDP-hook enforcement for unwanted ingress before the normal networking stack handles it.
Compatibility path that preserves the XDP policy model when native attachment is unavailable.
The same reconciler applies the effective policy instead of making operators maintain a second ruleset.
One policy. Multiple enforcement backends.
The deeper implementation exists to preserve policy continuity through reloads, missed events, backend changes, return traffic, and constrained single-host environments.
When XDP is available, unwanted ingress is rejected at the XDP hook before it is passed into the normal kernel networking stack.
XDP_DROPFast socket events update policy quickly, while an independent full discovery pass repairs missed events and map drift.
event + timerHuman-friendly /etc/auto_xdp/config.toml. Configure rate limits, trusted CIDRs, ACL rules, tunnels. SIGHUP hot-reload.
Loadable BPF slot handlers for GRE, ESP, SCTP, or custom protocols. axdp slot load gre or point at your own .o file.
proto-41 (SIT) traffic accepted only from configured sit4_endpoints. All other proto-41 sources dropped at line rate.
TCP SYN creates tracked state. TC egress records outbound flows so return traffic passes without reopening port holes.
tc egressSYN and UDP rate limits keyed per source IP, configurable by process name or IANA service. Aggregate caps available.
anti-brute-forceWhen XDP cannot attach, the same control plane drives a synchronized nftables ruleset. Policy automation keeps working.
graceful degradationTerminal control for everything: axdp stats · axdp acl add · axdp trust · axdp slot load · axdp under-attack on · axdp log-level
The operator view exposes the reconciler's result: active backend, discovered services, policy limits, packet decisions, and the state that keeps legitimate return traffic moving.
Use /etc/auto_xdp/config.toml to identify workloads, grant exposure by zone and port, and configure protection. Start in audit mode to inspect decisions before enforcing them.
# Inspect decisions before switching to enforce.
[policy]
mode = "audit"
[zones.public]
interfaces = []
# Match the actual systemd unit on your host.
[subjects.web.resolve]
systemd_unit = "nginx.service"
[subjects.web.exposure.public.tcp]
ports = [443]
# A grant only opens the port while its workload is listening.
# Unapproved workloads remain closed in enforce mode.
SYSTEM ARCHITECTURE
Live services + explicit grants → effective exposure.
Follow the policy, packet and observation paths. Select a component to explore.
Swipe horizontally to explore the full architecture →
Arrows show direction, not timing. All enforcement stays on your host.
Native XDP → generic XDP → nftables, subject to capability checks. Required protection fails closed.
Auto XDP is intentionally a local host firewall, not a replacement for upstream mitigation or multi-user authorization.
XDP only filters traffic that reaches the NIC. If upstream bandwidth is saturated, use provider-side scrubbing or a protected host.
Exposure requires an explicit matching grant. Workload attribution is runtime evidence, not per-packet workload authentication or a substitute for host isolation.
It is designed for one Linux server, one local daemon, and local kernel state without an API server or datastore.
In a real public-internet test, XDP reduced target softirq CPU from 85.9% to 3.0% under an approximately 367k PPS / 188 Mbps UDP flood. The same effective policy benefits from earlier packet rejection.
modprobe pktgen on the attacker, configure a 64-byte UDP flood
(pkt_size 64, clone_skb 100, count 10000000),
and compare top softirq usage with sudo axdp watch showing
live counter deltas on the target. This measures host-side filtering; it does not mitigate
upstream bandwidth saturation.
Standalone servers are constantly scanned and probed. Traditional firewalls work, but their static policy can drift from the services the host is actually running. A new service needs a remembered rule. A stopped service needs a remembered cleanup.
Auto XDP starts from a different premise: the host already knows which services it is exposing. When an approved workload binds a granted port, policy should converge. When it stops listening, that exposure should disappear without a second manual ruleset.
Auto XDP is an automatically reconciled host firewall for standalone Linux servers.
XDP is the preferred acceleration layer, while generic XDP and nftables provide
safer compatibility paths when the preferred backend is unavailable.
Auto XDP is built in the open for people operating real Linux hosts: VPSes, cloud instances, homelab nodes, and small public servers. The repository is the source of truth for releases, implementation, tests, and the next contribution.
Use, inspect, fork, and improve the project under the Mozilla Public License 2.0.
Tagged releases have landed across five consecutive months. Follow the trail, then inspect the changelog and CI-backed repository history.