Vydání paketového filtru nftables 0.9.9

Bylo zveřejněno vydání paketového filtru nftables 0.9.9, které sjednocuje rozhraní pro filtrování paketů pro IPv4, IPv6, ARP a síťové mosty (zaměřené na nahrazení iptables, ip6table, arptables a ebtables). Ve stejnou dobu bylo zveřejněno vydání doprovodné knihovny libnftnl 1.2.0, která poskytuje nízkoúrovňové API pro interakci se subsystémem nf_tables. Změny požadované pro fungování vydání nftables 0.9.9 jsou zahrnuty v jádře Linuxu 5.13-rc1.

Balíček nftables obsahuje komponenty paketového filtru, které běží v uživatelském prostoru, zatímco práci na úrovni jádra zajišťuje subsystém nf_tables, který je součástí linuxového jádra od vydání 3.13. Úroveň jádra poskytuje 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.

Filtrovací pravidla a obslužné rutiny specifické pro protokol jsou zkompilovány do bajtového kódu v uživatelském prostoru, poté je tento bajtový kó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 logiky pro práci s protokoly do uživatelského prostoru.

Hlavní inovace:

  • Byla implementována schopnost přesunout tokové zpracování na stranu síťového adaptéru, povoleno pomocí příznaku 'offload'. Flowtable je mechanismus pro optimalizaci cesty přesměrování paketů, ve kterém je úplný průchod všech řetězců zpracování pravidel aplikován pouze na první paket a všechny ostatní pakety v toku jsou předávány přímo. tabulka ip global { flowtable f { hook ingress priority filter + 1 devices = { lan3, lan0, wan } flags offload } chain forward { type filter hook forward priority filter; přijmout politiku; ip protocol { tcp, udp } flow add @f } chain post { type nat hook postrouting priority filter; přijmout politiku; oifname "wan" maškaráda } }
  • Přidána podpora pro připojení příznaku vlastníka k tabulce, aby bylo zajištěno výhradní použití tabulky procesem. Když proces skončí, tabulka s ním spojená se automaticky odstraní. Informace o procesu se zobrazí ve výpisu pravidel ve formě komentáře: tabulka ip x { # progname nft flags owner chain y { type filter hook input priority filter; přijmout politiku; čítač paketů 1 bajtů 309 } }
  • Přidána podpora pro specifikaci IEEE 802.1ad (VLAN stacking nebo QinQ), která definuje prostředky pro nahrazení více VLAN tagů do jednoho ethernetového rámce. Například pro kontrolu typu externího ethernetového rámce 8021ad a vlan id=342 můžete použít konstrukci ... ether typ 802.1ad vlan id 342 pro kontrolu externího typu ethernetového rámce 8021ad/vlan id=1, vnořeno 802.1 q/vlan id=2 a dále zapouzdření IP paketů: ... ether typ 8021ad vlan id 1 vlan typ 8021q vlan id 2 vlan typ ip counter
  • Přidána podpora pro správu zdrojů pomocí sjednocené 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ů, namísto samostatných hierarchií pro alokaci CPU zdrojů, pro regulaci spotřeby paměti a pro I/O. Chcete-li například zkontrolovat, zda předek soketu na první úrovni cgroupv2 odpovídá masce „system.slice“, můžete použít konstrukci: ... socket cgroupv2 úrovně 1 „system.slice“
  • Přidána možnost kontrolovat součásti paketů SCTP (funkce k tomu potřebná se objeví v jádře Linuxu 5.14). Chcete-li například zkontrolovat, zda paket obsahuje blok s typem 'data' a polem 'type': ... sctp chunk data existují ... sctp chunk data type 0
  • Provedení operace načítání pravidla bylo přibližně dvakrát zrychleno pomocí příznaku „-f“. Zrychlen byl i výstup seznamu pravidel.
  • K dispozici je kompaktní formulář pro kontrolu, zda jsou nastaveny příznakové bity. Chcete-li například zkontrolovat, zda nejsou nastaveny stavové bity snat a dnat, můžete zadat: ... ct status ! snat,dnat pro kontrolu, zda je bit syn nastaven v bitové masce syn,ack: ... příznaky tcp syn / syn,ack pro kontrolu, že bity fin a rst nejsou nastaveny v bitové masce syn,ack,fin,rst: ... příznaky tcp ! = fin,rst / syn,ack,fin,rst
  • Povolte klíčové slovo "verdikt" v definicích set/map typeof: add map xm { typeof iifname . ip protokol th dport : verdikt ;}

Zdroj: opennet.ru

Přidat komentář