10.3. nftables 框架中的概念
与 iptables
框架相比,nftables
提供了更现代化、更高效且更灵活的替代方案。nftables
框架比 iptables
提供了高级功能和改进,从而简化规则管理和增强性能。这使得 nftables
成为复杂和高性能网络环境的现代替代方案。
- 表和命名空间
-
在
nftables
中,表代表组织单元或命名空间,其将相关的防火墙链、集合、流表和其他对象分组在一起。在nftables
中,表提供了一种更灵活的方法来构建防火墙规则和相关组件。在iptables
中,表被更严格地定义,并具有特定用途。 - 表系列
-
nftables
中的每个表都与特定的系列(ip
、ip6
、inet
、arp
、bridge
或netdev
)关联。此关联决定了表可以处理哪些数据包。例如,ip
系列中的一个表只处理 IPv4 数据包。另一方面,inet
是表系列的一个特例。它提供了一个跨协议的统一方法,因为 IPv4 数据包和 IPv6 数据包它都可以处理。特殊表系列的另一种情况是netdev
,因为它用于直接应用到网络设备的规则,从而在设备级别上启用过滤。 - 基本链
nftables
中的基本链是数据包处理管道中高度可配置的入口点,允许用户指定以下内容:- 链的类型,如 "filter"
- 数据包处理路径中的 hook 点,例如 "input", "output", "forward"
- 链的优先级
通过这种灵活性,可以精确控制规则在通过网络堆栈时何时及如何应用到数据包。链的一种特殊情况是
route
链,其用于根据数据包头,影响内核所做的路由决策。- 用于规则处理的虚拟机
nftables
框架使用一个内部虚拟机来处理规则。此虚拟机执行与汇编语言操作类似的指令(将数据加载到寄存器,执行比较等)。这种机制可以实现高度灵活和有效的规则处理。nftables
中的增强功能可以作为该虚拟机的新指令引入。这通常需要一个新的内核模块,以及对libnftnl
库和nft
命令行工具的更新。或者,您可以通过将现有指令以一种创新的方式结合来引进新功能,而无需进行内核修改。
nftables
规则的语法反映了底层虚拟机的灵活性。例如,如果 TCP 目的地端口为 22,规则meta mark set tcp dport map { 22: 1, 80: 2 }
将数据包的防火墙标记设置为 1 ,如果端口为 80,则设置为 2。这展示了如何简洁地表达复杂的逻辑。- 复杂的过滤和字典映射
nftables
框架集成并扩展了ipset
工具的功能,其在iptables
中用于对 IP 地址、端口、其他数据类型、最重要的是其中的组合进行批量匹配。此集成使您更容易直接管理nftables
中的大型和动态的数据集。接下来,nftables
原生支持根据任何数据类型的多个值或范围匹配数据包,这增强了其处理复杂过滤要求的能力。使用nftables
,您可以操作数据包中的任何字段。在
nftables
中,集合可以是命名的或匿名的。命名的集合可被多个规则引用和动态修改。匿名集合在规则内被内联定义,并且是不可变的。集合可以包含是不同类型组合的元素,如 IP 地址和端口号对。此功能在匹配复杂标准方面提供了更大的灵活性。要管理集合,内核可以根据特定要求(性能、内存效率等)选择最合适的后端。集合也可以作为具有键值对的映射。值部分可用作数据点(写入数据包头的值),或者作为要跳到的判决或链。这可启用复杂和动态的规则行为,称为"判决映射"。- 灵活的规则格式
nftables
规则的结构非常简单。条件和操作从左到右顺序应用。这种直观的格式简化了规则创建和故障排除。规则中的条件在逻辑上连接(使用 AND 运算符)在一起,这意味着要使规则匹配,所有条件都必须被评估为 "true" 。如果有任何条件失败,评估将移到下一个规则。
nftables
中的操作可以是最终的操作,如drop
或accept
,这停止对数据包的进一步规则处理。非终端操作,如counter log meta mark set 0x3
,执行特定的任务(计算数据包、日志记录、设置标记等),但允许评估后续规则。