Bylo zveřejněno vydání paketového filtru nftables 1.1.6, 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.3.1, která poskytuje nízkoúrovňové API pro interakci se subsystémem nf_tables.
Balíček nftables obsahuje komponenty pro filtrování paketů, které fungují v uživatelském prostoru, zatímco práci na úrovni jádra zajišťuje subsystém nf_tables, který je součástí jádra. Linux Od verze 3.13 je na úrovni jádra 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 v uživatelském prostoru zkompilovány do bajtkódu, 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í stroj, připomínající BPF (Berkeley Packet Filters). Tento přístup umožňuje výrazné zmenšení velikosti filtrovacího kódu běžícího na úrovni jádra a přesouvá veškerou analýzu pravidel a logiku protokolu do uživatelského prostoru.
Hlavní změny:
- Plná podpora pro lehké šablony tunelů, jako jsou vxlan, geneve a erspan: table netdev global { tunnel t1 { id 10 ip saddr 192.168.2.10 ip daddr 192.168.2.11 sport 1025 dport 20020 ttl 1 erspan { version 1 index 2 } } tunnel t2 { id 10 ip saddr 192.168.3.10 ip daddr 192.168.3.11 sport 1025 dport 21021 ttl 1 erspan { version 1 index 2 } } chain in { type filter hook ingress device veth0 priority 0; název tunelu ip saddr map { 10.141.10.12 : "t1", 10.141.10.13 : "t2" } fwd to erspan1 } } Před načtením pravidel byste měli vytvořit síťové rozhraní erspan1: ip link add dev erspan1 type erspan external
- Přidána podpora pro masky v názvech síťových rozhraní v obslužných rutinách netdev. Například pro přidání základního řetězce do filtru příchozího provozu pro všechna zařízení VLAN můžete zadat: table netdev t { chain c { type filter hook ingress devices = { "vlan*", "veth0" } priority filter; policy accept; } }
- Na systémech s jádrem Linux Verze 6.18+ podporuje přenos rámců L2 do rozhraní síťového mostu pro lokální zpracování. Například pro směrování všech ethernetových rámců pro MAC adresu de:ad:00:00:be:ef do IP stacku můžete zadat: table bridge global { chain pre { type filter hook prerouting priority 0; policy accept; ether daddr de:ad:00:00:be:ef meta pkttype set host ether daddr set meta ibrhwaddr accept } }
- Přidána nová infrastruktura pro fuzzing testování pomocí sady nástrojů afl++ (americký fuzzy lop++), která je povolena v době sestavení pomocí příkazu "./configure --with-fuzzer".
Zdroj: opennet.ru
