nftを使用してSaddrリストを動的に作成し、各パケット/バイト数を計算する簡単な方法があるかどうかを調べたいと思います。私は流れに制限を加えたくありません。流れを測定するだけです。
私はダイナセットを構築し、見つかったSaddrsをここに追加する方法を知っています。ただし、各Saddrのカウンタを追加できる構文が見つかりません。
コレクションにSaddrsを追加するルールにカウンタを追加する方法を知っています。 (私が望むものではありませんが)
私はSaddrという個人の明示的なカウンターを作成して使用する方法を知っています。
私はすでに持っている知識を使ってダイナセットを作ることができることを知っています。これを確認してから、Saddrごとに別々のルールを作成しますが、これを行うためのより良い方法があるはずです。
リストされている場合は、数が利用可能であることを示す接続制限コードの例をたくさん見ていますが、それらのどれも直接適用できるようには見えません(そして、どれも私のコンピュータでnft構文チェックに合格しないようです)。
私はRaspberry Pi 4(Raspbian Buster)、カーネルバージョン5.4.51、nftables v0.9.0(Fearless Fosdick)で動作しています。
私はnft完全初心者です。
答え1
コレクションでのカウンターの使用に関するいくつかの改善点が追加されました。nftablesバージョン後ろに0.9.0。
0.9.1src:ステートフル式をコレクションとマップに統合します。:
次の例は、方法を示しています。パケットパスからセットを埋める 宛先IPアドレスを使用して、各項目にはカウンターがあります。。
[...]カウンターは状態保存オブジェクト。
0.9.4src:要素カウンタの復元をサポート:
このパッチでは、次のことができます。動的セットからカウンターを復元する:
0.9.4src:コレクション定義のカウンターサポート:
このパッチを使用すると、コレクション内の各要素のカウンターをオンにできます。
目的の用途には0.9.1が必要です。これらのカウンタを保存して以前の値に復元するには(たとえば、再起動中)、0.9.4を使用する必要があります。 0.9.4では、コレクションを事前入力するときに各要素にカウンターが必要な単純化された構文も許可されています。
だから非常に基本的な例数みんなソースアドレスを渡してこのリンクの例に従い、代わりに前の構文をtype
保持する場合は、typeof
次のものを使用できます(少なくともnftables0.9.1):
table ip accounting
delete table ip accounting
table ip accounting {
set inputcounters {
type ipv4_addr # with 0.9.4 could be replaced with: typeof ip saddr
# counter # optional, requires 0.9.4
flags dynamic # appeared in 0.9.1
# timeout 7d # consider using a timeout, possibly shorter, to avoid overflowing the set
size 65535 # or a bigger size
}
chain input {
type filter hook input priority 0; policy accept;
add @inputcounters { ip saddr counter } # 0.9.1 mandatory. Add new element *with counter* if not already present
ip saddr @inputcounters # match element so increment its counter
}
}
最適化があるかもしれません。おそらくct state new
キャッシュされ、コレクションに冗長アドレスを追加するよりも高速です(結果的には機能しません)。など。
Debian のバスターバックポートは現在、以下を提供しています。nftables0.9.6。
自分で試してみることもできます。フランケンデビアン)またはDebian形式のソースから再コンパイルする方が良いでしょう。 Debian で直接使用する方が簡単です。駆逐艦バックポートなぜなら彼らはすでに適しているからです。バスターターゲット。たとえば、Debianの例に従い、適用することで単純なバックポートの作成。
複数のステップを含めることができます(例:最初の「バックポート」libnftnl以前はソースコードが必要でした。nftables)これはもちろん、多くの開発パッケージのインストールをトリガします(コンテナや他のシステムからインストールする方が良いです)、これはこの回答の範囲外です。