Izdan je paketni filter nftables 0.9.9. Objedinjuje sučelja za filtriranje paketa za IPv4, IPv6, ARP i mrežne mostove (namijenjene kao zamjena za iptables, ip6table, arptables i ebtables). Istovremeno je objavljena i prateća biblioteka libnftnl 1.2.0, koja pruža API niske razine za interakciju s podsustavom nf_tables. Promjene potrebne za nftables 0.9.9 uključene su u kernel. Linux 5.13-rc1.
Paket nftables sadrži komponente filtera paketa koje rade u korisničkom prostoru, dok rad na razini kernela osigurava podsustav nf_tables, koji je dio kernela. Linux Od verzije 3.13, na razini kernela dostupno je samo generičko sučelje neovisno o protokolu, koje pruža osnovnu funkcionalnost za izdvajanje podataka iz paketa, izvođenje operacija s podacima i kontrolu protoka.
Sama pravila filtriranja i protokolski specifični rukovatelji se kompiliraju u bajtkod u korisničkom prostoru, nakon čega se taj bajtkod učitava u kernel pomoću Netlink sučelja i izvršava u kernelu u posebnom virtualni stroj, što podsjeća na BPF (Berkeley Packet Filters). Ovaj pristup omogućuje značajno smanjenje veličine koda za filtriranje koji se izvršava na razini jezgre i premješta svu parsiranje pravila i logiku protokola u korisnički prostor.
Glavne inovacije:
- Implementirana je mogućnost premještanja obrade tablice toka na stranu mrežnog adaptera, omogućena pomoću oznake 'offload'. Flowtable je mehanizam za optimizaciju putanje preusmjeravanja paketa, u kojem se potpuni prolaz svih lanaca obrade pravila primjenjuje samo na prvi paket, a svi ostali paketi u toku se prosljeđuju 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; politika prihvatiti; ip protokol { tcp, udp } tok add @f } lančani post { tip nat hook postrouting prioritetni filtar; politika prihvatiti; oifname "wan" maskenbal } }
- Dodana je podrška za pričvršćivanje oznake vlasnika na tablicu kako bi se osiguralo isključivo korištenje tablice od strane procesa. Kada se proces prekine, tablica povezana s njim automatski se briše. Informacije o procesu prikazane su u dumpu pravila u obliku komentara: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; politika prihvatiti; brojač paketa 1 bajt 309 } }
- Dodana je podrška za specifikaciju IEEE 802.1ad (VLAN stacking ili QinQ), koja definira način zamjene više VLAN oznaka u jedan Ethernet okvir. Na primjer, za provjeru tipa vanjskog Ethernet okvira 8021ad i vlan id=342, možete upotrijebiti konstrukciju ... ether type 802.1ad vlan id 342 za provjeru vanjskog tipa Ethernet okvira 8021ad/vlan id=1, ugniježđeni 802.1 q/vlan id=2 i dalje enkapsulacija IP paketa: ... ether tip 8021ad vlan id 1 vlan tip 8021q vlan id 2 vlan tip ip brojač
- Dodana podrška za upravljanje resursima korištenjem objedinjene hijerarhije cgroups v2. Ključna razlika između cgroups v2 i v1 je korištenje zajedničke hijerarhije cgroups za sve vrste resursa, umjesto odvojenih hijerarhija za dodjelu CPU resursa, za regulaciju potrošnje memorije i za I/O. Na primjer, da biste provjerili odgovara li predak utičnice na prvoj razini cgroupv2 maski “system.slice”, možete koristiti konstrukciju: ... socket cgroupv2 razina 1 “system.slice”
- Добавлена возможность проверки составных частей пакетов SCTP (необходимая для работы функциональность появится в ядре Linux 5.14). Например, для проверки наличия в пакете chunk-а с типом ‘data’ и полем ‘type’: … sctp chunk data exists … sctp chunk data type 0
- Izvršenje operacije učitavanja pravila ubrzano je otprilike dva puta korištenjem oznake “-f”. Izlaz popisa pravila također je ubrzan.
- Dostavljen je kompaktni obrazac za provjeru jesu li bitovi zastavice postavljeni. Na primjer, da provjerite da bitovi statusa snat i dnat nisu postavljeni, možete navesti: ... ct status ! snat,dnat za provjeru je li sin bit postavljen u bitmasku syn,ack: ... tcp zastavice syn / syn,ack za provjeru da fin i prvi bitovi nisu postavljeni u bitmasku syn,ack,fin,rst: ... tcp zastavice ! = fin,rst / syn,ack,fin,rst
- Dopusti ključnu riječ "presuda" u definicijama tipa set/mapa: add map xm { typeof iifname. ip protokol th dport : presuda ;}
Izvor: opennet.ru
