nftables 计数器记录/存储在哪里,以及它们会持续多长时间?

nftables 计数器记录/存储在哪里,以及它们会持续多长时间?

nftables我尝试使用规则中的名称来跟踪从一组特定 IP 地址(IPv4 和 IPv6)传输的总数据counter。我的目标是能够在一个日历月内跟踪此总数,以便根据使用情况计费。

相关规则如下:

add table stats
add counter stats os-traffic-4
add counter stats os-traffic-6
add chain inet stats INPUT { type filter hook input priority 0; }
add rule ip  stats INPUT ip  saddr 192.168.123.123 counter name os-traffic-4
add rule ip  stats INPUT ip  saddr 192.168.123.234 counter name os-traffic-4
add rule ip  stats INPUT ip  saddr 192.168.123.345 counter name os-traffic-4
add rule ip6 stats INPUT ip6 saddr 1234:1234:1234:1234:1234:1234:1234:1234 counter name os-traffic-6
add rule ip6 stats INPUT ip6 saddr 1234:1234:1234:1234:1234:1234:1234:2345 counter name os-traffic-6
add rule ip6 stats INPUT ip6 saddr 1234:1234:1234:1234:1234:1234:1234:3456 counter name os-traffic-6

我使用(命名计数器)分别对来自 IPv4 和 IPv6 地址(名为和stateful objects)的所有流量进行汇总。然后我可以使用命令行获取这些统计数据。os-traffic-4os-traffic-6nft list counter stats os-traffic-6

我的问题是:

  1. 这些统计数据存储在哪里,我在任何日志中都看不到它们,也没有在任何文档中找到参考?

  2. 这些统计数据在机器重启后还会保留吗?或者计数器会重置吗?

  3. 如果它们确实重置了,我该如何在启动时恢复它们?我相信在使用时可以包含计数器值,add rule... packets 1234 bytes 123456但我该如何为命名计数器执行此操作,还有……#1……我从哪里获得这些数字?

谢谢你的帮助!

答案1

我认为nftables计数器仅存储在内核内存中,类似于表和规则。它们可能不会在重启后保留。

我建议永久记录计数器值如下:

  • 在单独的文件中声明您的计数器并将其包含在主nftables配置文件中。
  • 使用当前值更新计数器声明文件。

根据您使用的发行版,您可能有一个nftables.service从配置文件加载规则的单元。如果是这样,您可以设计一个依赖于nftables.service并将计数器值写入状态文件的服务。例如,在 Arch Linux 中,旨在nftables.service从加载防火墙规则/etc/nftables.conf,因此您可以定义这些配置文件:

# /etc/nftables.conf

add table stats

# Counter definitions go to '/var/lib/nftables.state'
include "/var/lib/nftables.state"

add chain inet stats INPUT { type filter hook input priority 0; }
add rule ip  stats INPUT ip  saddr 192.168.123.123 counter name os-traffic-4
add rule ip  stats INPUT ip  saddr 192.168.123.234 counter name os-traffic-4
add rule ip  stats INPUT ip  saddr 192.168.123.345 counter name os-traffic-4
add rule ip6 stats INPUT ip6 saddr 1234:1234:1234:1234:1234:1234:1234:1234 counter name os-traffic-6
add rule ip6 stats INPUT ip6 saddr 1234:1234:1234:1234:1234:1234:1234:2345 counter name os-traffic-6
add rule ip6 stats INPUT ip6 saddr 1234:1234:1234:1234:1234:1234:1234:3456 counter name os-traffic-6
# /var/lib/nftables.state

add counter stats os-traffic-4
add counter stats os-traffic-6
# /etc/systemd/system/nftables-persist-counters.service

[Unit]
BindsTo=nftables.service
After=nftables.service

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecStop=/bin/bash -c '/usr/bin/nft list counters > /var/lib/nftables.state'

[Install]
WantedBy=multi-user.target

编辑:必须阻止该systemctl reload nftables.service命令才能使自动计数器存储正常工作。因此,需要部署附加文件:

# /etc/systemd/system/nftables.service.d/block-systemctl-reload.conf

[Service]
ExecReload=

相关内容