Назад | Перейти на главную страницу

Где регистрируются / хранятся счетчики nftables и как долго они сохраняются?

Я пытаюсь отслеживать общие данные, передаваемые с определенного набора 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.

Мои вопросы:

  1. Где хранится эта статистика, я нигде не вижу ее в журнале и не могу найти ссылку ни в одной документации?

  2. Будет ли эта статистика сохраняться после перезагрузки машины или счетчики сбрасываются?

  3. Если они сбрасываются, как мне восстановить их во время загрузки? Я считаю, что можно включить значения счетчиков при использовании 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=