Objavljeno izdanje paketskog filtra nftables 1.0.5, koji unificira sučelja za filtriranje paketa za IPv4, IPv6, ARP i mrežne mostove (cilja na zamjenu iptables, ip6tables, arptables i ebtables). Istovremeno je objavljeno i izdanja prateće biblioteke libnftnl 1.2.3, koja pruža niskorazinski API za interakciju s pod-sustavom nf_tables.
U paket nftables uključeni su komponente paketskog filtra koje rade u korisničkom prostoru, dok na razini jezgre rad osigurava pod-sustav nf_tables, koji je deo jezgre Linuxa od izdanja 3.13. Na razini jezgre pruža se samo opće sučelje koje nije ovisno o specifičnom protokolu i koje osigurava osnovne funkcije ekstrakcije podataka iz paketa, izvršavanja operacija s podacima i upravljanja protokom.
Izravno pravila filtriranja i specifični za protokole obrada se kompajliraju u bajtkod u korisničkom prostoru, nakon čega se taj bajtkod učitava u jezgru putem Netlink sučelja i izvršava u jezgru u posebnoj virtualnoj mašini, koja podsjeća na BPF (Berkeley Packet Filters). Ovaj pristup omogućava značajno smanjenje veličine koda filtriranja koji radi na razini jezgre i prebacivanje svih funkcija analize pravila i logike rada s protokolima u korisnički prostor.
Glavne promjene:
- U optimizatoru pravila, pozvanom prilikom odabira opcije "-o/--optimize", riješeni su problemi s spajanjem pravila, map- i set-lista. # cat ruleset.nft table ip x { chain y { type nat hook postrouting priority srcnat; policy drop; ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 } } # nft -o -c -f ruleset.nft Merging: ruleset.nft:4:3-52: ip saddr 1.1.1.1 tcp dport 8000 snat to 4.4.4.4:80 ruleset.nft:5:3-52: ip saddr 2.2.2.2 tcp dport 8001 snat to 5.5.5.5:90 into: snat to ip saddr . tcp dport map { 1.1.1.1 . 8000 : 4.4.4.4 . 80, 2.2.2.2 . 8001 : 5.5.5.5 . 90 }
- Pri spajanju ethernet i vlan elemenata osigurano je određivanje dinamičkog set-lista, koji se popunjava na temelju parametara puta paketa. add table netdev x add chain netdev x y { type filter hook ingress device enp0s25 priority 0; } add set netdev x macset { typeof ether daddr . vlan id; flags dynamic,timeout; } add rule netdev x y update @macset { ether daddr . vlan id timeout 60s } add rule netdev x y ether saddr . vlan id { 0a:0b:0c:0d:0e:0f . 42, 0a:0b:0c:0d:0e:0f . 4095 } counter accept
- Postavljen je pregled pravila s map-om popisa koji sadrži maske u imenima sučelja. table inet filter { chain INPUT { iifname vmap { "eth0" : jump input_lan, "wg*" : jump input_vpn } } chain input_lan {} chain input_vpn {} }
- Ispravljene su regresivne promjene koje su uzrokovale pogrešno leksičko tumačenje ispravnih pravila.
- Riješeni su problemi s sporom obradom i automatskim spajanjem velikih popisa s elementima koji definiraju intervale vrijednosti.
- Uklonjeno je iznenada završavanje prilikom dodavanja elemenata u neispravan set-popis.
Izvor: opennet.ru
