web-dev-qa-db-ja.com

nftablesカウンターはどこにログ/保存され、どこに持続しますか?

ルールでnftablesという名前のcounterを使用して、特定のIPアドレスのセット(IPv4とIPv6の両方)から送信されるデータの合計を追跡しようとしています。私の目標は、1か月の間にこの合計を追跡できるようにして、使用量に応じて請求できるようにすることです。

関連するルールは次のようになります。

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 ...これらの数値はどこから取得できますか?

助けてくれてありがとう!

2
oucil

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=