nftables 数据包过滤器 1.0.6 发布

数据包过滤器 nftables 1.0.6 版本已发布,统一了 IPv4、IPv6、ARP 和网桥的数据包​​过滤接口(旨在取代 iptables、ip6table、a​​rptables 和 ebtables)。 nftables 软件包包括在用户空间中运行的数据包过滤器组件,而内核级工作由 nf_tables 子系统提供,该子系统自 3.13 版本以来一直是 Linux 内核的一部分。 内核层仅提供通用的与协议无关的接口,提供从数据包中提取数据、执行数据操作和流量控制的基本功能。

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

主要变化:

  • 指定“-o/—optimize”选项时调用的规则优化器通过组合规则并将其转换为映射和集列表来自动打包规则。 例如,rules#catruleset.nfttableipx{chainy{typefilterhookinputpriorityfilter; 政策下降; 元 iifname eth1 ip Saddr 1.1.1.1 ip baddr 2.2.2.3 接受元 iifname eth1 ip Saddr 1.1.1.2 ip baddr 2.2.2.4 接受元 iifname eth1 ip Saddr 1.1.1.2 ip baddr 2.2.3.0/24 接受元 iifname eth1 ip Saddr 1.1.1.2 .2.2.4.0 ip baddr 2.2.4.10-2accept meta iifname eth1.1.1.3 ip Saddr 2.2.2.5 ip baddr 4accept } } 执行“nft -o -c -fruleset.nft”后将转换为如下:ruleset .nft:17:74-1:meta iifname eth1.1.1.1 ip Saddr 2.2.2.3 ip baddr 5 接受规则集.nft:17:74-1:meta iifname eth1.1.1.2 ip Saddr 2.2.2.4 ip baddr 6 接受规则集.nft : 17:77-1: 元 iifname eth1.1.1.2 ip Saddr 2.2.3.0 ip baddr 24/7 接受规则集.nft:17:83-1: 元 iifname eth1.1.1.2 ip Saddr 2.2.4.0 ip baddr 2.2.4.10-8接受规则集.nft:17:74-2:meta iifname eth1.1.1.3 ip Saddr 2.2.2.5 ip baddr 1 接受: iifname 。 ip Saddr。 ip 爸爸 { eth1.1.1.1 . 2.2.2.3. 1、eth1.1.1.2。 2.2.2.4。 1、eth1.1.1.2。 2.2.3.0。 24/1,eth1.1.1.2。 2.2.4.0。 2.2.4.10-2,eth1.1.1.3。 2.2.2.5。 XNUMX } 接受
  • 优化器还可以将已经使用简单集合列表的规则转换为更紧凑的形式,例如规则:#catruleset.nfttableipfilter{chaininput{typefilterhookinputpriorityfilter; 政策下降; iIfname“ lo”接受CT状态,相关的评论“在交通中,我们信任,我们信任” iifName“ enp0s31f6” IP saddr {209.115.181.102,216.197.228.230} iifname "enp10.0.0.149s123f32768" ip Saddr { 65535, 0 } ip baddr 31 udp sport 6 udp dport 64.59.144.17-64.59.150.133accept } } 执行“nft -o -c -f Ruleset.nft”后会打包如下:ruleset.nft:10.0.0.149:53-32768:iifname“enp65535s6f22”ip Saddr {149,0} ip baddr 31 udp sport 6 udp dport 209.115.181.102-216.197.228.230接受ruleset.nft:10.0.0.149: 123-32768: iifname "enp65535s7f22" ip Saddr { 143, 0 } ip baddr 31 udp sport 6 udp dport 64.59.144.17-64.59.150.133 接受: iifname 。 ip Saddr。 ip 爸爸。 udp运动。 udp dport { enp10.0.0.149s53f32768 . 65535。 0。 31. 6-209.115.181.102,enp10.0.0.149s123f32768。 65535。 0。 31. 6-216.197.228.230,enp10.0.0.149s123f32768。 65535。 0。 31. 6-64.59.144.17,enp10.0.0.149s53f32768。 65535。 0。 31. 6-64.59.150.133}接受
  • 解决了使用不同字节顺序的类型(例如 IPv4(网络字节顺序)和元标记(系统字节顺序))合并间隔的字节码生成问题。 表 ip x { 映射 w { ip Saddr 类型。 元标记:判决标志间隔计数器元素= { 127.0.0.1-127.0.0.4 。 0x123434-0xb00122:接受,192.168.0.10-192.168.1.20。 0x0000aa00-0x0000aaff : 接受, } } chain k { type filter hook 输入优先级过滤器; 政策下降; ip Saddr。 元标记 vmap @w } }
  • 改进了使用原始表达式时罕见协议的比较,例如:meta l4proto 91 @th,400,16 0x0 Accept
  • 每隔一段时间启用规则的问题已得到解决:插入规则 xy tcp sport { 3478-3497, 16384-16387 } counter Accept
  • JSON API 已得到改进,包括对集合和映射列表中的表达式的支持。
  • nftables python 库的扩展允许加载规则集以在验证模式(“-c”)下进行处理,并添加对变量的外部定义的支持。
  • 允许在集合列表元素中添加注释。
  • 字节速率限制允许指定零值。

来源: opennet.ru

添加评论