Nivo kernela pruža samo generički interfejs nezavisan od protokola koji obezbeđuje osnovne funkcije za izdvajanje podataka iz paketa, izvođenje operacija sa podacima i kontrolu toka. Pravila filtriranja i obrađivači specifični za protokol se kompajliraju u bajtkod u korisničkom prostoru, nakon čega se ovaj bajt kod učitava u kernel pomoću Netlink interfejsa i izvršava u kernelu u posebnoj virtuelnoj mašini koja podseća na BPF (Berkeley Packet Filters). Ovaj pristup vam omogućava da značajno smanjite veličinu koda za filtriranje koji radi na nivou kernela i premestite sve funkcije raščlanjivanja pravila i logike za rad sa protokolima u korisnički prostor.
Glavne inovacije:
- Podrška za opsege u vezama (konkatenacija, određeni paketi adresa i portova koji pojednostavljuju poređenje). Na primjer, za skup "bijela lista" čiji su elementi privitak, navođenje oznake "interval" će ukazati da skup može uključivati raspone u prilogu (za prilog "ipv4_addr . ipv4_addr . inet_service" ranije je bilo moguće navesti tačne podudaranja oblika "192.168.10.35. 192.68.11.123", a sada možete odrediti grupe adresa "80-192.168.10.35-192.168.10.40"):
tablica ip foo {
postavi bijelu listu {
upišite ipv4_addr. ipv4_addr. inet_service
flags interval
elementi = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
}lanac {
tip filter kuka za preusmjeravanje prioritetnog filtera; pad politike;
ip saddr. ip daddr. tcp dport @whitelist prihvata
}
} - U skupovima i listama mapa, moguće je koristiti “typeof” direktivu, koja određuje format elementa prilikom uparivanja.
Na primjer:tablica ip foo {
postavi bijelu listu {
typeof ip saddr
elementi = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}lanac {
tip filter kuka za preusmjeravanje prioritetnog filtera; pad politike;
ip daddr @whitelist accept
}
}tablica ip foo {
map addr2mark {
typeof ip saddr : meta oznaka
elementi = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - Dodana je mogućnost korištenja spojeva u NAT vezama, što vam omogućava da navedete adresu i port kada definirate NAT transformacije na osnovu lista mapa ili imenovanih skupova:
nft add rule ip nat pre dnat ip addr . port na ip saddr mapu { 1.1.1.1 : 2.2.2.2 . trideset }
nft add map ip nat odredišta { type ipv4_addr . inet_service: ipv4_addr. inet_service \\; }
nft add rule ip nat pre dnat ip addr . port na ip saddr. tcp dport mapa @destinations - Podrška za hardversko ubrzanje uz neke operacije filtriranja koje obavlja mrežna kartica. Ubrzanje je omogućeno preko ethtool uslužnog programa (“ethtool -K eth0 hw-tc-offload on”), nakon čega se aktivira u nftables za glavni lanac koristeći “offload” zastavicu. Kada se koristi Linux kernel 5.6, podržano je hardversko ubrzanje za podudaranje polja zaglavlja i inspekciju dolaznog interfejsa u kombinaciji sa primanjem, odbacivanjem, dupliciranjem (dup) i prosleđivanjem (fwd) paketa. U primjeru ispod, operacije ispuštanja paketa koji dolaze sa adrese 192.168.30.20 se izvode na nivou mrežne kartice, bez prosljeđivanja paketa kernelu:
# cat file.nft
tablica netdev x {
lanac y {
tip filter kuka ulazni uređaj eth0 prioritet 10; flags offload;
ip saddr 192.168.30.20 drop
}
}
# nft -f file.nft - Poboljšane informacije o lokaciji greške u pravilima.
# nft brisanje pravila ip yz ručka 7
Greška: Nije moguće obraditi pravilo: Nema takve datoteke ili direktorija
brisanje pravila ip yz ručke 7
^# nft brisanje pravila ip xx ručka 7
Greška: Nije moguće obraditi pravilo: Nema takve datoteke ili direktorija
brisanje pravila ip xx ručke 7
^# nft brisanje tabele twst
Greška: nema takve datoteke ili direktorija; da li ste mislili stolni ‘test' u porodičnom IP-u?
obriši tabelu twst
^^^^Prvi primjer pokazuje da tabela “y” nije u sistemu, drugi da nedostaje rukovalac “7”, a treći da se pri kucanju imena tabele prikazuje prompt za grešku.
- Dodata podrška za provjeru slave sučelja navođenjem “meta sdif” ili “meta sdifname”:
... meta sdifname vrf1 ...
- Dodata podrška za desnu ili lijevu pomak. Na primjer, da pomaknete postojeću oznaku paketa ulijevo za 1 bit i postavite manji bit na 1:
… meta oznaka postavljena meta oznaka lshift 1 ili 0x1 …
- Implementirana opcija "-V" za prikaz proširenih informacija o verziji.
# nft -V
nftables v0.9.4 (Jive at Five)
cli:readline
json: da
minigmp: ne
libxtables: da - Opcije komandne linije sada moraju biti specificirane prije naredbi. Na primjer, trebate navesti “nft -a list ruleset”, a pokretanje “nft list ruleset -a” će rezultirati greškom.
izvor: opennet.ru