11.4. 使用 nft 命令管理表、链和规则


要在命令行上或 shell 脚本中管理 nftables 防火墙,请使用 nft 工具。

重要

此流程中的命令不代表典型的工作流,且没有被优化。此流程只演示了如何使用 nft 命令来管理表、链和规则。

流程

  1. 创建一个带有 inet 地址系列的名为 nftables_svc 的表,以便表可以处理 IPv4 和 IPv6 数据包:

    # nft add table inet nftables_svc
  2. 将处理传入网络流量的、名为 INPUT 的基本链添加到 inet nftables_svc 表中:

    # nft add chain inet nftables_svc INPUT { type filter hook input priority filter \; policy accept \; }

    为了避免 shell 将分号解释为命令的结尾,请使用 \ 字符转义分号。

  3. INPUT 链添加规则。例如,允许端口 22 和 443 上的传入 TCP 流量,并作为 INPUT 链的最后一条规则,拒绝其他传入的流量,并伴有互联网控制消息协议(ICMP)端口无法访问的消息:

    # nft add rule inet nftables_svc INPUT tcp dport 22 accept
    # nft add rule inet nftables_svc INPUT tcp dport 443 accept
    # nft add rule inet nftables_svc INPUT reject with icmpx type port-unreachable

    如果您输入 nft add rule 命令,则nft 会将按与运行命令相同的顺序将规则添加到链。

  4. 显示包括句柄的当前规则集:

    # nft -a list table inet nftables_svc
    table inet nftables_svc { # handle 13
      chain INPUT { # handle 1
        type filter hook input priority filter; policy accept;
        tcp dport 22 accept # handle 2
        tcp dport 443 accept # handle 3
        reject # handle 4
      }
    }
  5. 在句柄为 3 的现有规则前面插入一条规则。例如,要插入一个允许端口 636 上 TCP 流量的规则,请输入:

    # nft insert rule inet nftables_svc INPUT handle 3 tcp dport 636 accept
  6. 在句柄为 3 的现有规则后面附加一条规则。例如,要插入一个允许端口 80 上 TCP 流量的规则,请输入:

    # nft add rule inet nftables_svc INPUT handle 3 tcp dport 80 accept
  7. 再次显示带有 handle 的规则集。验证是否后添加的规则已添加到指定位置:

    # nft -a list table inet nftables_svc
    table inet nftables_svc { # handle 13
      chain INPUT { # handle 1
        type filter hook input priority filter; policy accept;
        tcp dport 22 accept # handle 2
        tcp dport 636 accept # handle 5
        tcp dport 443 accept # handle 3
        tcp dport 80 accept # handle 6
        reject # handle 4
      }
    }
  8. 删除 handle 为 6 的规则:

    # nft delete rule inet nftables_svc INPUT handle 6

    要删除规则,您必须指定 handle。

  9. 显示规则集,并验证删除的规则是否不再存在:

    # nft -a list table inet nftables_svc
    table inet nftables_svc { # handle 13
      chain INPUT { # handle 1
        type filter hook input priority filter; policy accept;
        tcp dport 22 accept # handle 2
        tcp dport 636 accept # handle 5
        tcp dport 443 accept # handle 3
        reject # handle 4
      }
    }
  10. INPUT 链中删除所有剩余的规则:

    # nft flush chain inet nftables_svc INPUT
  11. 显示规则集,并验证 INPUT 链是否为空:

    # nft list table inet nftables_svc
    table inet nftables_svc {
      chain INPUT {
        type filter hook input priority filter; policy accept
      }
    }
  12. 删除 INPUT 链:

    # nft delete chain inet nftables_svc INPUT

    您还可以使用此命令删除仍然包含规则的链。

  13. 显示规则集,并验证 INPUT 链是否已被删除:

    # nft list table inet nftables_svc
    table inet nftables_svc {
    }
  14. 删除 nftables_svc 表:

    # nft delete table inet nftables_svc

    您还可以使用此命令删除仍然包含链的表。

    注意

    要删除整个规则集,请使用 nft flush ruleset 命令,而不是在单独的命令中手动删除所有规则、链和表。

Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部