Objavljen je izdanak paketnog filtra nftables 0.9.9, koji standardizira sučelja za filtriranje paketa za IPv4, IPv6, ARP i mrežne mostove (usmjeren za zamjenu iptables, ip6tables, arptables i ebtables). Ujedno je objavljen i izdanak prateće biblioteke libnftnl 1.2.0, koja pruža niskonivojski API za interakciju s podsustavom nf_tables. Potrebne izmjene za rad izdanja nftables 0.9.9 uključene su u jezgru Linuxa 5.13-rc1.
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 novine:
- Implementirana je mogućnost prebacivanja obrade flowtable na stranu mrežnog adaptera, koja se uključuje uz pomoć flage ‘offload’. Flowtable predstavlja mehanizam optimizacije puta preusmjeravanja paketa, gdje se cjelokupna obrada svih lanaca pravila primjenjuje samo na prvi paket, dok se svi ostali paketi u toku propuštaju izravno. table ip global { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward priority filter; policy accept; ip protocol { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; policy accept; oifname «wan» masquerade } }
- Dodana je podrška za pričvršćivanje taba za vezanje uz vlasnika, što omogućuje ekskluzivno korištenje taba od strane procesa. Kada proces završi, tablica vezana uz njega automatski se briše. Informacije o procesu prikazuju se u dumpu pravila u obliku komentara: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; policy accept; counter packets 1 bytes 309 } }
- Dodana je podrška za specifikaciju IEEE 802.1ad (VLAN stacking ili QinQ), koja definira sredstva za umetanje više VLAN oznaka u jedan Ethernet okvir. Na primjer, za provjeru tipa vanjskog Ethernet okvira 8021ad i vlan id=342 može se koristiti konstrukcija … ether type 802.1ad vlan id 342 za provjeru eksternog tipa Ethernet okvira 8021ad/vlan id=1, ugniježdenog 802.1q/vlan id=2 i daljnje inkapsulacije IP paketa: … ether type 802.1ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
- Dodana podrška za upravljanje resursima putem ujedinjene hijerarhije cgroups v2. Ključna odstupanja cgroups v2 od v1 je korištenje zajedničke hijerarhije cgroups za sve vrste resursa, umjesto odvojenih hijerarhija za raspodjelu CPU resursa, regulaciju potrošnje memorije i ulaz/izlaz. Na primjer, za provjeru odgovara li roditelj socket-a na prvom nivou cgroupv2 masci „system.slice“ može se koristiti konstrukcija: … socket cgroupv2 level 1 „system.slice“
- Dodana opcija za provjeru sastavnih dijelova SCTP paketa (neophodna funkcionalnost bit će dostupna u kernelu Linux 5.14). Na primjer, za provjeru postojanja ‘data’ tipa u chunk-u paketa i polju ‘type’: … sctp chunk data exists … sctp chunk data type 0
- Izvršavanje operacije učitavanja pravila ubrzano je gotovo dvostruko putem opcije „-f“. Također je ubrzano izdavanje popisa pravila.
- Pružena je kompaktna forma za provjeru postavljanja bitova u zastavicama. Na primjer, za provjeru da bitovi stanja snat i dnat nisu postavljeni, može se navesti: … ct status ! snat,dnat za provjeru da je bit syn postavljen u bitnoj maski syn,ack: … tcp flags syn / syn,ack za provjeru da bitovi fin i rst nisu postavljeni u bitnoj maski syn,ack,fin,rst: … tcp flags != fin,rst / syn,ack,fin,rst
- Dozvoljeno je korištenje ključne riječi „verdict“ u definicijama typeof za set/map: add map x m { typeof iifname . ip protocol . th dport : verdict; }
Izvor: opennet.ru
