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
| Method | How |
|---|
| From source | git clone https://github.com/facebook/bpfilter && make && sudo make install |
| Distro package | Disponibile in alcune distribuzioni più nuove |
| Start daemon | sudo bpfilter (o tramite systemd) |
| Verify | bpfilter --version |
Architecture
| Piece | Role |
|---|
bpfilter daemon | Riceve le regole, genera e carica BPF |
bfcli | CLI nativa per esprimere le regole |
| iptables/nftables front end | Traduci le regole esistenti in bpfilter |
| BPF programs | Il filtro compilato collegato a un gancio |
Attach Hooks
| Hook | Where packets are processed |
|---|
| XDP | Più presto — nel driver, prima dello stack (più veloce) |
| TC (traffic control) | Dopo il parsing di base, ingresso/uscita |
| cgroup | Filtraggio di socket per cgroup |
| Netfilter | Posizionamento 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
'
| Command | Description |
|---|
bfcli ruleset set --from-file F | Carica le regole da un file |
bfcli ruleset get | Mostra il ruleset attivo |
bfcli ruleset flush | Rimuovi tutte le regole |
bfcli chain set | Gestisci una singola catena |
Matchers
| Matcher | Matches |
|---|
ip4.saddr / ip4.daddr | IPv4 sorgente/destinazione (CIDR supportato) |
ip6.saddr / ip6.daddr | Indirizzi IPv6 |
ip4.proto | Protocollo (tcp, udp, icmp) |
tcp.dport / tcp.sport | Porte TCP |
udp.dport / udp.sport | Porte UDP |
tcp.flags | Combinazioni di flag TCP |
meta.ifindex | Interfaccia |
Verdicts
| Verdict | Effect |
|---|
ACCEPT | Consenti il pacchetto |
DROP | Scarta silenziosamente |
CONTINUE | Passa 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
| Check | Command |
|---|
| Active ruleset | sudo bfcli ruleset get |
| Loaded BPF programs | sudo bpftool prog list |
| Attached XDP | ip link show <iface> |
| Counters | Contatori di regola in bfcli ruleset get |
| Overhead | sudo bpftop per vedere il costo del programma |
bpfilter vs Alternatives
| Aspect | bpfilter | iptables | nftables | raw XDP/eBPF |
|---|
| Performance | Alto (BPF/XDP) | Più basso (sequenziale) | Migliore di iptables | Più alto |
| Syntax | Familiare o bfcli | Familiare | Moderno, unificato | Scrivi codice BPF |
| Maturity | Più nuovo | Molto maturo | Maturo | Dipende da te |
| Best for | Velocità BPF con regole familiari | Compatibilità legacy | Netfilter moderno | Datapath personalizzato |
Ispeziona il suo costo di runtime con bpftop; confronta con iptables per il percorso classico.
Resources