Vydání paketového filtru nftables 0.9.9

Byl publikován výstup paketového filtru nftables 0.9.9, který unifikuje rozhraní pro filtrování paketů pro IPv4, IPv6, ARP a síťové mosty (cílí na nahrazení iptables, ip6tables, arptables a ebtables). Současně byl vydán doprovodný knihovní výstup libnftnl 1.2.0, který poskytuje nízkoúrovňové API pro interakci se subsystemem nf_tables. Nezbytné změny pro fungování nftables 0.9.9 byly zahrnuty do jádra Linux 5.13-rc1.

Balíček nftables obsahuje prvky filtrování paketů pracující v uživatelském prostoru, zatímco na úrovni jádra zajišťuje provoz subsystém nf_tables, který je součástí jádra Linux od verze 3.13. Na úrovni jádra je poskytováno pouze obecné rozhraní, které nezávisí na konkrétním protokolu a poskytuje základní funkce pro extrakci dat z paketů, provádění operací s daty a řízení toku.

Samotná pravidla filtrování a specifické zpracovatele protokolů se kompilují do bytecode v uživatelském prostoru, poté je tento bytecode načten do jádra pomocí rozhraní Netlink a vykonává se v jádře v specializované virtuálním strojipodobě jako BPF (Berkeley Packet Filters). Tento přístup výrazně snižuje velikost kódu filtrování, který funguje na úrovni jádra a přesouvá všechny funkce analýzy pravidel a logiky práce s protokoly do uživatelského prostoru.

Hlavní novinky:

  • Byla zavedena možnost přesunout zpracování flowtable na stranu síťového adaptéru, kterou lze aktivovat pomocí příznaku ‘offload’. Flowtable představuje mechanismus optimalizace trasy přesměrování paketů, při němž se kompletní zpracování všech řetězců pravidel aplikuje pouze na první paket, zatímco všechny ostatní pakety v toku jsou přesměrovány přímo. table ip global { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward priority filter; policy accept; ip protocol { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; policy accept; oifname «wan» masquerade } }
  • Byla přidána podpora pro připojení tabulky s příznakem pro vazbu na vlastníka, který umožňuje zajistit výhradní využití tabulky procesem. Po ukončení procesu je tabulka k němu připojená automaticky odstraněna. Informace o procesu se zobrazují v dumpu pravidel ve formě komentáře: table ip x { # progname nft flags owner chain y { type filter hook input priority filter; policy accept; counter packets 1 bytes 309 } }
  • Byla přidána podpora pro specifikaci IEEE 802.1ad (VLAN stacking nebo QinQ), která určuje prostředky pro vkládání několika tagů VLAN do jednoho rámce Ethernet. Například pro kontrolu typu externího Ethernetového rámce 8021ad a vlan id=342 lze použít konstrukci … ether type 802.1ad vlan id 342 pro kontrolu externího typu Ethernetového rámce 8021ad/vlan id=1, vloženého 802.1q/vlan id=2 a další enkapsulaci IP paketů: … ether type 802.1ad vlan id 1 vlan type 8021q vlan id 2 vlan type ip counter
  • Byla přidána podpora správy zdrojů pomocí unifikované hierarchie cgroups v2. Klíčovým rozdílem mezi cgroups v2 a v1 je použití společné hierarchie cgroups pro všechny typy zdrojů, místo oddělených hierarchií pro rozdělování CPU, regulaci využití paměti a vstup/výstup. Například pro ověření, zda rodič socketu na první úrovni cgroupv2 splňuje masku „system.slice“, lze použít konstrukci: … socket cgroupv2 level 1 „system.slice“
  • Byla přidána možnost kontroly součástí paketů SCTP (nezbytná pro fungování se objeví v jádře Linux 5.14). Například pro kontrolu přítomnosti chunku s typem ‚data‘ a polem ‚type‘: … sctp chunk data exists … sctp chunk data type 0
  • Výkon operace načítání pravidel byl zrychlen přibližně dvakrát pomocí příznaku „-f“. Také došlo k zrychlení výstupu seznamu pravidel.
  • Byla poskytnuta kompaktní forma kontroly nastavování bitů ve flagách. Například pro kontrolu, že bity stavu snat a dnat nejsou nastaveny, lze uvést: … ct status ! snat,dnat pro kontrolu, že bit syn je nastaven v bitové masce syn,ack: … tcp flags syn / syn,ack pro kontrolu, že bity fin a rst nejsou nastaveny v bitové masce syn,ack,fin,rst: … tcp flags != fin,rst / syn,ack,fin,rst
  • Bylo povoleno používání klíčového slova „verdict“ v definicích typeof pro set/map: add map x m { typeof iifname . ip protocol . th dport : verdict;}

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster