A fost publicată versiunea 1.0.2 a filtrului de pachete nftables, care unifică interfețele de filtrare a pachetelor pentru IPv4, IPv6, ARP și punți de rețea (destinată să înlocuiască iptables, ip6tables, arptables și ebtables). Modificările necesare pentru funcționarea versiunii 1.0.2 a nftables sunt incluse în nucleul Linux 5.17-rc.
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.
Noutăți principale:
- A fost adăugat un mod de optimizare a regulilor, activat prin noua opțiune „-o” („—optimize”), care poate fi combinată cu opțiunea „—check” pentru a verifica și optimiza modificările din fișierul setului de reguli fără a-l încărca efectiv. Optimizarea permite combinarea regulilor similare, de exemplu, regulile: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.5 accept ip saddr 1.1.1.1 ip daddr 2.2.2.2 accept ip saddr 2.2.2.2 ip daddr 3.3.3.3 drop
vor fi combinate în meta iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.5 } accept ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 : accept, 2.2.2.2 . 3.3.3.3 : drop }
Exemplu de utilizare: # nft -c -o -f ruleset.test Fuziune: ruleset.nft:16:3-37: ip daddr 192.168.0.1 counter accept ruleset.nft:17:3-37: ip daddr 192.168.0.2 counter accept ruleset.nft:18:3-37: ip daddr 192.168.0.3 counter accept în: ip daddr { 192.168.0.1, 192.168.0.2, 192.168.0.3 } counter packets 0 bytes 0 accept
- În listele set-urilor a fost implementată posibilitatea de a specifica opțiuni ip și tcp, precum și chunk-uri sctp: set s5 { typeof ip option ra value elements = { 1, 1024 } } set s7 { typeof sctp chunk init num-inbound-streams elements = { 1, 4 } } chain c5 { ip option ra value @s5 accept } chain c7 { sctp chunk init num-inbound-streams @s7 accept }
- A fost adăugată suport pentru opțiunile TCP fastopen, md5sig și mptcp.
- A fost adăugată suport pentru utilizarea subtipului mp-tcp în potriviri: tcp option mptcp subtype 1
- Codul de filtrare, care funcționează la nivelul nucleului, a fost îmbunătățit.
- Pentru flowtable a fost implementat suport complet pentru formatul JSON.
- A fost oferită posibilitatea de a utiliza acțiunea „reject” în operațiunile de potrivire a cadrelor Ethernet. ether saddr aa:bb:cc:dd:ee:ff ip daddr 192.168.0.1 reject
Sursa: opennet.ro
