nftables 1.0.1 版本已发布,这是一个统一了 IPv4、IPv6、ARP 和网络桥接数据包过滤接口的数据包过滤框架(旨在替代 iptables、ip6table、arptables 和 ebtables)。nftables 1.0.1 所需的更改已合并到内核中。 Linux 5.16-rc1。
nftables 软件包包含在用户空间运行的数据包过滤组件,而内核级工作由内核的一部分 nf_tables 子系统提供。 Linux 自 3.13 版本以来,内核级别仅提供了一个通用的、与协议无关的接口,提供从数据包中提取数据、执行数据操作和流量控制的基本功能。
过滤规则本身和协议特定的处理程序在用户空间被编译成字节码,之后该字节码通过 Netlink 接口加载到内核中,并在内核中以特殊方式执行。 虚拟机这与伯克利数据包过滤器(BPF)类似。这种方法可以显著减少内核级过滤代码的大小,并将所有规则解析和协议逻辑移至用户空间。
主要创新:
- 减少加载大型集合和地图列表时的内存消耗。
- 场景和地图列表的重新加载速度已加快。
- 大型规则集中选定表和链的输出已加速。例如,“nft list Ruleset”命令显示一组100万行规则的执行时间为3.049秒,而当仅输出nat和filter表时(“nft list table nat”、“nft list table filter”) ”)减少到 1.969 和 0.697 秒。
- 当处理具有大型集合和映射列表的规则时,使用“--terse”选项执行查询的速度得到了加快。
- 可以过滤来自“egress”链的流量,该链的处理级别与 netdev 链中的 egress 处理程序(egress hook)相同,即在驱动程序从内核网络堆栈接收数据包的阶段。表 netdev 过滤器 { 链出口 { 类型过滤器钩子出口设备 = { eth0, eth1 } 优先级 0;元优先级设置 ip Saddr 映射 { 192.168.10.2 : abcd:2, 192.168.10.3 : abcd:3 } } }
- 允许在给定偏移处匹配和修改包头中的字节和数据包的内容。 # nft 添加规则 xy @ih,32,32 0x14000000 计数器 # nft 添加规则 xy @ih,32,32 设置 0x14000000 计数器
来源: opennet.ru
