nftables 数据包过滤器 1.0.3 发布

数据包过滤器 nftables 1.0.3 版本已发布,统一了 IPv4、IPv6、ARP 和网桥的数据包​​过滤接口(旨在取代 iptables、ip6table、a​​rptables 和 ebtables)。 Linux 1.0.3 内核中包含 nftables 5.18 版本正常工作所需的更改。

nftables 软件包包括在用户空间中运行的数据包过滤器组件,而内核级工作由 nf_tables 子系统提供,该子系统自 3.13 版本以来一直是 Linux 内核的一部分。 内核层仅提供通用的与协议无关的接口,提供从数据包中提取数据、执行数据操作和流量控制的基本功能。

过滤规则和特定于协议的处理程序在用户空间中编译为字节码,然后使用 Netlink 接口将该字节码加载到内核中,并在内核中的特殊虚拟机(类似于 BPF(伯克利数据包过滤器))中执行。 这种方法允许您显着减少在内核级别运行的过滤代码的大小,并将用于处理协议的解析规则和逻辑的所有功能移至用户空间。

主要创新:

  • 设置列表现在支持通过掩码匹配网络接口名称,例如,使用“*”符号指定: table inet testifsets { set simple_wild { type ifname flags Interval elements = { “abcdef*”, “othername”, “ppp0” } } chain v4icmp { 类型过滤器钩子输入优先级 0; 政策接受; iifname @simple_wild 计数器数据包 0 字节 0 iifname { “abcdef*”, “eth0” } 计数器数据包 0 字节 0 } }
  • 在操作过程中实现了相交集合列表元素的自动合并。 以前,当设置“自动合并”选项时,合并是在声明规则的阶段进行的,但现在在运行过程中增量添加新元素时也可以进行合并。 例如,在声明阶段,列表 set y { flags Interval auto-merge elements = { 1.2.3.0, 1.2.3.255, 1.2.3.0/24, 3.3.3.3, 4.4.4.4, 4.4.4.4-4.4.4.8 , 3.3.3.4 , 3.3.3.5 } } 将被转换为 elements = { 1.2.3.0/24, 3.3.3.3-3.3.3.5, 4.4.4.4-4.4.4.8 } 然后如果添加新元素 # nft add element ip xy { 1.2.3.0 -1.2.4.255, 3.3.3.6 } 看起来像 elements = { 1.2.3.0-1.2.4.255, 3.3.3.3-3.3.3.6, 4.4.4.4-4.4.4.8 }

    当您从列表中删除属于现有范围项目的单个项目时,范围会缩短或拆分。

  • 规则优化器中添加了对将多个地址转换 (NAT) 规则组合到映射列表中的支持,在指定“-o/—optimize”选项时调用。 例如,对于 set #catruleset.nft table ip x { chain y { type nat hook postroutingpriority srcnat; 政策下降; ip Saddr 1.1.1.1 tcp dport 8000 snat 到 4.4.4.4:80 ip Saddr 2.2.2.2 tcp dport 8001 snat 到 5.5.5.5:90 } }

    执行“nft -o -c -f Ruleset.nft”会将单独的“ip Saddr”规则转换为映射列表: snat 到 ip Saddr 。 tcp dport 映射 { 1.1.1.1 . 8000:4.4.4.4。 80、2.2.2.2。 8001:5.5.5.5。 90}

    同样,原始表达式可以转换为映射列表: # catruleset.nft table ip x { […] chain nat_dns_acme { udp length 47-63 @th,160,128 0x0e373135363130333131303735353203 goto nat_dns_dnstc udp length 62-78 @th ,160,128 0 0x31393032383939353831343037320e5301e 转到 nat_dns_this_62 udp 长度 78-160,128 @th,0 0x31363436323733373931323934300e5301e 转到 nat_dns_saturn_62 udp 长度 78-160,128 @th,0 0x32393535373539353636383732310e5302 62 78e 转到 nat_dns_saturn_160,128 udp 长度 0-0 @th,38353439353637323038363633390 5303xXNUMXeXNUMXe 转到 nat_dns_saturn_XNUMX 下降 } }

    优化后我们得到一个映射列表: udp length 。 @th,160,128 vmap { 47-63 . 0x0e373135363130333131303735353203 : 转到 nat_dns_dnstc, 62-78 。 0x0e31393032383939353831343037320e : 转到 nat_dns_this_5301, 62-78 。 0x0e31363436323733373931323934300e : 转到 nat_dns_saturn_5301, 62-78 。 0x0e32393535373539353636383732310e : 转到 nat_dns_saturn_5302, 62-78 。 0x0e38353439353637323038363633390e:转到nat_dns_saturn_5303}

  • 允许在串联运算中使用原始表达式。 例如:#nft 添加规则 xy ip Saddr。 @ih,32,32 { 1.1.1.1 。 0x14,2.2.2.2。 0x1e } 或表 x { set y { typeof ip Saddr 。 @ih,32,32 个元素 = { 1.1.1.1 . 0x14 } } }
  • 添加了对在串联操作中指定整数标头字段的支持: table inet t { map m1 { typeof udp length 。 @ih,32,32 :判决标志区间元素 = { 20-80 。 0x14:接受,1-10。 0xa : drop } } chain c { 类型过滤器钩子输入优先级 0; 政策下降; UDP 长度。 @ih,32,32 vmap @m1 } }
  • 添加了对重置 TCP 选项的支持(仅适用于 Linux 内核 5.18+): tcp flags syn Reset tcp option sack-perm
  • 链输出命令(“nft list chain xy”)的执行已加速。

来源: opennet.ru

添加评论