Salta ai contenuti

bpfilter - Cheatsheet del Filtraggio di Pacchetti Linux Basato su BPF

bpfilter - Cheatsheet del Filtraggio di Pacchetti Linux Basato su BPF

bpfilter è un daemon che converte regole firewall familiari in programmi BPF ottimizzati. Il problema di lunga data che affronta: iptables ha una sintassi ben compresa ma un limite di prestazioni dalla valutazione sequenziale delle regole, mentre raw eBPF/XDP è veloce ma richiede di scrivere e mantenere il codice BPF. bpfilter li unisce — esprimi le regole in modo familiare e le compila in BPF efficiente collegato al gancio giusto (incluso XDP, che elabora i pacchetti prima che entrino nello stack di rete).

I cambiamenti del firewall possono bloccarti da un host remoto. Prova su un sistema accessibile dalla console e mantieni un percorso di rollback.

Requirements

  • Kernel Linux moderno con supporto BPF (6.4+ consigliato)
  • Privilegi root (carica programmi BPF)
  • libbpf disponibile

Installation

MethodHow
From sourcegit clone https://github.com/facebook/bpfilter && make && sudo make install
Distro packageDisponibile in alcune distribuzioni più nuove
Start daemonsudo bpfilter (o tramite systemd)
Verifybpfilter --version

Architecture

PieceRole
bpfilter daemonRiceve le regole, genera e carica BPF
bfcliCLI nativa per esprimere le regole
iptables/nftables front endTraduci le regole esistenti in bpfilter
BPF programsIl filtro compilato collegato a un gancio

Attach Hooks

HookWhere packets are processed
XDPPiù presto — nel driver, prima dello stack (più veloce)
TC (traffic control)Dopo il parsing di base, ingresso/uscita
cgroupFiltraggio di socket per cgroup
NetfilterPosizionamento compatibile nel percorso classico

Scegliere XDP fornisce il guadagno di prestazioni più grande, in particolare per l”eliminazione del traffico indesiderato (mitigazione DDoS), perché i pacchetti rifiutati non attraversano mai lo stack.

Defining Rules with bfcli

# Conceptual ruleset: default drop, allow SSH and 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
'
CommandDescription
bfcli ruleset set --from-file FCarica le regole da un file
bfcli ruleset getMostra il ruleset attivo
bfcli ruleset flushRimuovi tutte le regole
bfcli chain setGestisci una singola catena

Matchers

MatcherMatches
ip4.saddr / ip4.daddrIPv4 sorgente/destinazione (CIDR supportato)
ip6.saddr / ip6.daddrIndirizzi IPv6
ip4.protoProtocollo (tcp, udp, icmp)
tcp.dport / tcp.sportPorte TCP
udp.dport / udp.sportPorte UDP
tcp.flagsCombinazioni di flag TCP
meta.ifindexInterfaccia

Verdicts

VerdictEffect
ACCEPTConsenti il pacchetto
DROPScarta silenziosamente
CONTINUEPassa alla regola successiva

Using Existing iptables Rules

bpfilter fornisce frontend di traduzione in modo che tu possa mantenere lo strumento esistente:

# Point the iptables-compatible front end at bpfilter
sudo iptables-bpfilter -A INPUT -p tcp --dport 22 -j ACCEPT

Questo è il percorso di migrazione: mantieni la sintassi e gli script di gestione delle tue regole, guadagna l”esecuzione BPF sotto il cofano.

Verifying

CheckCommand
Active rulesetsudo bfcli ruleset get
Loaded BPF programssudo bpftool prog list
Attached XDPip link show <iface>
CountersContatori di regola in bfcli ruleset get
Overheadsudo bpftop per vedere il costo del programma

bpfilter vs Alternatives

Aspectbpfilteriptablesnftablesraw XDP/eBPF
PerformanceAlto (BPF/XDP)Più basso (sequenziale)Migliore di iptablesPiù alto
SyntaxFamiliare o bfcliFamiliareModerno, unificatoScrivi codice BPF
MaturityPiù nuovoMolto maturoMaturoDipende da te
Best forVelocità BPF con regole familiariCompatibilità legacyNetfilter modernoDatapath personalizzato

Ispeziona il suo costo di runtime con bpftop; confronta con iptables per il percorso classico.

Resources