Red Hat Training

A Red Hat training course is available for RHEL 8

9.2. 数据包过滤

9.2.1. nftables 取代 iptables 作为默认的网络数据包过滤框架

nftables 框架提供数据包分类工具,它是 iptablesip6tablesarptables ebtablesipset 工具的指定继承者。与之前的数据包过滤工具相比,它在方便、特性和性能方面提供了大量改进,最重要的是:

  • 查找表而不是线性处理
  • IPv4IPv6 使用同一个协议框架
  • 规则会以一个整体被应用,而不是分为抓取、更新和存储完整的规则集的步骤
  • 支持在规则集(nftrace)和监控追踪事件(nft)中调试和追踪
  • 更加一致和压缩的语法,没有特定协议的扩展
  • 用于第三方应用程序的 Netlink API

iptables 类似,nftables 使用表来存储链。链包含执行动作的独立规则。nft 工具取代了之前数据包过滤框架中的所有工具。libnftables 库可用于通过 libmnl 库与 nftables Netlink API 进行低级交互。

iptablesip6tablesebtablesarptables 工具被具有相同名称的基于 nftables 的置入替换所替代。虽然外部行为与其传统的行为相同,但它们在需要时通过兼容性接口在内部使用带有传统 netfilter 内核模块的 nftables

可使用 nft list ruleset 命令查看模块对 nftables 规则集的影响。由于这些工具将表、链和规则添加到 nftables 规则集中,因此请注意 nftables 规则集操作,如 nft flush ruleset 命令,可能会影响使用之前单独的传统命令安装的规则集。

为了帮助快速识存在该工具的哪个变体,版本信息已被更新,其中包含了后端名称。在 RHEL 8 中,基于 nftables 的 iptables 工具打印以下版本字符串:

$ iptables --version
iptables v1.8.0 (nf_tables)

为了进行比较,如果存在传统的 iptables 工具,则会打印以下版本信息:

$ iptables --version
iptables v1.8.0 (legacy)

9.2.2. Arptables FORWARD 从RHEL 8 的过滤表中删除。

在 Red Hat Enterprise Linux(RHEL)8 中已删除了 arptables FORWARD 链功能。您现在可以使用 ebtables 工具的 FORWARD 链将规则添入。

9.2.3. iptables-ebtables 的输出与 ebtables 不是 100% 兼容

在 RHEL 8 中,ebtables 命令由 iptables-ebtables 软件包提供,其中包含基于 nftables 工具的重新实现。此工具有不同的代码库,其输出在诸多方面有偏差,这些偏差要么可以忽略不计,要么是刻意的设计选择。

因此,在迁移用于解析 ebtables 输出脚本时,需要对脚本进行以下调整:

  • 将 MAC 地址格式化改为固定长度。必要时,在独立的字节值的开始包含一个 0,用于维护每个字段值带有两个字符。
  • 已更改 IPv6 前缀的格式以符合 RFC 4291。斜杠字符后的结尾部分不再包含 IPv6 地址格式的子网掩码,而是一个前缀长度。这个更改只适用于有效的(left-contiguous)掩码,其他更改则仍然以旧格式打印。

9.2.4. 将 iptables 转换为 nftables 的新工具

这个更新添加了 iptables-translateip6tables-translate 工具,以便将现有的 iptablesip6tables 规则转换为 nftables 的等效规则。请注意,一些扩展可能缺少响应的转换支持。如果存在这样的扩展,工具会打印具有 # 符号前缀的未转换的规则。例如:

| % iptables-translate -A INPUT -j CHECKSUM --checksum-fill
| nft # -A INPUT -j CHECKSUM --checksum-fill

此外,用户可以使用 iptables-restore-translateip6tables-restore-translate 工具来转换规则的转储。请注意,在此之前,用户可以使用 iptables-saveip6tables-save 命令来打印当前规则的转储。例如:

| % sudo iptables-save >/tmp/iptables.dump
| % iptables-restore-translate -f /tmp/iptables.dump
| # Translated by iptables-restore-translate v1.8.0 on Wed Oct 17 17:00:13 2018
| add table ip nat
| ...