A fost publicată lansarea filtrului de pachete nftables 1.1.6, unificând interfețele de filtrare a pachetelor pentru IPv4, IPv6, ARP și punți de rețea (care vizează înlocuirea iptables, ip6table, arptables și ebtables). În același timp, a fost publicată lansarea bibliotecii însoțitoare libnftnl 1.3.1, oferind un API de nivel scăzut pentru interacțiunea cu subsistemul nf_tables.
Pachetul nftables conține componentele de filtrare a pachetelor care operează în spațiul utilizatorului, în timp ce munca la nivel de kernel este asigurată de subsistemul nf_tables, care face parte din kernel. Linux Începând cu versiunea 3.13, la nivel de kernel este furnizată doar o interfață generică independentă de protocol, care oferă funcționalități de bază pentru extragerea datelor din pachete, efectuarea operațiunilor cu datele și controlul fluxului.
Regulile de filtrare în sine și handlerele specifice protocolului sunt compilate în bytecode în spațiul utilizatorului, după care acest bytecode este încărcat în kernel folosind interfața Netlink și executat în kernel într-un mod special. mașină virtuală, amintind de BPF (Berkeley Packet Filters). Această abordare permite o reducere semnificativă a dimensiunii codului de filtrare care rulează la nivel de kernel și mută toată analiza regulilor și logica protocolului în spațiul utilizatorului.
Principalele modificări:
- Suport complet pentru șabloane ușoare de tuneluri, 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; tunel name ip saddr map { 10.141.10.12 : "t1", 10.141.10.13 : "t2" } fwd to erspan1 } } Înainte de a încărca regulile, ar trebui să creați interfața de rețea erspan1: ip link add dev erspan1 type erspan external
- S-a adăugat suport pentru măști în numele interfețelor de rețea din handlerele netdev. De exemplu, pentru a adăuga un lanț de bază la filtrul de trafic de intrare pentru toate dispozitivele VLAN, puteți specifica: table netdev t { chain c { type filter hook ingress devices = { "vlan*", "veth0" } priority filter; policy accept; } }
- Pe sistemele cu kernelul Linux Versiunea 6.18+ acceptă transmiterea cadrelor L2 către interfața bridge-ului de rețea pentru procesare locală. De exemplu, pentru a direcționa toate cadrele Ethernet pentru adresa MAC de:ad:00:00:be:ef către stiva IP, puteți 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 fuzzing-ului folosind lanțul de instrumente afl++ (american fuzzy lop++), activată la momentul construirii prin intermediul opțiunii „./configure --with-fuzzer”.
Sursa: opennet.ru
