È stato pubblicato il rilascio del filtro pacchetti nftables 1.1.6, che unifica le interfacce di filtraggio dei pacchetti per IPv4, IPv6, ARP e ponti di rete (mirato a sostituire iptables, ip6tables, arptables ed ebtables). Contemporaneamente è stato rilasciato anche il pacchetto associato libnftnl 1.3.1, che fornisce un'API a basso livello per interagire con il sottosistema nf_tables.
Il pacchetto nftables include componenti del filtro pacchetti che operano nello spazio utente, mentre a livello kernel, il funzionamento è garantito dal sottosistema nf_tables, incluso nel kernel Linux dalla versione 3.13. A livello kernel viene fornita solo un'interfaccia generica, non dipendente dal protocollo specifico, che offre funzionalità 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, dopo di che questo bytecode viene caricato nel kernel tramite l'interfaccia Netlink e viene eseguito nel kernel in un'area speciale. macchina virtuale, che ricorda i BPF (Berkeley Packet Filters). Questo approccio consente di ridurre significativamente la dimensione del codice di filtraggio che opera a livello di kernel, spostando tutte le funzioni di analisi delle regole e la logica di gestione dei protocolli nello spazio utente.
Principali modifiche:
- È stata fornita un'implementazione completa dei modelli di tunnel leggeri, come vxlan, geneve ed erspan: table netdev global { tunnel t1 { id 10 ip saddr 192.168.2.10 ip daddr 192.168.2.11 sport 1025 dport 20020 ttl 1 erspan { version 1 index 2 } } tunnel t2 { id 10 ip saddr 192.168.3.10 ip daddr 192.168.3.11 sport 1025 dport 21021 ttl 1 erspan { version 1 index 2 } } chain in { type filter hook ingress device veth0 priority 0; tunnel name ip saddr map { 10.141.10.12 : «t1», 10.141.10.13 : «t2» } fwd to erspan1 } } Prima di caricare le regole, è necessario creare l'interfaccia di rete erspan1: ip link add dev erspan1 type erspan external
- È stata aggiunta la supporto per le maschere nei nomi delle interfacce di rete nei gestori netdev; per esempio, per aggiungere una catena di base nel filtro del traffico in entrata per tutti i dispositivi vlan, si può indicare: table netdev t { chain c { type filter hook ingress devices = { «vlan*», «veth0» } priority filter; policy accept; } }
- Nei sistemi con kernel Linux 6.18+ è stata implementata la supporto per la trasmissione di frame L2 nell'interfaccia dei bridge di rete per l'elaborazione locale; per esempio, per indirizzare a uno stack IP tutti i frame Ethernet per l'indirizzo MAC de:ad:00:00:be:ef si può indicare: table bridge global { chain pre { type filter hook prerouting priority 0; policy accept; ether daddr de:ad:00:00:be:ef meta pkttype set host ether daddr set meta ibrhwaddr accept } }
- È stata aggiunta una nuova infrastruttura per il fuzzing-testing utilizzando l'insieme di strumenti afl++ (american fuzzy lop++), abilitabile nella fase di costruzione tramite «./configure —with-fuzzer».
Fonte: opennet.ru
