Я пытаюсь отслеживать общие данные, передаваемые с определенного набора IP-адресов (как IPv4, так и IPv6), используя nftables
с названным 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
я использую 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
# /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=