Razina kernela pruža samo generičko sučelje neovisno o protokolu koje pruža osnovne funkcije za izdvajanje podataka iz paketa, izvođenje podatkovnih operacija i kontrolu toka. Pravila filtriranja i rukovatelji specifični za protokol kompajliraju se u bajt kod u korisničkom prostoru, nakon čega se ovaj bajt kod učitava u kernel pomoću Netlink sučelja i izvršava u kernelu u posebnom virtualnom stroju koji podsjeća na BPF (Berkeley Packet Filters). Ovaj pristup vam omogućuje da značajno smanjite veličinu koda za filtriranje koji se izvodi na razini jezgre i premjestite sve funkcije pravila parsiranja i logike za rad s protokolima u korisnički prostor.
Glavne inovacije:
- Podrška za raspone u vezama (ulančavanje, određeni paketi adresa i portova koji pojednostavljuju usporedbu). Na primjer, za skup "whitelist" čiji su elementi privitak, navođenje zastavice "interval" označit će da skup može uključivati raspone u privitku (za privitak "ipv4_addr . ipv4_addr . inet_service" ranije je bilo moguće navesti točne odgovara obliku "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 popis dopuštenih {
upišite ipv4_addr. ipv4_addr. inet_service
interval zastavica
elementi = {192.168.10.35-192.168.10.40. 192.68.11.123-192.168.11.125. 80}
}lanac {
vrsta filtra hook prerouting priority filter; pad politike;
ip saddr. ip daddr. tcp dport @bijela lista prihvatiti
}
} - U skupovima i popisima mapa moguće je koristiti direktivu “typeof” koja određuje format elementa prilikom podudaranja.
Na primjer:tablica ip foo {
postavi popis dopuštenih {
typeof ip saddr
elementi = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}lanac {
vrsta filtra hook prerouting priority filter; pad politike;
ip daddr @whitelist prihvatiti
}
}tablica ip foo {
karta 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ćuje da navedete adresu i port prilikom definiranja NAT transformacija na temelju popisa mapa ili imenovanih skupova:
nft dodavanje pravila ip nat pre dnat ip adresa. 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 dodavanje pravila ip nat pre dnat ip adresa. priključak na ip saddr. tcp dport karta @odredišta - Podrška za hardversko ubrzanje s nekim operacijama filtriranja koje provodi mrežna kartica. Ubrzanje je omogućeno putem uslužnog programa ethtool (“ethtool -K eth0 hw-tc-offload on”), nakon čega se aktivira u nftables za glavni lanac pomoću oznake “offload”. Kada koristite Linux kernel 5.6, podržano je hardversko ubrzanje za podudaranje polja zaglavlja i inspekciju dolaznog sučelja u kombinaciji s primanjem, odbacivanjem, dupliciranjem (dup) i prosljeđivanjem (fwd) paketa. U donjem primjeru, operacije ispuštanja paketa koji dolaze s adrese 192.168.30.20 izvode se na razini mrežne kartice, bez prosljeđivanja paketa jezgri:
# mačja datoteka.nft
tablica netdev x {
lanac y {
vrsta filtra kuka ingress device eth0 prioritet 10; zastave istovar;
ip saddr 192.168.30.20 pad
}
}
# nft -f datoteka.nft - Poboljšane informacije o mjestu pogreške u pravilima.
# nft pravilo brisanja ip yz ručka 7
Pogreška: Nije moguće obraditi pravilo: Nema takve datoteke ili direktorija
brisanje pravila ip yz ručka 7
^# nft pravilo brisanja ip xx handle 7
Pogreška: Nije moguće obraditi pravilo: Nema takve datoteke ili direktorija
brisanje pravila ip xx rukovanje 7
^# nft brisanje tablice twst
Pogreška: Nema takve datoteke ili direktorija; jeste li mislili tablica ‘test' u obitelji ip?
izbrisati tablicu twst
^^^^Prvi primjer pokazuje da tablica “y” nije u sustavu, drugi da nedostaje rukovatelj “7”, a treći da se prilikom upisivanja naziva tablice prikazuje upit za grešku pri upisu.
- Dodana podrška za provjeru podređenog sučelja navođenjem "meta sdif" ili "meta sdifname":
... meta sdifname vrf1 ...
- Dodana podrška za operacije pomaka udesno ili ulijevo. Na primjer, da pomaknete postojeću oznaku paketa ulijevo za 1 bit i postavite sporedni bit na 1:
… postavljena meta oznaka meta oznaka lshift 1 ili 0x1 …
- Implementirana opcija "-V" za prikaz informacija o proširenoj verziji.
# nft -V
nftables v0.9.4 (Jive at Five)
cli:readline
json: da
minigmp: br
libxtables: da - Opcije naredbenog retka sada moraju biti navedene prije naredbi. Na primjer, trebate navesti "nft -a list ruleset", a pokretanje "nft list ruleset -a" rezultirat će pogreškom.
Izvor: opennet.ru