A fost publicată versiunea 1.1.0 a filtrului de pachete nftables, care unifică interfețele de filtrare a pachetelor pentru IPv4, IPv6, ARP și bridge-uri de rețea (destinat să înlocuiască iptables, ip6tables, arptables și ebtables). Schimbarea semnificativă a numărului de versiune nu este asociată cu vreo modificare radicală, ci este doar o continuare a numerotării în sistem decimal (versiunea anterioară a fost 1.0.9). De asemenea, a fost publicată versiunea bibliotecii însoțitoare libnftnl 1.2.7, care oferă un API de nivel inferior pentru interacțiunea cu subsystemul 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:
- Exprimațiile map au primit suport pentru variabile: define dst_map = { ::1234 : 5678 } table ip6 nat { map dst_map { typeof ip6 daddr : tcp dport; elements = $dst_map } chain prerouting { ip6 nexthdr tcp redirect to ip6 daddr map @dst_map } }
- Support for VLAN has been added: ip saddr 10.1.1.1 icmp type echo-request vlan id set 321 # payload ether type 8021ad vlan id 10 vlan type 8021q vlan id 100 vlan type ip accept
- Pentru expresiile „log” a fost implementat un nou preprocesor de șiruri cu suport pentru variabile: define message=„test” log prefix „my $message”
- În timpul calculării valorii expresiei „meta hour” a fost implementat un proces de gestionare a decalajului negativ în fusul orar, specificat prin variabila de mediu TZ: TZ=UTC-4 nft add rule x y meta hour „22:00”
- A fost asigurat conversia ordinii de octeți la utilizarea expresiilor ct și meta, precum și în urma operațiunilor de fuziune și specificarea intervalelor în set-uri. map mapv6 { typeof ip6 dscp : meta mark; } meta mark set ip6 dscp map @map1 se va obține codul de byte: [ payload load 2b @ network header + 0 => reg 1 ] [ bitwise reg 1 = ( reg 1 & 0x0000c00f ) ^ 0x00000000 ] [ byteorder reg 1 = ntoh(reg 1, 2, 2) ] [ bitwise reg 1 = ( reg 1 > 0x00000006 ) ] [ lookup reg 1 set mapv6 dreg 1 ] [ meta set mark with reg 1 ]
- A fost reluat suportul pentru comanda „replace rule”. replace rule ip t1 c1 handle 3 ‘jhash ip protocol . ip saddr mod 170 vmap { 0-94 : goto wan1, 95-169 : goto wan2, 170-269 }”
- A fost reluată capacitatea de a adăuga dispozitive de rețea în flowtable-urile existente: create flowtable inet filter f1 { hook ingress priority 0; counter } add flowtable inet filter f1 { devices = { dummy1 } ; }
- Au fost rezolvate problemele apărute la utilizarea comenzii „create set”: define ip-block-4 = { 1.1.1.1 } create set netdev filter ip-block-4-test { type ipv4_addr flags interval auto-merge elements = $ip-block-4 }
- Au fost rezolvate problemele legate de utilizarea reprezentării numerice a opțiunilor tcp: tcp option 254
- Au fost rezolvate problemele apărute la utilizarea expresiilor meta și ct cu seturi map: meta mark set vlan id map { 1 : 0x00000001, 4095 : 0x00004095 }
- În expresiile payload și concat, este interzisă specificarea datelor mai mari de 512 octeți.
- La executarea comenzii „nft describe”, a fost implementată contabilizarea valorilor din fișierele group, rt_mark și rt_realms, localizate în directoarele /etc/iproute2/ și /use/share/iproute2/. # nft describe meta rtclassid meta expression, datatype realm (domeniu de rutare) (basetype integer), 32 biți constante simbolice predefinite din /etc/iproute2/rt_realms (în decimal): cosmos 0 Respinge declarația cu interval meta mark set 0-100
- Operația de listare a tabelelor a fost accelerată. A fost implementat suportul pentru opțiunea -t/—terse pentru accelerarea comenzilor „list table” și „list set”.
- A fost asigurată transformarea expresiilor meter în seturi dinamice: adăugați regula t c tcp dport 80 meter m size 128 { ip saddr timeout 2s limit rate 10/second } va fi transformat în set m { type ipv4_addr size 128 flags dynamic,timeout } tcp dport 80 actualizare @m { ip saddr timeout 2s limit rate 10/second burst 5 packets }
- În reprezentarea în format JSON s-a adăugat suportul pentru obiectele synproxy și seturi map cu date combinate.
- În seturile definite în format JSON, a fost implementat suportul pentru flagul auto-merge.
- Când se utilizează reprezentarea în format JSON, este permisă specificarea mai multor dispozitive în blocul „chain”.
- Când se folosesc opțiunile -f/—filename, se asigură procesarea căilor relative la directorul fișierului curent.
- Când se utilizează opțiunile -I/—include, parcurgerea căilor implicit se face acum din partea de jos a listei.
- Foarte bine s-a configurat funcționarea opțiunilor -o/—optimize cu expresii care conțin contoare de valori: # nft -c -o -f ruleset.nft Fuzionare: ruleset.nft:5:17-45: ct state invalid counter drop ruleset.nft :6:17-59: ct state established,related counter accept în: ct state vmap { invalid counter : drop, established counter : accept, related counter : accept } Fuzionare: ruleset.nft:7:17-43: tcp dport 80 counter accept ruleset.nft:8:17-44: tcp dport 123 counter accept în: tcp dport { 80, 123 } counter accept Fuzionare: ruleset.nft:9:17-64: ip saddr 1.1.1.1 ip daddr 2.2.2.2 counter accept ruleset.nft:10:17-62: ip saddr 1.1.1.2 ip daddr 3.3.3.3 counter drop în: ip saddr . ip daddr vmap { 1.1.1.1 . 2.2.2.2 counter : accept, 1.1.1.2 . 3.3.3.3 counter : drop }
- A fost restabilită compatibilitatea cu dump-urile set-ului create în nftables înainte de versiunea 0.9.8.
Sursa: opennet.ro
