Úroveň jadra poskytuje iba všeobecné rozhranie nezávislé od protokolu, ktoré poskytuje základné funkcie na extrahovanie údajov z paketov, vykonávanie operácií s údajmi a riadenie toku. Filtrovacie pravidlá a obslužné programy špecifické pre protokol sa skompilujú do bajtového kódu v užívateľskom priestore, potom sa tento bajtový kód nahrá do jadra pomocou rozhrania Netlink a spustí sa v jadre v špeciálnom virtuálnom stroji, ktorý pripomína BPF (Berkeley Packet Filters). Tento prístup umožňuje výrazne znížiť veľkosť filtrovacieho kódu spusteného na úrovni jadra a presunúť všetky funkcie pravidiel parsovania a logiky pre prácu s protokolmi do užívateľského priestoru.
Hlavné inovácie:
- Podpora rozsahov pripojení (reťazenie, určité zväzky adries a portov, ktoré zjednodušujú porovnávanie). Napríklad pre množinu „bielej listiny“, ktorej prvky sú prílohou, zadanie príznaku „interval“ bude indikovať, že množina môže obsahovať rozsahy v prílohe (pre prílohu „ipv4_addr . ipv4_addr . inet_service“ bolo predtým možné uviesť presné zhody vo formáte "192.168.10.35. 192.68.11.123" a teraz môžete špecifikovať skupiny adries "80-192.168.10.35-192.168.10.40"):192.68.11.123.
tabuľka ip foo {
nastaviť bielu listinu {
zadajte ipv4_addr. ipv4_addr. inet_service
interval vlajok
prvky = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125. 80}
}reťazová lišta {
typ filter hook prerouting priority filter; pokles politiky;
ip saddr. ip ocko. tcp dport @whitelist prijať
}
} - V množinách a zoznamoch máp je možné použiť direktívu „typeof“, ktorá určuje formát prvku pri párovaní.
napríklad:tabuľka ip foo {
nastaviť bielu listinu {
typ ip saddr
prvky = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}reťazová lišta {
typ filter hook prerouting priority filter; pokles politiky;
ip daddr @whitelist prijať
}
}tabuľka ip foo {
mapa addr2mark {
typ ip saddr: meta značka
prvky = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - Pridaná možnosť používať spojenia vo väzbách NAT, čo vám umožňuje zadať adresu a port pri definovaní transformácií NAT na základe zoznamov máp alebo pomenovaných množín:
nft pridať pravidlo ip nat pre dnat ip addr . port na ip saddr mapu { 1.1.1.1 : 2.2.2.2 . tridsať }
nft pridať mapu ip nat destinácie { typ ipv4_addr . inet_service: ipv4_addr. inet_service \\; }
nft pridať pravidlo ip nat pre dnat ip addr . port na ip saddr. tcp dport mapa @destinácie - Podpora hardvérovej akcelerácie s niektorými operáciami filtrovania vykonávanými sieťovou kartou. Zrýchlenie je povolené pomocou nástroja ethtool („ethtool -K eth0 hw-tc-offload on“), po ktorom sa aktivuje v nftables pre hlavný reťazec pomocou príznaku „offload“. Pri použití linuxového jadra 5.6 je podporovaná hardvérová akcelerácia na porovnávanie poľa hlavičky a kontrolu prichádzajúceho rozhrania v kombinácii s prijímaním, vyhadzovaním, duplikovaním (dup) a preposielaním (fwd) paketov. V nižšie uvedenom príklade sa operácie zahadzovania paketov prichádzajúcich z adresy 192.168.30.20 vykonávajú na úrovni sieťovej karty bez toho, aby sa pakety odovzdávali do jadra:
# cat file.nft
tabuľka netdev x {
reťaz y {
typ háku filtra vstupné zariadenie eth0 priorita 10; vyloženie vlajok;
IP saddr 192.168.30.20 pokles
}
}
# nft -f súbor.nft - Vylepšené informácie o umiestnení chyby v pravidlách.
# nft odstrániť pravidlo ip yz rukoväť 7
Chyba: Nepodarilo sa spracovať pravidlo: Žiadny takýto súbor alebo adresár
odstrániť pravidlo ip yz rukoväť 7
^# nft odstrániť pravidlo ip xx rukoväť 7
Chyba: Nepodarilo sa spracovať pravidlo: Žiadny takýto súbor alebo adresár
odstrániť rukoväť ip xx pravidla 7
^# nft odstrániť tabuľku twst
Chyba: Žiadny takýto súbor alebo adresár; mali ste na mysli slovo „test“ v rodine IP?
zmazať tabuľku twst
^^^^Prvý príklad ukazuje, že tabuľka „y“ nie je v systéme, druhý, že chýba obslužný program „7“ a tretí, že pri zadávaní názvu tabuľky sa zobrazí výzva na preklep.
- Pridaná podpora pre kontrolu podriadeného rozhrania zadaním „meta sdif“ alebo „meta sdifname“:
... meta sdifname vrf1 ...
- Pridaná podpora pre operácie posunu vpravo alebo vľavo. Ak chcete napríklad posunúť existujúce návestie paketu doľava o 1 bit a nastaviť vedľajší bit na 1:
… meta značka nastaviť meta značku lshift 1 alebo 0x1 …
- Implementovaná možnosť „-V“ na zobrazenie informácií o rozšírenej verzii.
# nft -V
nftables v0.9.4 (Jive at Five)
cli:readline
json: áno
minigmp: nie
libxtables: áno - Voľby príkazového riadka musia byť teraz špecifikované pred príkazmi. Napríklad musíte zadať „nft -a list ruleset“ a spustenie „nft list ruleset -a“ bude mať za následok chybu.
Zdroj: opennet.ru