Na ravni jedra je na voljo le generični vmesnik, neodvisen od protokola, ki zagotavlja osnovne funkcije za pridobivanje podatkov iz paketov, izvajanje operacij s podatki in nadzor pretoka. Sama pravila filtriranja in obdelovalci, specifični za protokol, so prevedeni v bajtno kodo uporabniškega prostora, nakar se ta bajtna koda naloži v jedro z uporabo vmesnika Netlink in izvede v jedru v posebnem virtualnem stroju, ki spominja na BPF (Berkeley Packet Filters). Ta pristop omogoča znatno zmanjšanje velikosti filtrirne kode, ki se izvaja na ravni jedra, in premikanje vseh funkcij pravil razčlenjevanja in logike dela s protokoli v uporabniški prostor.
Glavne novosti:
- Podpora za obsege v spojih (veriženje, določene vezave naslovov in vrat, ki poenostavljajo ujemanje). Na primer, za nabor "belega seznama", katerega elementi so priloge, bo navedba zastavice "interval" pomenila, da lahko nabor vključuje obsege v prilogi (za prilogo "ipv4_addr. ipv4_addr. inet_service" je bilo prej mogoče navesti točno ujema kot "192.168.10.35. 192.68.11.123", zdaj pa lahko določite skupine naslovov "80-192.168.10.35-192.168.10.40"):
tabela ip foo {
nastavi beli seznam {
vnesite ipv4_addr. ipv4_addr. inet_service
interval zastavic
elementi = {192.168.10.35-192.168.10.40. 192.68.11.123-192.168.11.125 . 80}
}veriga {
vrsta filtra kavelj prednostni filter pred usmerjanjem; padec politike;
ip saddr. ip daddr. tcp dport@bela lista sprejeti
}
} - V nizih in map-seznamih je možna uporaba direktive "typeof", ki določa format elementa pri preslikavi.
Na primer:tabela ip foo {
nastavi beli seznam {
typeof ip saddr
elementi = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}veriga {
vrsta filtra kavelj prednostni filter pred usmerjanjem; padec politike;
ip daddr @bela lista sprejme
}
}tabela ip foo {
map addr2mark {
typeof ip saddr : meta oznaka
elementi = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - Dodana možnost uporabe prilog v vezavah NAT, ki vam omogoča, da določite naslov in vrata pri definiranju prevodov NAT na podlagi seznamov zemljevidov ali poimenovanih nizov:
nft add rule ip nat pre dnat ip addr. vrata do zemljevida ip saddr { 1.1.1.1 : 2.2.2.2 . trideset }
nft dodaj zemljevid ip nat destinacij { type ipv4_addr. inet_service: ipv4_addr. inet_storitev\\; }
nft add rule ip nat pre dnat ip addr. vrata na ip saddr. tcp dport zemljevid @destinacije - Podpora za pospeševanje strojne opreme z odstranitvijo nekaterih operacij filtriranja na ramenih omrežne kartice. Pospešek je omogočen prek pripomočka ethtool ("ethtool -K eth0 hw-tc-offload on"), nato pa se aktivira v nftables za glavno verigo z uporabo zastavice "offload". Pri uporabi jedra Linux 5.6 je strojno pospeševanje podprto za ujemanje polj glave in pregled dohodnega vmesnika v kombinaciji s sprejemanjem, izpuščanjem, podvajanjem (dup) in posredovanjem (fwd) paketov. V spodnjem primeru se operacije za izpuščanje paketov, ki prihajajo z naslova 192.168.30.20, izvajajo na ravni omrežne kartice, brez posredovanja paketov jedru:
# mačja datoteka.nft
tabela netdev x {
veriga y {
vrsta vstopne naprave kavelj filtra eth0 prioriteta 10; razbremenitev zastavic;
ip saddr 192.168.30.20 padec
}
}
# nft -f datoteka.nft - Izboljšana informacija o mestu napake v pravilih.
# nft delete rule ip yz handle 7
Napaka: Ni bilo mogoče obdelati pravila: Ni takšne datoteke ali imenika
izbriši pravilo ip yz ročaj 7
^# nft delete rule ip xx handle 7
Napaka: Ni bilo mogoče obdelati pravila: Ni takšne datoteke ali imenika
izbriši pravilo ip xx ročaj 7
^# nft izbriši tabelo twst
Napaka: Ni takšne datoteke ali imenika; ste mislili tabelo ‘test' v družinskem ip?
izbriši zasuk tabele
^^^^Prvi primer kaže, da tabela 'y' ni prisotna v sistemu, drugi kaže, da manjka upravljalnik '7', tretji pa prikazuje tipkarsko napako pri vnosu imena tabele.
- Dodana podpora za preverjanje podrejenega vmesnika prek podajanja »meta sdif« ali »meta sdifname«:
... meta sdifname vrf1 ...
- Dodana podpora za premikanje v desno ali levo. Na primer, če želite premakniti obstoječo oznako paketa levo za 1 bit in nastaviti spodnji bit na 1:
… meta oznaka nastavljena meta oznaka lshift 1 ali 0x1 …
- Implementirana možnost "-V" za prikaz razširjenih informacij o različici.
#nft -V
nftables v0.9.4 (Jive at Five)
cli:readline
json: da
minigmp: št
libxtables: da - Možnosti ukazne vrstice so zdaj obvezne pred ukazi. Določiti morate na primer "nft -a list ruleset" in zagon "nft list ruleset -a" bo povzročil napako.
Vir: opennet.ru