vydanie paketového filtra , ktorý sa vyvíja ako náhrada za iptables, ip6table, arptables a ebtables, pričom zjednodušuje rozhrania na filtrovanie paketov pre IPv4, IPv6, ARP a sieťové mosty. Balík nftables obsahuje komponenty filtrovania paketov fungujúce v užívateľskom priestore, zatiaľ čo na úrovni jadra túto prácu zabezpečuje subsystém nf_tables, ktorý je súčasťou jadra Linux od verzie 3.13. Potrebné zmeny pre vydanie nftables 0.9.4 sú zahrnuté v budúcej vetve jadra. .
Na úrovni jadra sa poskytuje iba všeobecné rozhranie, nezávislé od konkrétneho protokolu, ktoré ponúka základné funkcie extrakcie údajov z paketov, vykonávania operácií s údajmi a správy toku. Pravidlá filtrácie a špecifické pre protokoly spracovateľské moduly sa priamo kompilujú do bajtkódu v užívateľskom priestore, ktorý sa potom načítava do jadra cez rozhranie Netlink a vykonáva v jadre v špeciálnej virtuálnej máquina pripomínajúcej BPF (Berkeley Packet Filters). Tento prístup umožňuje výrazne znížiť veľkosť kódu filtrácie bežiaceho na úrovni jadra a preniesť všetky funkcie analýzy pravidiel a logiky práce s protokolmi do užívateľského priestoru.
Hlavné novinky:
- Podpora rozsahov v pripojeniach (concatenation, špecifické kombinácie adries a portov, ktoré uľahčujú porovnávanie). Napríklad pre súbor „whitelist“, ktorého prvky sú pripojením, označenie príznaku „interval“ naznačuje, že súbor môže zahŕňať rozsahy v pripojení (pre pripojenie „ipv4_addr . ipv4_addr . inet_service“ bolo predtým možné uviesť presné zhodnosti vo forme „192.168.10.35 . 192.68.11.123 . 80“, ale teraz možno uviesť skupiny adries „192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80“):
table ip foo {
nastaviť bielu listinu {
type ipv4_addr . ipv4_addr . inet_service
flags interval
elements = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80 }
}chain bar {
typ filter háčik predspracovanie priorita filter; politika zamietnuť;
ip saddr . ip daddr . tcp dport @whitelist accept
}
} - V súboroch a mapách je zabezpečená možnosť použitia direktívy „typeof“, ktorá určuje formát prvku pri porovnávaní.
Napríklad:table ip foo {
nastaviť bielu listinu {
typeof ip saddr
elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
}chain bar {
typ filter háčik predspracovanie priorita filter; politika zamietnuť;
ip daddr @whitelist accept
}
}table ip foo {
map addr2mark {
typeof ip saddr : meta mark
elements = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
}
} - Pridaná možnosť používania pripojení v NAT-pripojeniach, čo umožňuje uviesť adresu a port pri definovaní NAT-transformácií na základe máp alebo pomenovaných súborov:
nft add rule ip nat pre dnat ip addr . port to ip saddr map { 1.1.1.1 : 2.2.2.2 . 30 }
nft add map ip nat destinations { type ipv4_addr . inet_service : ipv4_addr . inet_service \; }
nft add rule ip nat pre dnat ip addr . port to ip saddr . tcp dport map @destinations - Podpora hardvérového urýchlenia s presunom niektorých operácií filtrovania na plecia sieťovej karty. Urýchlenie sa aktivuje prostredníctvom nastroja ethtool („ethtool -K eth0 hw-tc-offload on“), a potom sa aktivuje v nftables pre hlavnú reťazec pomocou príznaku „offload“. Pri použití jadra Linux 5.6 sa podporuje hardvérové urýchlenie pre porovnávanie polí hlavičky a kontrolu prichádzajúceho rozhrania v kombinácii s príjmom, odmietnutím, duplikovaním (dup) a presmerovaním (fwd) paketov. V nižšie uvedenom príklade sa operácie odmietania paketov prichádzajúcich z adresy 192.168.30.20 vykonávajú na úrovni sieťovej karty, bez posielania paketov do jadra:
# cat file.nft
table netdev x {
chain y {
typ filtrácie hák ingresa zariadenia eth0 priorita 10; vlajky offload;
ip saddr 192.168.30.20 drop
}
}
# nft -f file.nft - Zlepšené informovanie o mieste chyby v pravidlách.
# nft delete rule ip y z handle 7
Chyba: Nepodarilo sa spracovať pravidlo: Neexistuje taký súbor alebo adresár
vymazať pravidlo ip y z handle 7
^# nft delete rule ip x x handle 7
Chyba: Nepodarilo sa spracovať pravidlo: Neexistuje taký súbor alebo adresár
vymazať pravidlo ip x x handle 7
^# nft delete table twst
Chyba: Neexistuje taký súbor alebo adresár; chceli ste povedať tabuľku ‘test’ v rodine ip?
vymazať tabuľku twst
^^^^V prvom príklade je ukázané, že tabuľa „y“ chýba v systéme, v druhom, že chýba spracovateľ „7“, a v treťom, že sa zobrazí nápoveda k preklepu pri zadávaní názvu tabuľky.
- Pridaná podpora na kontrolu slave-interface pomocou určenia „meta sdif“ alebo „meta sdifname“:
… meta sdifname vrf1 …
- Pridaná podpora operácie posúvania vpravo alebo vľavo. Napríklad na posunutie existujúcej značky paketu vľavo o 1 bit a nastavenie nižšieho bitu na 1:
… meta mark set meta mark lshift 1 or 0x1 …
- Implementovaná možnosť „-V“ na zobrazenie rozšírených informácií o verzii.
# nft -V
nftables v0.9.4 (Jive at Five)
cli: readline
json: áno
minigmp: nie
libxtables: áno - Možnosti príkazového riadku musia byť teraz nevyhnutne uvedené pred príkazmi. Napríklad, musíte uviesť „nft -a list ruleset“, zatiaľ čo spustenie „nft list ruleset -a“ spôsobí zobrazenie chyby.
Zdroj: opennet.ru
