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.dump
Copy 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.nft
Copy 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 iptables
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用自定义脚本加载
iptables
规则,请确保脚本不再自动启动并重新引导以刷新所有表。启用并启动
nftables
服务:systemctl enable --now nftables
# systemctl enable --now nftables
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示
nftables
规则集:nft list ruleset
# nft list ruleset
Copy 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 accept
Copy 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-fill
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2.6. 常见的 iptables 和 nftables 命令的比较 复制链接链接已复制到粘贴板!
以下是常见 iptables
和 nftables
命令的比较:
列出所有规则:
Expand iptables nftables iptables-save
nft list ruleset
列出某个表和链:
Expand iptables nftables iptables -L
nft list table ip filter
iptables -L INPUT
nft list chain ip filter INPUT
iptables -t nat -L PREROUTING
nft list chain ip nat PREROUTING
nft
命令不会预先创建表和链。只有当用户手动创建它们时它们才会存在。列出 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 firewalld
Copy to Clipboard Copied! Toggle word wrap Toggle overflow