Na úrovni jádra je k dispozici pouze generické rozhraní nezávislé na protokolu, které poskytuje základní funkce pro extrakci dat z paketů, provádění operací s daty a řízení toku. Samotná pravidla filtrování a obslužné rutiny specifické pro protokol jsou zkompilovány do bajtkódu uživatelského prostoru, načež je tento bajtkód načten do jádra pomocí rozhraní Netlink a spuštěn v jádře ve speciálním virtuálním stroji připomínajícím BPF (Berkeley Packet Filters). Tento přístup umožňuje výrazně zmenšit velikost filtrovacího kódu běžícího na úrovni jádra a přesunout všechny funkce parsovacích pravidel a logiku práce s protokoly do uživatelského prostoru.
Hlavní inovace:
- Podpora rozsahů ve spojeních (zřetězení, určité vazby adres a portů, které zjednodušují párování). Například pro sadu „whitelist“, jejíž prvky jsou přílohou, uvedení příznaku „interval“ bude znamenat, že sada může obsahovat rozsahy v příloze (pro přílohu „ipv4_addr . ipv4_addr . inet_service“ bylo dříve možné uvést přesné shoduje se jako „192.168.10.35. 192.68.11.123“ a nyní můžete zadat skupiny adres „80-192.168.10.35“): 192.168.10.40.
tabulka ip foo {
nastavit seznam povolených {
zadejte ipv4_addr. ipv4_addr. inet_service
interval příznaků
prvky = { 192.168.10.35-192.168.10.40. 192.68.11.123-192.168.11.125. 80}
}řetězová lišta {
typ filter hook prerouting priority filter; pokles politiky;
ip saddr. ip tatínek. tcp dport@whitelist přijmout
}
} - V sadách a map-listech je možné použít direktivu „typeof“, která určuje formát prvku při mapování.
Například:tabulka ip foo {
nastavit seznam povolených {
typ ip saddr
prvky = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}řetězová lišta {
typ filter hook prerouting priority filter; pokles politiky;
ip daddr @whitelist přijmout
}
}tabulka ip foo {
mapa addr2mark {
typ ip saddr: meta značka
prvky = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - Přidána možnost používat přílohy ve vazbách NAT, což vám umožňuje zadat adresu a port při definování překladů NAT na základě seznamů map nebo pojmenovaných sad:
nft přidat pravidlo ip nat pre dnat ip addr . port na ip saddr mapu { 1.1.1.1 : 2.2.2.2 . třicet }
nft add map ip nat destinations { type ipv4_addr . inet_service: ipv4_addr. inet_service\\; }
nft přidat pravidlo ip nat pre dnat ip addr . port na ip saddr. tcp dport map @destinations - Podpora hardwarové akcelerace s odstraněním některých operací filtrování na bedrech síťové karty. Akcelerace je povolena pomocí utility ethtool ("ethtool -K eth0 hw-tc-offload on"), poté je aktivována v nftables pro hlavní řetězec pomocí příznaku "offload". Při použití jádra Linux 5.6 je podporována hardwarová akcelerace pro shodu polí hlavičky a kontrolu příchozího rozhraní v kombinaci s přijímáním, zahazováním, duplikováním (dup) a předáváním (fwd) paketů. V níže uvedeném příkladu se operace zahazování paketů přicházejících z adresy 192.168.30.20 provádějí na úrovni síťové karty, aniž by se pakety předávaly jádru:
# cat file.nft
tabulka netdev x {
řetěz y {
typ háčku filtru vstupní zařízení eth0 priorita 10; vyložení vlajek;
IP saddr 192.168.30.20 pokles
}
}
# nft -f soubor.nft - Vylepšené informace o místě chyby v pravidlech.
# nft odstranit pravidlo ip yz rukojeť 7
Chyba: Pravidlo nelze zpracovat: Žádný takový soubor nebo adresář
odstranit pravidlo ip yz rukojeť 7
^# nft delete rule ip xx handle 7
Chyba: Pravidlo nelze zpracovat: Žádný takový soubor nebo adresář
odstranit pravidlo ip xx rukojeť 7
^# nft odstranit tabulku twst
Chyba: Žádný takový soubor nebo adresář; měli jste na mysli tabulku 'test' v rodinné IP?
odstranit zkroucení tabulky
^^^^První příklad ukazuje, že tabulka 'y' není v systému přítomná, druhý ukazuje, že chybí obslužná rutina '7', a třetí ukazuje nápovědu k překlepu při psaní názvu tabulky.
- Přidána podpora pro kontrolu podřízeného rozhraní zadáním „meta sdif“ nebo „meta sdifname“:
… meta sdifname vrf1…
- Přidána podpora pro řazení vpravo nebo vlevo. Chcete-li například posunout existující návěští paketu doleva o 1 bit a nastavit spodní bit na 1:
… meta značka nastavit meta značku lshift 1 nebo 0x1 …
- Implementována možnost "-V" pro zobrazení rozšířených informací o verzi.
#nft -V
nftables v0.9.4 (Jive at Five)
cli:readline
json: ano
minigmp: ne
libxtables: ano - Volby příkazového řádku musí být nyní zadány před příkazy. Například musíte zadat "nft -a list ruleset" a spuštění "nft list ruleset -a" bude mít za následek chybu.
Zdroj: opennet.ru