Verze balíkového filtru nftables 1.0.6

Byl vydán balíček filtru nftables 1.0.6, který sjednocuje rozhraní pro filtraci paketů pro IPv4, IPv6, ARP a síťové mosty (zaměřený na nahrazení iptables, ip6tables, arptables a ebtables). Součástí balíčku nftables jsou komponenty filtru paketů běžící v uživatelském prostoru, zatímco na úrovni jádra zajišťuje fungování subsystem nf_tables, který je součástí jádra Linuxu 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:

  • V optimalizátoru pravidel, který se spouští při zadání možnosti „-o/—optimize“, je nastavena automatická komprese pravidel jejich sloučením a převedením na map- a set-seznamy. Například pravidla # cat ruleset.nft table ip x { chain y { type filter hook input priority filter; policy drop; meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept } } po provedení „nft -o -c -f ruleset.nft“ budou převedena následujícím způsobem: ruleset.nft:4:17-74: meta iifname eth1 ip saddr 1.1.1.1 ip daddr 2.2.2.3 accept ruleset.nft:5:17-74: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.2.4 accept ruleset.nft:6:17-77: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.3.0/24 accept ruleset.nft:7:17-83: meta iifname eth1 ip saddr 1.1.1.2 ip daddr 2.2.4.0-2.2.4.10 accept ruleset.nft:8:17-74: meta iifname eth2 ip saddr 1.1.1.3 ip daddr 2.2.2.5 accept do: iifname . ip saddr . ip daddr { eth1 . 1.1.1.1 . 2.2.2.3, eth1 . 1.1.1.2 . 2.2.2.4, eth1 . 1.1.1.2 . 2.2.3.0/24, eth1 . 1.1.1.2 . 2.2.4.0-2.2.4.10, eth2 . 1.1.1.3 . 2.2.2.5 } accept
  • Optimalizátor může také převádět pravidla, ve kterých se již používají jednoduché set-seznamy, do kompaktnější formy, například pravidla: # cat ruleset.nft table ip filter { chain input { type filter hook input priority filter; policy drop; iifname "lo" accept ct state established,related accept comment "V provozu, kterému dáváme důvěru" iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept } } po provedení "nft -o -c -f ruleset.nft" budou zabalena následovně: ruleset.nft:6:22-149: iifname "enp0s31f6" ip saddr { 209.115.181.102, 216.197.228.230 } ip daddr 10.0.0.149 udp sport 123 udp dport 32768-65535 accept ruleset.nft:7:22-143: iifname "enp0s31f6" ip saddr { 64.59.144.17, 64.59.150.133 } ip daddr 10.0.0.149 udp sport 53 udp dport 32768-65535 accept do: iifname . ip saddr . ip daddr . udp sport . udp dport { enp0s31f6 . 209.115.181.102 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 216.197.228.230 . 10.0.0.149 . 123 . 32768-65535, enp0s31f6 . 64.59.144.17 . 10.0.0.149 . 53 . 32768-65535, enp0s31f6 . 64.59.150.133 . 10.0.0.149 . 53 . 32768-65535 } accept
  • Byl vyřešen problém s generováním bajtkódu pro sloučení intervalů, ve kterých jsou použity typy s různým pořadím bajtů, například IPv4 (síťové pořadí bajtů) a meta mark (systémové pořadí bajtů). table ip x { map w { typeof ip saddr . meta mark : verdict flags interval counter elements = { 127.0.0.1-127.0.0.4 . 0x123434-0xb00122 : accept, 192.168.0.10-192.168.1.20 . 0x0000aa00-0x0000aaff : accept, } } chain k { type filter hook input priority filter; policy drop; ip saddr . meta mark vmap @w } }
  • Byla zavedena shoda vzácných protokolů při použití raw-výrazů, například: meta l4proto 91 @th,400,16 0x0 accept
  • Byly vyřešeny problémy s vkládáním pravidel s intervaly: insert rule x y tcp sport { 3478-3497, 16384-16387 } counter accept
  • Bylo vylepšeno API JSON, které nyní podporuje výrazy v set- a map-seznamech.
  • V rozšířeních k python-knihovně nftables bylo umožněno načítání sad pravidel pro zpracování v režimu kontroly ("-c") a bylo přidáno podporu externího určení proměnných.
  • V prvcích set-seznamů bylo umožněno přidávání komentářů.
  • V rámci byte ratelimit byla povolena nula jako hodnota.

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