Zum Inhalt springen

bpfilter - BPF-Based Linux Packet Filtering Cheatsheet

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

MethodeWie
Vom Sourcegit clone https://github.com/facebook/bpfilter && make && sudo make install
Distro PackageVerfügbar in einigen Neueren Distributionen
Start Daemonsudo bpfilter (oder via Systemd)
Verifikationbpfilter --version

Architektur

PieceRole
bpfilter DaemonEmpfange Rules, generiere und lade BPF
bfcliNative CLI zum Ausdrücken von Rules
iptables/nftables Front EndÜbersetze Existierende Rules in Bpfilter
BPF ProgramsDas kompilierte Filter attached zu einem Hook

Attach Hooks

HookWo Packets bearbeitet werden
XDPFrühster — im Driver, bevor der Stack (Schnellster)
TC (Traffic Control)Nach Basis Parsing, Ingress/Egress
cgroupPer-cgroup Socket Filtering
NetfilterKompatible 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
'
BefehlBeschreibung
bfcli ruleset set --from-file FLoad Rules aus einer Datei
bfcli ruleset getZeige die Aktive Ruleset
bfcli ruleset flushRemove alle Rules
bfcli chain setManage eine einzelne Chain

Matchers

MatcherMatches
ip4.saddr / ip4.daddrSource/Destination IPv4 (CIDR Unterstützt)
ip6.saddr / ip6.daddrIPv6 Addresses
ip4.protoProtocol (tcp, udp, icmp)
tcp.dport / tcp.sportTCP Ports
udp.dport / udp.sportUDP Ports
tcp.flagsTCP Flag Kombinationen
meta.ifindexInterface

Verdicts

VerdictEffect
ACCEPTErlaube das Packet
DROPVerwerfe Silently
CONTINUEFall 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

CheckBefehl
Aktive Rulesetsudo bfcli ruleset get
Geladene BPF Programssudo bpftool prog list
Attached XDPip link show <iface>
CountersRule Counters in bfcli ruleset get
Overheadsudo bpftop zum Sehen Program Cost

bpfilter vs Alternativen

AspektbpfilteriptablesnftablesRaw XDP/eBPF
PerformanceHoch (BPF/XDP)Niedrig (Sequentiell)Besser als iptablesHöchst
SyntaxVertraut oder bfcliVertrautModern, UnifiedSchreibe BPF Code
MaturityNeuerSehr ReifReifAbhängig von dir
Am besten fürBPF Speed mit Vertrauten RulesLegacy CompatibilityModern NetfilterCustom Datapaths

Inspiziere seinen Runtime Cost mit bpftop; vergleich mit iptables für den Klassischen Path.

Ressourcen