È stata pubblicata l'uscita del filtro a pacchetti nftables 1.0.5, che unifica le interfacce di filtraggio dei pacchetti per IPv4, IPv6, ARP e ponti di rete (destinata a sostituire iptables, ip6tables, arptables ed ebtables). Contemporaneamente, è stata pubblicata l'uscita della libreria correlata libnftnl 1.2.3, che offre un'API a basso livello per interagire con il sottosistema nf_tables.
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.
Variazioni principali:
- Nell'ottimizzatore di regole, attivato con l'opzione "-o/--optimize", sono stati risolti problemi di fusione delle regole, delle mappe e delle liste set. # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; policy drop; ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 } } # nft -o -c -f ruleset.nft Fusione: ruleset.nft:4:3-52: ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ruleset.nft:5:3-52: ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 in: snat to ip saddr . tcp dport map { 1.1.1.1 . 8000 : 4.4.4.4 . 80, 2.2.2.2 . 8001 : 5.5.5.5 . 90 }
- Durante la fusione degli elementi ethernet e vlan è stata abilitata la definizione di un set dinamico, riempito in base ai parametri di percorso del pacchetto. add table netdev x add chain netdev x y { type filter hook ingress device enp0s25 priority 0; } add set netdev x macset { typeof ether daddr . vlan id; flags dynamic,timeout; } add rule netdev x y update @macset { ether daddr . vlan id timeout 60s } add rule netdev x y ether saddr . vlan id { 0a:0b:0c:0d:0e:0f . 42, 0a:0b:0c:0d:0e:0f . 4095 } counter accept
- Eseguito il display delle regole con le mappe di liste, che contengono maschere nei nomi delle interfacce. table inet filter { chain INPUT { iifname vmap { «eth0» : jump input_lan, «wg*» : jump input_vpn } } chain input_lan {} chain input_vpn {} }
- Eliminati i cambiamenti regressivi che portavano a un'analisi lessicale errata delle regole corrette.
- Risolti i problemi di elaborazione lenta e fusione automatica di grandi liste con elementi che definiscono intervalli di valori.
- Eliminato il crash durante l'aggiunta di elementi a un set-list non valido.
Fonte: opennet.ru
