8.2. 从 iptables 迁移到 nftables


如果您的防火墙配置仍然使用 iptables 规则,则您可以将 iptables 规则迁移到 nftables

8.2.1. 使用 firewalld、nftables 或者 iptables 时

在 RHEL 8 中,您可以根据您的情况使用以下数据包过滤工具:

  • firewalldfirewalld 工具简化了常见用例的防火墙配置。
  • nftables :使用 nftables 工具来设置复杂和性能关键的防火墙,如用于整个网络。
  • iptables :Red Hat Enterprise Linux 上的 iptables 工具使用 nf_tables 内核 API 而不是 传统的 后端。nf_tables API 提供了向后兼容性,以便使用 iptables 命令的脚本仍可在 Red Hat Enterprise Linux 上工作。对于新的防火墙脚本,请使用 nftables
重要

要防止不同的与防火墙相关的服务(firewalldnftablesiptables)相互影响,请在 RHEL 主机上仅运行其中一个服务,并禁用其他服务。

8.2.2. nftables 框架中的概念

iptables 框架相比,nftables 提供了更现代化、更高效且更灵活的替代方案。与 iptables 相比,nftables 框架提供了高级功能和改进,从而简化了规则管理,并增强了性能。这使得 nftables 成为复杂和高性能网络环境的一种现代替代方案。

表和命名空间
nftables 中,表代表组织单元或命名空间,其将相关的防火墙链、集合、流表和其他对象分组在一起。在 nftables 中,表提供了一种更灵活的方法来构建防火墙规则和相关组件。在 iptables 中,表被更严格地定义,并具有特定用途。
表系列
nftables 中的每个表都与特定的系列(ipip6inetarpbridgenetdev)关联。此关联决定了表可以处理哪些数据包。例如,ip 系列中的一个表只处理 IPv4 数据包。另一方面,inet 是表系列的一个特例。它提供了一个跨协议的统一方法,因为 IPv4 数据包和 IPv6 数据包它都可以处理。特殊表系列的另一种情况是 netdev,因为它用于直接应用到网络设备的规则,从而在设备级别上启用过滤。
基本链

nftables 中的基本链是数据包处理管道中高度可配置的入口点,允许用户指定以下内容:

  • 链的类型,如 "filter"
  • 数据包处理路径中的钩子点,例如 "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 中的操作可以是最终的操作,如 dropaccept,这停止对数据包的进一步规则处理。非终端操作,如 counter log meta mark set 0x3,执行特定的任务(计算数据包、日志记录、设置标记等),但允许评估后续规则。

8.2.3. 弃用的 iptables 框架中的概念

与主动维护的 nftables 框架类似,弃用的 iptables 框架使您能够执行各种数据包过滤任务、日志记录和审计、与 NAT 相关的配置任务等。

iptables 框架由多个表组成,其中每个表都为特定目的而设计:

filter
默认表确保常规数据包过滤
nat
对于网络地址转换(NAT),包括更改数据包的源和目标地址
mangle
对于特定的数据包更改,您可以为高级路由决策对数据包标头进行修改
raw
对于需要在连接跟踪之前发生的配置

这些表作为单独的内核模块实现,其中每个表都提供一组固定的内置链,如 INPUTOUTPUTFORWARD。链是针对其评估数据包的规则的序列。这些将钩住内核中数据包处理流中的特定点。链在不同的表中有相同的名称,但它们的执行顺序由各自的钩子优先级决定。优先级由内核在内部管理,以确保规则以正确的顺序应用。

最初,iptables 被设计为处理 IPv4 流量。但是,随着 IPv6 协议的出现,需要引入 ip6tables 工具来提供可比较功能(如 iptables),并使用户能够创建和管理用于 IPv6 数据包的防火墙规则。使用相同的逻辑,创建 arptables 工具是为了处理地址解析协议(ARP),开发 ebtables 工具是为了处理以太网桥接帧。这些工具确保您可以在各种网络协议中应用 iptables 的数据包过滤功能,并提供全面的网络覆盖。

要增强 iptables 的功能,开始开发扩展。功能扩展通常作为与用户空间动态共享对象(DSO)配对的内核模块实现。扩展引入了"匹配"和"目标",您可以在防火墙规则中使用它们来执行更复杂的操作。扩展可以启用复杂的匹配和目标。例如,您可以匹配或操作特定的第 4 层协议标头值,执行速率限制、强制配额等。某些扩展旨在解决默认 iptables 语法中的限制,如"多端口"匹配扩展。此扩展允许单个规则匹配多个非连续端口,以简化规则定义,从而减少所需的单个规则的数量。

ipsetiptables 的一种特殊的功能扩展。这是一个内核级别的数据结构,它与 iptables 一起使用来创建 IP 地址、端口号和其他与网络有关的您可以匹配数据包的元素的集合。这些集合可显著简化、优化并加快编写和管理防火墙规则的过程。

使用 iptables-restore-translateip6tables-restore-translate 实用程序将 iptablesip6tables 规则集转换为 nftables

先决条件

  • 已安装 nftablesiptables 软件包。
  • 系统配置了 iptablesip6tables 规则。

流程

  1. iptablesip6tables 规则写入一个文件:

    # iptables-save >/root/iptables.dump
    # ip6tables-save >/root/ip6tables.dump
    Copy to Clipboard Toggle word wrap
  2. 将转储文件转换为 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
    Copy to Clipboard Toggle word wrap
  3. 检查,如果需要,手动更新生成的 nftables 规则。
  4. 要启用 nftables 服务来加载生成的文件,请在 /etc/sysconfig/nftables.conf 文件中添加以下内容:

    include "/etc/nftables/ruleset-migrated-from-iptables.nft"
    include "/etc/nftables/ruleset-migrated-from-ip6tables.nft"
    Copy to Clipboard Toggle word wrap
  5. 停止并禁用 iptables 服务:

    # systemctl disable --now iptables
    Copy to Clipboard Toggle word wrap

    如果您使用自定义脚本加载 iptables 规则,请确保脚本不再自动启动并重新引导以刷新所有表。

  6. 启用并启动 nftables 服务:

    # systemctl enable --now nftables
    Copy to Clipboard Toggle word wrap

验证

  • 显示 nftables 规则集:

    # nft list ruleset
    Copy to Clipboard Toggle word wrap

Red Hat Enterprise Linux 提供了 iptables-translateip6tables-translate 工具来将 iptablesip6tables 规则转换为与 nftables 相等的规则。

前提条件

  • 已安装 nftables 软件包。

流程

  • 使用 iptables-translateip6tables-translate 程序而不是 iptablesip6tables 显示对应的 nftables 规则,例如:

    # 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 Toggle word wrap

    请注意,一些扩展可能缺少响应的转换支持。在这些情况下,实用程序会输出以 # 符号为前缀的未转换规则,例如:

    # iptables-translate -A INPUT -j CHECKSUM --checksum-fill
    nft # -A INPUT -j CHECKSUM --checksum-fill
    Copy to Clipboard Toggle word wrap

8.2.6. 常见的 iptables 和 nftables 命令的比较

以下是常见 iptablesnftables 命令的比较:

  • 列出所有规则:

    Expand
    iptablesnftables

    iptables-save

    nft list ruleset

  • 列出某个表和链:

    Expand
    iptablesnftables

    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
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat