All’inizio del 2019, bpfilter è ancora in fase di sviluppo e non è ancora utilizzabile. Lo scheletro di base è qui e può anche essere attivato nei kernel 4.18+, ma non fa molto per ora in quanto non è completo. Il codice richiesto per tradurre le regole iptables in bytecode BPF, sebbene inviato lungo l’RFC originale, non è arrivato al kernel al momento.
Una volta pronto, non dovrebbe essere necessario alcun utensile specifico. Bpfilter sarà probabilmente abilitato con qualcosa come modprobe bpfilter
, e quindi l’idea è quella di sostituire in modo trasparente il back-end, lasciando intatto il front-end: quindi iptables
dovrebbe essere l’unico strumento richiesto per gestire le regole, senza alcuna opzione particolare richiesta. Inoltre,bpftool
permette di ispezionare i programmi eBPF (incluse le regole iptables tradotte da bpfilter) caricati nel kernel.
Puoi controllare questo se vuoi nel seguente video (disclaimer: dalla mia azienda), che mostra come abbiamo usato bpfilter con una classica regola iptables (avevamo patchato il kernel con il codice dalla RFC; ed eseguendo il bpfilter.ko nella console non sarà necessario sulla versione finale).
È comunque possibile collegare programmi BPF all’hook XDP (a livello di driver), anche senza utilizzare bpfilter, per ottenere prestazioni molto migliori di quelle offerte da netfilter. Tuttavia, dovresti riscrivere completamente le tue regole come programmi C, compilarle in eBPF con clang e caricarle con ad esempio lo strumento ip
(da iproute2). Non lo so se questo corrisponderebbe al tuo “set di funzionalità”. A seconda di quanto sia forte il tuo bisogno, un’altra opzione drastica potrebbe essere quella di spostare l’elaborazione dei pacchetti nello spazio utente e reimplementare la configurazione con il framework DPDK.