ouc*_*cil 5 networking traffic logging accounting 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
Run Code Online (Sandbox Code Playgroud)
我正在使用stateful objects
(命名计数器)分别对来自 IPv4 和 IPv6 地址的所有流量求和,命名为os-traffic-4
和os-traffic-6
。然后我可以使用命令行来获取这些统计信息nft list counter stats os-traffic-6
。
我的问题是:
这些统计信息存储在哪里,我在任何地方的日志中都没有看到它们,并且在任何文档中都找不到参考?
这些统计数据在机器重新启动后会持续存在还是计数器会重置?
如果它们确实重置,我如何在启动时恢复它们?我相信在使用时可以包含计数器值,add rule... packets 1234 bytes 123456
但是如何为命名计数器执行此操作以及... #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
Run Code Online (Sandbox Code Playgroud)
# /var/lib/nftables.state
add counter stats os-traffic-4
add counter stats os-traffic-6
Run Code Online (Sandbox Code Playgroud)
# /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
Run Code Online (Sandbox Code Playgroud)
编辑:应阻止该systemctl reload nftables.service
命令以使自动计数器存储正常工作。因此,需要部署一个附加文件:
# /etc/systemd/system/nftables.service.d/block-systemctl-reload.conf
[Service]
ExecReload=
Run Code Online (Sandbox Code Playgroud)