È stata pubblicata la versione 1.0.1 del filtro dei pacchetti nftables, che unifica le interfacce di filtraggio dei pacchetti per IPv4, IPv6, ARP e ponti di rete (destinata a sostituire iptables, ip6table, arptables ed ebtables). Le modifiche necessarie per il funzionamento della versione nftables 1.0.1 sono incluse nel kernel Linux 5.16-rc1.
Nel pacchetto nftables sono inclusi componenti del filtro a pacchetti che operano nello spazio utente, mentre a livello di kernel l'operazione è gestita dal sottosistema nf_tables, incluso nel kernel di Linux a partire dalla versione 3.13. A livello di kernel viene fornito solo un'interfaccia generale, indipendente dal protocollo specifico e che offre funzioni di base per l'estrazione dei dati dai pacchetti, l'esecuzione di operazioni sui dati e la gestione del flusso.
Le regole di filtraggio e i gestori specifici per i protocolli vengono compilati in bytecode nello spazio utente, dopodiché questo bytecode viene caricato nel kernel tramite l'interfaccia Netlink e viene eseguito nel kernel in una sezione macchina virtuale, simile a BPF (Berkeley Packet Filters). Questo approccio consente di ridurre significativamente la dimensione del codice di filtraggio che opera a livello di kernel e di spostare tutte le funzioni di parsing delle regole e di logica di operazione con i protocolli nello spazio utente.
Novità principali:
- Ridotto il consumo di memoria durante il caricamento di grandi set e mappe.
- Accelerato il riavvio di set e mappe.
- Accelerata l'uscita delle tabelle e delle catene preferite in grandi insiemi di regole. Ad esempio, il tempo di esecuzione del comando «nft list ruleset» per visualizzare un insieme di regole di 100.000 righe è di 3,049 secondi, mentre per la visualizzazione solo delle tabelle nat e filter («nft list table nat», «nft list table filter») si riduce a 1,969 e 0,697 secondi.
- Accelerata l'esecuzione delle query con l'opzione «—terse» nel trattamento delle regole con grandi set e mappe.
- È stata fornita la possibilità di filtrare il traffico dalla catena «egress», trattata allo stesso livello dell'elaboratore egress nella catena netdev (hook egress), cioè nella fase in cui il driver riceve un pacchetto dallo stack di rete del kernel. table netdev filter { chain egress { type filter hook egress devices = { eth0, eth1 } priority 0; meta priority set ip saddr map { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 } } }
- È consentita la corrispondenza e la modifica dei byte nell'intestazione e nel contenuto del pacchetto a uno spostamento specificato. # nft add rule x y @ih,32,32 0x14000000 counter # nft add rule x y @ih,32,32 set 0x14000000 counter
Fonte: opennet.ru
