Kernel szinten csak egy általános, protokollfüggetlen interfész biztosított, amely alapvető funkciókat biztosít az adatok csomagokból történő kinyeréséhez, az adatokkal kapcsolatos műveletek végrehajtásához és az áramlás szabályozásához. Magukat a szűrési szabályokat és a protokoll-specifikus kezelőket felhasználói térbeli bájtkódba fordítják, majd ezt a bájtkódot a Netlink interfész segítségével betöltik a kernelbe, és egy speciális, BPF-hez (Berkeley Packet Filters) hasonlító virtuális gépben hajtják végre a kernelben. Ez a megközelítés lehetővé teszi a kernel szinten futó szűrőkód méretének jelentős csökkentését, valamint az elemzési szabályok összes funkciójának és a protokollokkal való munka logikájának a felhasználói térbe való áthelyezését.
Főbb újítások:
- Tartományok támogatása az összekapcsolásokban (összefűzés, bizonyos cím- és port-összerendelések, amelyek egyszerűsítik az illesztést). Például egy "whitelist" halmaznál, amelynek elemei egy melléklet, az "intervallum" jelző megadása azt jelzi, hogy a készlet tartalmazhat tartományokat a mellékletben (az "ipv4_addr . ipv4_addr . inet_service" mellékletnél korábban lehetséges volt a pontos listázás egyezik, mint "192.168.10.35. 192.68.11.123", és most megadhat címcsoportokat "80-192.168.10.35-192.168.10.40"):192.68.11.123.
table ip foo {
engedélyezőlista beállítása {
írja be az ipv4_addr parancsot. ipv4_addr. inet_service
zászlók intervallum
elemek = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80}
}láncrúd {
típusú szűrő horog prerouting priority szűrő; politika csökkenése;
ip saddr . ip apa . tcp dport@whitelist elfogadja
}
} - A halmazokban és a map-listekben lehetőség van a "typeof" direktíva használatára, amely meghatározza az elem formátumát a leképezéskor.
Például:table ip foo {
engedélyezőlista beállítása {
ip típusa saddr
elemek = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}láncrúd {
típusú szűrő horog prerouting priority szűrő; politika csökkenése;
ip daddr @whitelist elfogadom
}
}table ip foo {
térkép addr2mark {
ip típusa saddr: meta jel
elemek = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - Hozzáadtuk a csatolmányok NAT-összerendelésekben való használatának lehetőségét, amely lehetővé teszi cím és port megadását a NAT-fordítások térképlisták vagy elnevezett készletek alapján történő meghatározásakor:
nft add szabály ip nat pre dnat ip addr . port az ip-re saddr map { 1.1.1.1 : 2.2.2.2 . harminc }
nft térkép hozzáadása ip nat célállomások { type ipv4_addr . inet_service: ipv4_addr. inet_service\\; }
nft add szabály ip nat pre dnat ip addr . port az ip-re saddr . tcp dport térkép @destinations - Hardveres gyorsítás támogatása néhány szűrési művelet eltávolításával a hálózati kártya vállán. A gyorsítás az ethtool segédprogramon keresztül engedélyezett ("ethtool -K eth0 hw-tc-offload on"), majd a főlánc nftables-jában az "offload" jelzővel aktiválódik. A Linux 5.6-os kernel használatakor a hardveres gyorsítás támogatott a fejlécmezők egyeztetéséhez és a bejövő interfész ellenőrzéséhez, a csomagok fogadásával, eldobásával, másolásával (dup) és továbbításával (fwd) kombinálva. Az alábbi példában a 192.168.30.20 címről érkező csomagok eldobásának műveletei a hálózati kártya szintjén kerülnek végrehajtásra, anélkül, hogy a csomagokat átadnák a kernelnek:
# macska fájl.nft
táblázat netdev x {
lánc y {
típus szűrő horog bemeneti eszköz eth0 prioritás 10; zászlók tehermentesítése;
ip saddr 192.168.30.20 drop
}
}
# nft -f fájl.nft - Továbbfejlesztett információ a hibák helyéről a szabályokban.
# nft törlési szabály ip yz fogantyú 7
Hiba: Nem sikerült feldolgozni a szabályt: Nincs ilyen fájl vagy könyvtár
szabály törlése ip yz fogantyú 7
^# nft törlés szabály ip xx 7
Hiba: Nem sikerült feldolgozni a szabályt: Nincs ilyen fájl vagy könyvtár
szabály törlése ip xx fogantyú 7
^# nft tábla törlése twst
Hiba: Nincs ilyen fájl vagy könyvtár; a családi ip-ben a táblázat "teszt"-re gondoltál?
táblázatcsavar törlése
^^^^Az első példa azt mutatja, hogy az 'y' tábla nincs jelen a rendszerben, a második azt mutatja, hogy hiányzik a '7' kezelő, a harmadik pedig egy elírási tippet mutat a tábla nevének begépelésekor.
- Hozzáadott támogatás a slave interfész ellenőrzéséhez a "meta sdif" vagy a "meta sdifname" megadásával:
... meta sdifname vrf1 ...
- Hozzáadott támogatás a jobb vagy bal műszakhoz. Például egy meglévő csomagcímke 1 bittel balra tolásához, és a mellékbit 1-re állításához:
… meta jel set meta mark lshift 1 vagy 0x1 …
- Megvalósított "-V" opció a kiterjesztett verzióinformációk megjelenítéséhez.
#nft -V
nftables v0.9.4 (Jive at Five)
cli:readline
json: igen
minigmp: nem
libxtables: igen - A parancssori opciókat most meg kell követelni a parancsok előtt. Például meg kell adnia az "nft -a list ruleset" paramétert, és az "nft list rulet -a" futtatása hibát eredményez.
Forrás: opennet.ru