2.2. 从 iptables 迁移到 nftables
如果您的防火墙配置仍然使用 iptables 规则,则您可以将 iptables 规则迁移到 nftables。
ipset 和 iptables-nft 软件包已在 Red Hat Enterprise Linux 9 中弃用。这包括 nft-variants (如 iptables、ip6tables、arptables 和 ebtables 工具)的弃用。如果您使用其中任何一个工具,例如,因为您从早期的 RHEL 版本升级,红帽建议迁移到 nftables 软件包提供的 nft 命令行工具。
2.2.1. 何时使用 firewalld 或 nftables 复制链接链接已复制到粘贴板!
在 Red Hat Enterprise Linux 中,您可以根据您的场景使用以下数据包过滤工具:
-
firewalld:firewalld工具简化了常见用例的防火墙配置。 -
nftables:使用nftables实用程序设置复杂和高性能的防火墙,如为整个网络设置。
要防止不同的防火墙相关服务(firewalld 或 nftables)相互影响,请在 RHEL 主机上运行其中之一,并禁用其他服务。
2.2.2. nftables 框架中的概念 复制链接链接已复制到粘贴板!
与 iptables 框架相比,nftables 提供了更加现代化、高效且更灵活的替代选择。nftables 框架比 iptables 提供了高级功能和改进,从而简化规则管理和增强性能。这使得 nftables 成为复杂和高性能网络环境的现代替代方案。
- 表和命名空间
-
在
nftables中,表代表组织单元或命名空间,它们将相关的防火墙链、集合、流tables 和其他对象分组在一起。在nftables中,表提供了一种更灵活的方法来结构防火墙规则和相关组件。在iptables中,表更严格地定义在特定目的。 - 表系列
-
nftables中的每个表都与特定系列关联(ip、ip6、inet、arp、bridge或netdev)。此关联决定了表可以处理哪些数据包。例如,ip系列中的一个表只处理 IPv4 数据包。另一方面,inet是表系列的特殊案例。它提供了跨协议的统一方法,因为它可以处理 IPv4 和 IPv6 数据包。特殊表系列的另一个情况是netdev,因为它用于直接应用到网络设备的规则,从而在设备级别上启用过滤。 - 基本链
nftables中的基本链是数据包处理管道中高度可配置的入口点,允许用户指定以下内容:- 链的类型,如 "filter"
- 数据包处理路径中的 hook 点,例如 "input", "output", "forward"
- 链的优先级
通过这种灵活性,可以精确控制规则在通过网络堆栈时应用到数据包的时间和方式。链的一种特殊情况是
路由链,用于根据数据包标头影响内核提出的路由决策。- 用于规则处理的虚拟机
nftables框架使用内部虚拟机来处理规则。此虚拟机执行与装配语言操作类似的指令(将数据加载到寄存器中,执行比较等)。这种机制可以实现高度灵活、高效的规则处理。nftables中的增强功能可以作为该虚拟机的新指令引入。这通常需要一个新的内核模块,并对libnftnl库和nft命令行工具进行更新。或者,您可以通过将现有指令以创新方式结合来引进新功能,而无需进行内核修改。
nftables规则的语法反映了底层虚拟机的灵活性。例如:规则meta mark set tcp dport map { 22:1, 80:2 }将数据包的防火墙标记设置为 1 (如果 TCP 目的地端口为 22),如果端口为 80,则设置为 2。这展示了如何简洁地表达复杂逻辑。- 复杂的过滤和字典映射
nftables框架集成并扩展ipset工具的功能,用于iptables在 IP 地址、端口、其他数据类型上批量匹配,最重要的是,其中的组合。此集成可让您在nftables中直接管理大量和动态数据集。接下来,nftables原生支持基于任何数据类型的多个值或范围匹配的数据包,这增强了其处理复杂过滤要求的能力。使用nftables,您可以操作数据包中的任何字段。在
nftables中,集合可以命名为 或 anonymous。命名的集合可由多个规则引用并动态修改。匿名集合在规则内内联定义,并且是不可变的。集合可以包含组合不同类型的元素,如 IP 地址和端口号对。此功能在匹配复杂标准方面提供了更大的灵活性。要管理集合,内核可以根据特定要求(性能、内存效率等)选择最合适的后端。设置也可以使用键值对作为映射。value 部分可用作数据点(写入数据包标头的值),或者作为要跳到的链的值。这可启用复杂和动态规则行为,称为"verdict 映射"。- 灵活的规则格式
nftables规则的结构非常简单。条件和操作从左到右应用。这种直观的格式简化了创建和故障排除的规则。规则中的条件在逻辑上连接(与 AND 运算符)一起,这意味着所有条件都必须评估为 "true" 才能匹配的规则。如果有任何条件失败,评估将移到下一个规则。
nftables中的操作可以是最终的操作,如drop或accept,这样可停止对数据包进行进一步处理。非终端操作,如计数器日志元标记设置 0x3,执行特定的任务(计算数据包、日志记录、设置标记等),但允许评估后续规则。
2.2.3. 弃用的 iptables 框架中的概念 复制链接链接已复制到粘贴板!
与主动维护的 nftables 框架类似,弃用的 iptables 框架允许您执行各种数据包过滤任务、日志记录和审计、与 NAT 相关的配置任务等。
iptables 框架由多个表组成,每个表都为特定目的设计:
filter- 默认表确保常规数据包过滤
nat- 对于网络地址转换(NAT),包括更改数据包的源和目标地址
mangle- 对于特定的数据包更改,您可以针对高级路由决策对数据包标头进行修改
raw- 对于在连接跟踪前需要发生的配置
这些表作为单独的内核模块实施,其中每个表都提供一组固定的内置链,如 INPUT、OUTPUT 和 FORWARD。链是指对数据包进行评估的规则序列。这些将 hook 链在内核中数据包处理流中的特定点。链在不同的表中具有相同的名称,但它们的执行顺序由相应的 hook 优先级决定。优先级由内核在内部管理,以确保规则以正确的序列应用。
最初,iptables 旨在处理 IPv4 流量。但是,由于 IPv6 协议的出现,需要引入 ip6tables 工具来提供可比较功能(作为 iptables),并允许用户创建和管理 IPv6 数据包的防火墙规则。使用相同的逻辑,创建了 arptables 工具来处理地址解析协议(ARP),并且为处理以太网桥接帧而开发了 ebtables 工具。这些工具可确保您可以在各种网络协议中应用 iptables 的数据包过滤功能,并提供全面的网络覆盖。
为增强 iptables 的功能,可以开始开发的扩展。功能扩展通常作为与用户空间动态共享对象(DSO)配对的内核模块实现。扩展引入了"匹配"和"目标",您可以在防火墙规则中使用它们来执行更复杂的操作。扩展可以启用复杂的匹配和目标。例如,您可以匹配或操作特定的第 4 层协议标头值,执行速率限制、强制实施配额等。某些扩展旨在解决默认的 iptables 语法中的限制,如"多端口"匹配扩展。此扩展允许单个规则与多个非安全端口匹配,以简化规则定义,从而减少所需的单个规则数量。
ipset 是 iptables 的特殊功能扩展。这是一个内核级别的数据结构,它与 iptables 一起使用来创建与数据包匹配的 IP 地址、端口号和其他与网络相关的元素集合。这些设置可显著简化、优化并加快编写和管理防火墙规则的过程。
2.2.4. 将 iptables 和 ip6tables 规则集转换为 nftables 复制链接链接已复制到粘贴板!
使用 iptables-restore-translate 和 ip6tables-restore-translate 实用程序将 iptables 和 ip6tables 规则集转换为 nftables。
先决条件
-
已安装
nftables和iptables软件包。 -
系统配置了
iptables和ip6tables规则。
流程
将
iptables和ip6tables规则写入一个文件:iptables-save >/root/iptables.dump ip6tables-save >/root/ip6tables.dump
# iptables-save >/root/iptables.dump # ip6tables-save >/root/ip6tables.dumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将转储文件转换为
nftables指令:iptables-restore-translate -f /root/iptables.dump > /etc/nftables/ruleset-migrated-from-iptables.nft ip6tables-restore-translate -f /root/ip6tables.dump > /etc/nftables/ruleset-migrated-from-ip6tables.nft
# iptables-restore-translate -f /root/iptables.dump > /etc/nftables/ruleset-migrated-from-iptables.nft # ip6tables-restore-translate -f /root/ip6tables.dump > /etc/nftables/ruleset-migrated-from-ip6tables.nftCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查,如果需要,手动更新生成的
nftables规则。 要启用
nftables服务来加载生成的文件,请在/etc/sysconfig/nftables.conf文件中添加以下内容:include "/etc/nftables/ruleset-migrated-from-iptables.nft" include "/etc/nftables/ruleset-migrated-from-ip6tables.nft"
include "/etc/nftables/ruleset-migrated-from-iptables.nft" include "/etc/nftables/ruleset-migrated-from-ip6tables.nft"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 停止并禁用
iptables服务:systemctl disable --now iptables
# systemctl disable --now iptablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用自定义脚本加载
iptables规则,请确保脚本不再自动启动并重新引导以刷新所有表。启用并启动
nftables服务:systemctl enable --now nftables
# systemctl enable --now nftablesCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示
nftables规则集:nft list ruleset
# nft list rulesetCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.5. 将单个 iptables 和 ip6tables 规则转换为 nftables 复制链接链接已复制到粘贴板!
Red Hat Enterprise Linux 提供了 iptables-translate 和 ip6tables-translate 工具来将 iptables 或 ip6tables 规则转换为与 nftables 相等的规则。
先决条件
-
已安装
nftables软件包。
流程
使用
iptables-translate或ip6tables-translate程序而不是iptables或ip6tables显示对应的nftables规则,例如:iptables-translate -A INPUT -s 192.0.2.0/24 -j ACCEPT
# iptables-translate -A INPUT -s 192.0.2.0/24 -j ACCEPT nft add rule ip filter INPUT ip saddr 192.0.2.0/24 counter acceptCopy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,一些扩展可能缺少响应的转换支持。在这些情况下,实用程序会输出以
#符号为前缀的未转换规则,例如:iptables-translate -A INPUT -j CHECKSUM --checksum-fill
# iptables-translate -A INPUT -j CHECKSUM --checksum-fill nft # -A INPUT -j CHECKSUM --checksum-fillCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.6. 常见的 iptables 和 nftables 命令的比较 复制链接链接已复制到粘贴板!
以下是常见 iptables 和 nftables 命令的比较:
列出所有规则:
Expand iptables nftables iptables-savenft list ruleset列出某个表和链:
Expand iptables nftables iptables -Lnft list table ip filteriptables -L INPUTnft list chain ip filter INPUTiptables -t nat -L PREROUTINGnft list chain ip nat PREROUTINGnft命令不会预先创建表和链。只有当用户手动创建它们时它们才会存在。列出 firewalld 生成的规则:
nft list table inet firewalld nft list table ip firewalld nft list table ip6 firewalld
# nft list table inet firewalld # nft list table ip firewalld # nft list table ip6 firewalldCopy to Clipboard Copied! Toggle word wrap Toggle overflow