A fost publicată versiunea 1.1.6 a filtrului de pachete nftables, care unifică interfețele de filtrare a pachetelor pentru IPv4, IPv6, ARP și punți de rețea (vizând înlocuirea iptables, ip6tables, arptables și ebtables). Totodată, a fost publicată versiunea 1.3.1 a bibliotecii însoțitoare libnftnl, care oferă un API de nivel joasă pentru interacțiunea cu subsistemul nf_tables.
Pachetul nftables include componente ale filtrului de pachete care funcționează în spațiul utilizatorului, în timp ce, la nivel de nucleu, funcționarea este asigurată de subsistemul nf_tables, parte a nucleului Linux începând cu versiunea 3.13. La nivel de nucleu se oferă doar o interfață generală, independentă de protocolul specific, care asigură funcții de bază pentru extragerea datelor din pachete, executarea operațiunilor cu datele și gestionarea fluxului.
Regulile de filtrare și handler-ii specifici pentru protocoale sunt compilate în bytecode în spațiul utilizatorului, după care acest bytecode este încărcat în nucleu prin intermediul interfeței Netlink și executat în nucleu într-un mod special mașina virtuală, similar cu BPF (Berkeley Packet Filters). Această abordare permite reducerea semnificativă a dimensiunii codului de filtrare care funcționează la nivel de nucleu și mutarea tuturor funcțiilor de analiză a regulilor și logica de funcționare cu protocoalele în spațiul utilizatorului.
Modificări principale:
- Este asigurat suport complet pentru șabloanele de tuneluri ușoare, cum ar fi vxlan, geneve și 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 } } Înainte de a încărca regulile, este necesar să se creeze un interfață de rețea erspan1: ip link add dev erspan1 type erspan external
- A fost adăugat suport pentru măști în numele interfețelor de rețea în handler-ele netdev, de exemplu, pentru a adăuga o bază de lanț în filtru de trafic intrant pentru toate dispozitivele vlan, se poate specifica: table netdev t { chain c { type filter hook ingress devices = { «vlan*», «veth0» } priority filter; policy accept; } }
- Pe sistemele cu kernel Linux 6.18+ a fost implementat suportul pentru transmiterea cadrelor L2 în interfața punților de rețea pentru procesare locală, de exemplu, pentru a direcționa toate cadrele Ethernet pentru adresa MAC de:ad:00:00:be:ef, se poate specifica: 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 } }
- A fost adăugată o nouă infrastructură pentru testarea de fuzzing utilizând instrumentul afl++ (american fuzzy lop++), care este activată în etapa de compilare prin „./configure —with-fuzzer”.
Sursa: opennet.ro
