nftables 数据包过滤器 1.0.7 发布

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

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

主要变化:

  • 对于运行 Linux 内核 6.2+ 的系统,添加了对 vxlan、geneve、gre 和 gretap 协议映射的支持,允许简单的表达式检查封装数据包中的标头。 例如,要检查来自 VxLAN 的嵌套数据包标头中的 IP 地址,您现在可以使用规则(无需首先解封装 VxLAN 标头并将过滤器绑定到 vxlan0 接口): ... udp dport 4789 vxlan ip 协议 udp ... udp dport 4789 vxlan ip Saddr 1.2.3.0/24 ... udp dport 4789 vxlan ip Saddr 。 vxlan ip baddr { 1.2.3.4 . 4.3.2.1 }
  • 支持在部分删除集合列表元素后自动合并余数,这允许您从现有范围中删除元素或范围的一部分(以前只能完全删除范围)。 例如,从范围为 25-24 和 30-40 的集合列表中删除元素 50 后,列表将保留为 24、26-30 和 40-50。 自动合并工作所需的修复将在 5.10+ 内核稳定分支的维护版本中提供。 # nft 列表规则集表 ip x { set y { typeof tcp dport flags 间隔自动合并 elements = { 24-30, 40-50 } } } # nft 删除元素 ip xy { 25 } # nft 列表规则集表 ip x { set y { typeof tcp dport 标志间隔自动合并元素 = { 24, 26-30, 40-50 } } }
  • 允许在映射地址转换 (NAT) 时使用联系人和范围。 表 ip nat { 链预路由 { 类型 nat hook 预路由优先级 dstnat; 政策接受; dnat 到 ip baddr。 tcp dport 映射 { 10.1.1.136 . 80:1.1.2.69。 1024、10.1.1.10-10.1.1.20。 8888-8889:1.1.2.69。 2048-2049 } 坚持 } }
  • 添加了对“last”表达式的支持,它允许您找出最后一次使用规则元素或集列表的时间。 从 Linux 内核 5.14 开始支持该功能。 表 ip x { 设置 y { ip baddr 类型。 tcp dport size 65535 flags dynamic,timeout 最后超时 1h } chain z { type filter hook 输出优先级过滤器; 政策接受; 更新@y { ip baddr . tcp dport } } } # nft list set ip xy table ip x { set y { typeof ip baddr . tcp dport 大小 65535 标志动态,超时最后超时 1h 元素 = { 172.217.17.14 . 443 最后使用 1s591ms 超时 1h 过期 59m58s409ms, 172.67.69.19 。 443 最后使用 4s636ms 超时 1h 过期 59m55s364ms, 142.250.201.72 。 443 最后使用 4s748ms 超时 1h 过期 59m55s252ms, 172.67.70.134 。 443 最后使用 4s688ms 超时 1h 过期 59m55s312ms, 35.241.9.150 。 443 最后使用 5s204ms 超时 1h 过期 59m54s796ms, 138.201.122.174 。 443 最后使用 4s537ms 超时 1h 过期 59m55s463ms, 34.160.144.191 。 443 最后使用 5s205ms 超时 1h 过期 59m54s795ms, 130.211.23.194 。 443 最后使用 4s436ms 超时 1h 过期 59m55s564ms } } }
  • 添加了在集合列表中定义配额的功能。 例如,要确定每个目标 IP 地址的流量配额,您可以指定: table netdev x { set y { typeof ip baddr size 65535quota over 10000 MB } chain y { type filter hook egress device "eth0"priority filter; 政策接受; ip baddr @y drop } } # nft 添加元素 inet xy { 8.8.8.8 } # ping -c 2 8.8.8.8 # nft 列表规则集表 netdev x { set y { 输入 ipv4_addr 大小 65535 超过 10000 MB 的配额 elements = { 8.8.8.8. 10000 超过 196 MB 的配额使用了 0 字节 } } chain y { type filter hook 出口设备“ethXNUMX”优先级过滤器; 政策接受; ip baddr @y drop } }
  • 允许在集合列表中使用常量。 例如,当使用目的地址和 VLAN ID 作为列表键时,可以直接指定 VLAN 号(daddr . 123): table netdev t { set s { typeof ether Saddr . 2048 。 vlan id 大小 1 标志动态,超时超时 0m } chain c { 类型过滤器挂钩入口设备 eth0 优先级 8021; 政策接受; 以太类型!= 123q 更新@s { 以太daddr 。 XNUMX} 计数器 } }
  • 添加了新的“destroy”命令来无条件删除对象(与删除命令不同,它在尝试删除丢失的对象时不会生成 ENOENT)。 至少需要 Linux 内核 6.3-rc 才能工作。 销毁表 ip 过滤器

来源: opennet.ru

添加评论