6.8. 调试 nftables 规则


nftables 框架为管理员提供了不同的选项来调试规则,以及数据包是否匹配。本节描述了这些选项。

6.8.1. 创建带有计数器的规则

在识别规则是否匹配时,可以使用计数器。本节描述了如何创建带有计数器的新规则。
有关在现有规则中添加计数器的步骤,请参阅 第 6.8.2 节 “在现有规则中添加计数器”

先决条件

  • 您要添加该规则的链已存在。

过程 6.21. 创建带有计数器的规则

  1. 在链中添加带有 counter 参数的新规则。以下示例添加了一个带有计数器的规则,允许端口 22 上的 TCP 流量,并统计与此规则匹配的数据包和流量:
    # nft add rule inet example_table example_chain tcp dport 22 counter accept
    Copy to Clipboard Toggle word wrap
  2. 显示计数器值:
    # nft list ruleset
    table inet example_table {
      chain example_chain {
        type filter hook input priority filter; policy accept;
        tcp dport ssh counter packets 6872 bytes 105448565 accept
      }
    }
    
    Copy to Clipboard Toggle word wrap

6.8.2. 在现有规则中添加计数器

在识别规则是否匹配时,可以使用计数器。本节论述了如何在现有规则中添加计数器。
有关使用计数器添加新规则的步骤,请参阅 第 6.8.1 节 “创建带有计数器的规则”

先决条件

  • 您要添加计数器的规则已存在。

过程 6.22. 在现有规则中添加计数器

  1. 在链中显示规则及其句柄:
    # nft --handle list chain inet example_table example_chain
    table inet example_table {
      chain example_chain { # handle 1
        type filter hook input priority filter; policy accept;
        tcp dport ssh accept # handle 4
      }
    }
    
    Copy to Clipboard Toggle word wrap
  2. 通过将规则替换为 counter 参数来添加计数器。以下示例替换了上一步中显示的规则并添加计数器:
    # nft replace rule inet example_table example_chain handle 4 tcp dport 22 counter accept
    Copy to Clipboard Toggle word wrap
  3. 显示计数器值:
    # nft list ruleset
    table inet example_table {
      chain example_chain {
        type filter hook input priority filter; policy accept;
        tcp dport ssh counter packets 6872 bytes 105448565 accept
      }
    }
    
    Copy to Clipboard Toggle word wrap

6.8.3. 监控与现有规则匹配的数据包

nftables 中的追踪功能与 nft monitor 命令相结合,使管理员能够显示与某一规则匹配的数据包。该流程描述了如何为规则启用追踪以及与本规则匹配的监控数据包。

先决条件

  • 您要添加计数器的规则已存在。

过程 6.23. 监控与现有规则匹配的数据包

  1. 在链中显示规则及其句柄:
    # nft --handle list chain inet example_table example_chain
    table inet example_table {
      chain example_chain { # handle 1
        type filter hook input priority filter; policy accept;
        tcp dport ssh accept # handle 4
      }
    }
    
    Copy to Clipboard Toggle word wrap
  2. 通过使用 meta nftrace set 参数替换规则来添加追踪功能。1以下示例替换了上一步中显示的规则并启用追踪:
    # nft replace rule inet example_table example_chain handle 4 tcp dport 22 meta nftrace set 1 accept
    Copy to Clipboard Toggle word wrap
  3. 使用 nft monitor 命令来显示追踪。以下示例过滤了命令的输出,来只显示包含 inet example_table example_chain 的条目:
    # nft monitor | grep "inet example_table example_chain"
    trace id 3c5eb15e inet example_table example_chain packet: iif "enp1s0" ether saddr 52:54:00:17:ff:e4 ether daddr 52:54:00:72:2f:6e ip saddr 192.0.2.1 ip daddr 192.0.2.2 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 49710 ip protocol tcp ip length 60 tcp sport 56728 tcp dport ssh tcp flags == syn tcp window 64240
    trace id 3c5eb15e inet example_table example_chain rule tcp dport ssh nftrace set 1 accept (verdict accept)
        ...
    
    Copy to Clipboard Toggle word wrap
    警告
    根据启用了追踪的规则数量以及匹配流量的数量,nft monitor 命令可以显示很多输出。使用 grep 或其他工具来过滤输出。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat