Red Hat Training

A Red Hat training course is available for RHEL 8

第 7 章 nftables 入门

nftables 框架提供数据包分类功能。最显著的功能是:

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

nftables 框架使用表来存储链。链包含执行动作的独立规则。libnftnl 库可用于通过 libmnl 库与 nftables Netlink API 进行低级交互。

要显示规则集更改的影响,请使用 nft list ruleset 命令。由于这些工具将表、链、规则、集合和其他对象添加到 nftables 规则集,请注意 nftables 规则集操作(如 nft flush ruleset 命令)可能会影响使用之前独立的旧命令安装的规则集。

7.1. 从 iptables 迁移到 nftables

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

7.1.1. 使用 firewalld、nftables 或者 iptables 时

以下是您应该使用以下工具之一的概述:

  • firewalld :将 firewalld 实用程序用于简单的防火墙用例。实用程序易于使用,并涵盖这些情况下的典型用例。
  • nftables :使用 nftables 实用程序设置复杂和性能关键的防火墙,如整个网络。
  • iptables :Red Hat Enterprise Linux 上的 iptables 实用程序使用 the nf_tables 内核 API 而不是 后端。The nf_tables API 提供向后兼容性,因此使用 iptables 命令的脚本仍可在 Red Hat Enterprise Linux 上工作。对于新的防火墙脚本,红帽建议使用 nftables
重要

要避免不同的防火墙服务相互影响,在 RHEL 主机中只有一个服务,并禁用其他服务。

7.1.2. 将 iptables 规则转换为 nftables 规则

Red Hat Enterprise Linux 提供了 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 命令来打印当前规则的转储。例如:

# 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
...

如需更多信息,以及可能的选项和值列表,请输入 iptables-translate --help 命令。

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

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

  • 列出所有规则:

    iptablesnftables

    iptables-save

    nft list ruleset

  • 列出特定的表和链:

    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