Byl vydán balíkový filtr nftables 1.1.6, který sjednocuje rozhraní filtrování paketů pro IPv4, IPv6, ARP a síťové mosty (má nahradit iptables, ip6tables, arptables a ebtables). Současně byl vydán doprovodný knihovna libnftnl 1.3.1, která poskytuje nízkoúrovňové API pro interakci se subsystémem nf_tables.
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í změny:
- Byla zajištěna plná podpora šablon lehkých 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; tunnel name ip saddr map { 10.141.10.12 : «t1», 10.141.10.13 : «t2» } fwd to erspan1 } } Před načtením pravidel je třeba vytvořit síťové rozhraní erspan1: ip link add dev erspan1 type erspan external
- Byla přidána podpora masek v názvech síťových rozhraní v zpracovatelích netdev, například pro přidání základního řetězce do filtru příchozího provozu pro všechny zařízení vlan lze uvést: table netdev t { chain c { type filter hook ingress devices = { «vlan*», «veth0» } priority filter; policy accept; } }
- Na systémech s jádrem Linux 6.18+ byla implementována podpora přenosu L2 rámců do rozhraní síťových mostů pro místní zpracování, například pro směrování všech Ethernetových rámců pro MAC adresu de:ad:00:00:be:ef lze uvést: 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 } }
- Byla přidána nová infrastruktura pro fuzzingové testování s využitím nástroje afl++ (American Fuzzy Lop++), aktivovaná během sestavení pomocí „./configure --with-fuzzer“.
Zdroj: opennet.ru
