bpfilter - BPF-Based Linux Packet Filtering Cheatsheet
bpfilter ist ein Daemon, der vertraute Firewall-Regeln in optimierte BPF-Programme übersetzt. Das lange bestehendes Problem, das es adressiert: iptables hat Wohl-verstanden Syntax aber eine Performance Ceiling von Sequentiellem Rule Evaluation, während Raw eBPF/XDP Schnell ist aber BPF-Code Schreiben und Erhalten benötigt. bpfilter Brücken Schub — du Definierst Rules auf eine vertraute Weise und es kompiliert sie in Efficient BPF attached bei der Richtigen Hook (Einschließlich XDP, welche Packets vor bearbeitet, sie treten den Netzwerk-Stack ein).
Firewall-Änderungen können dich aus einem Remote Host lockken. Test auf einem Console-Accessible System und halte einen Rollback Path.
Anforderungen
- Moderner Linux-Kernel mit BPF Support (6.4+ Empfohlen)
- Root Privileges (lädt BPF Programs)
libbpf Verfügbar
Installation
| Methode | Wie |
|---|
| Vom Source | git clone https://github.com/facebook/bpfilter && make && sudo make install |
| Distro Package | Verfügbar in einigen Neueren Distributionen |
| Start Daemon | sudo bpfilter (oder via Systemd) |
| Verifikation | bpfilter --version |
Architektur
| Piece | Role |
|---|
bpfilter Daemon | Empfange Rules, generiere und lade BPF |
bfcli | Native CLI zum Ausdrücken von Rules |
| iptables/nftables Front End | Übersetze Existierende Rules in Bpfilter |
| BPF Programs | Das kompilierte Filter attached zu einem Hook |
Attach Hooks
| Hook | Wo Packets bearbeitet werden |
|---|
| XDP | Frühster — im Driver, bevor der Stack (Schnellster) |
| TC (Traffic Control) | Nach Basis Parsing, Ingress/Egress |
| cgroup | Per-cgroup Socket Filtering |
| Netfilter | Kompatible Platzierung im Klassischen Path |
Choosing XDP gibt den Größten Performance Win, Besonders zum Dropping Unerwünschter Packets (DDoS Mitigation), weil Ablehnte Packets niemals den Stack durchlaufen.
Definieren von Rules mit bfcli
# Conceptual Ruleset: Default Drop, Allow SSH und Established Traffic
sudo bfcli ruleset set --from-str '
chain BF_HOOK_XDP policy DROP
rule
ip4.proto tcp
tcp.dport 22
ACCEPT
rule
ip4.saddr 10.0.0.0/8
ACCEPT
'
| Befehl | Beschreibung |
|---|
bfcli ruleset set --from-file F | Load Rules aus einer Datei |
bfcli ruleset get | Zeige die Aktive Ruleset |
bfcli ruleset flush | Remove alle Rules |
bfcli chain set | Manage eine einzelne Chain |
Matchers
| Matcher | Matches |
|---|
ip4.saddr / ip4.daddr | Source/Destination IPv4 (CIDR Unterstützt) |
ip6.saddr / ip6.daddr | IPv6 Addresses |
ip4.proto | Protocol (tcp, udp, icmp) |
tcp.dport / tcp.sport | TCP Ports |
udp.dport / udp.sport | UDP Ports |
tcp.flags | TCP Flag Kombinationen |
meta.ifindex | Interface |
Verdicts
| Verdict | Effect |
|---|
ACCEPT | Erlaube das Packet |
DROP | Verwerfe Silently |
CONTINUE | Fall durch zur Nächsten Rule |
Using Existierende iptables Rules
bpfilter Schiffe Translations Front Ends, sodass du Existierende Tooling behaltest:
# Point die iptables-kompatible Front-End zu bpfilter
sudo iptables-bpfilter -A INPUT -p tcp --dport 22 -j ACCEPT
Das ist der Migration Path: behalte deine Rule-Syntax und Management Scripts, gewinne BPF Execution Darunter.
Verifying
| Check | Befehl |
|---|
| Aktive Ruleset | sudo bfcli ruleset get |
| Geladene BPF Programs | sudo bpftool prog list |
| Attached XDP | ip link show <iface> |
| Counters | Rule Counters in bfcli ruleset get |
| Overhead | sudo bpftop zum Sehen Program Cost |
bpfilter vs Alternativen
| Aspekt | bpfilter | iptables | nftables | Raw XDP/eBPF |
|---|
| Performance | Hoch (BPF/XDP) | Niedrig (Sequentiell) | Besser als iptables | Höchst |
| Syntax | Vertraut oder bfcli | Vertraut | Modern, Unified | Schreibe BPF Code |
| Maturity | Neuer | Sehr Reif | Reif | Abhängig von dir |
| Am besten für | BPF Speed mit Vertrauten Rules | Legacy Compatibility | Modern Netfilter | Custom Datapaths |
Inspiziere seinen Runtime Cost mit bpftop; vergleich mit iptables für den Klassischen Path.
Ressourcen