カーネル レベルは、パケットからのデータの抽出、データ操作の実行、およびフロー制御の基本機能を提供する、プロトコルに依存しない汎用インターフェイスのみを提供します。 フィルタリング ルールとプロトコル固有のハンドラはユーザー空間でバイトコードにコンパイルされ、その後、このバイトコードは Netlink インターフェイスを使用してカーネルにロードされ、BPF (Berkeley Packet Filters) を思わせる特別な仮想マシンのカーネルで実行されます。 このアプローチにより、カーネル レベルで実行されるフィルタリング コードのサイズを大幅に削減し、プロトコルを操作するための解析ルールとロジックのすべての機能をユーザー空間に移動できます。
主な革新:
- セット要素に関連付けられたパケットおよびトラフィック カウンタのサポートがセットに追加されました。 カウンタは、「counter」キーワードを使用して有効にします。
テーブル IP x {
セットy {
IPサドルのタイプ
カウンタ
要素 = { 192.168.10.35、192.168.10.101、192.168.10.135 }
}チェーンz {
タイプフィルターフック出力優先度フィルター。 ポリシーを受け入れます。
IPパパ@y
}
} - カウンタの初期値を設定するには、たとえば再起動後に以前のカウンタを復元するには、コマンド「nft -f」を使用します。
# 猫のルールセット.nft
テーブル IP x {
セットy {
IPサドルのタイプ
カウンタ
要素 = { 192.168.10.35 カウンター パケット 1 バイト 84, 192.168.10.101 \
カウンタ p 192.168.10.135 カウンタ パケット 0 バイト 0 }
}チェーンz {
タイプフィルターフック出力優先度フィルター。 ポリシーを受け入れます。
IPパパ@y
}
}
# nft -f ルールセット.nft
#nft リスト ルールセット
テーブル IP x {
セットy {
IPサドルのタイプ
カウンタ
要素 = { 192.168.10.35 カウンター パケット 1 バイト 84, 192.168.10.101 \
カウンタ p 192.168.10.135 カウンタ パケット 0 バイト 0 }
}チェーンz {
タイプフィルターフック出力優先度フィルター。 ポリシーを受け入れます。
IPパパ@y
}
} - カウンターのサポートもフローテーブルに追加されました。
テーブル IP foo {
フローテーブルバー {
フックイングレス優先度 -100
デバイス = { eth0, eth1 }
カウンタ
}チェーンフォワード {
タイプフィルターフックフォワード優先度フィルター。
フロー追加@バーカウンター
}
}コマンド「conntrack -L」を使用してカウンターのリストを表示できます。
tcp 6 src=192.168.10.2 dst=10.0.1.2 スポーツ=47278 dポート=5201 パケット=9 バイト=608 \
src=10.0.1.2 dst=10.0.1.1 スポーツ=5201 dport=47278 パケット=8 バイト=428 [オフロード] マーク=0 \
secctx=null use=2 tcp 6 src=192.168.10.2 dst=10.0.1.2 sports=47280 dport=5201 \
パケット=1005763 バイト=44075714753 src=10.0.1.2 dst=10.0.1.1 スポーツ=5201 dport=47280 \
パケット=967505 バイト=50310268 [オフロード] マーク=0 secctx=null use=2 - 連結用のセット (連結、比較を簡略化するアドレスとポートの特定のバンドル) では、セットの要素の構成部分の要素のデータ型を決定する「typeof」ディレクティブを使用できます。
テーブル IP foo {
ホワイトリストを設定 {
IP サドルのタイプ。 tcp dポート
要素 = { 192.168.10.35 . 80、192.168.10.101。 80}
}チェーンバー{
タイプ フィルタ フック プレルーティング優先度フィルタ。 政策の中止。
ipパパ。 tcp dport @whitelist を受け入れる
}
} - typeof ディレクティブは、マップ リストの結合にも適用されるようになりました。
テーブル IP foo {
マップアドレス2マーク {
IP サドルのタイプ。 tcp dport : メタマーク
要素 = { 192.168.10.35 . 80:0x00000001、
192.168.10.135。 80 : 0x00000002 }
}チェーンバー{
タイプ フィルタ フック プレルーティング優先度フィルタ。 政策の中止。
メタ マーク セット ip パパ 。 tcp dport マップ @addr2mark を受け入れます
}
} - 匿名 (名前のない) セットでの範囲結合のサポートを追加しました。
#nft ルール inet フィルター入力 ip ddr を追加します。 tcp dポート\
{ 10.0.0.0/8 . 10 ~ 23、192.168.1.1 ~ 192.168.3.8。 80-443 } 受け入れる - ネットワーク ブリッジの処理時に 802.1q (VLAN) フラグを持つパケットを破棄する機能が提供されます。
# nft ルールブリッジ foo bar ether タイプ VLAN を TCP リセットで拒否追加
- TCP セッション識別子 (conntrack ID) による照合のサポートが追加されました。 conntrack ID を確認するには、「--output id」オプションを使用できます。
# conntrack -L —出力ID
udp 17 18 src=192.168.2.118 dst=192.168.2.1 スポーツ=36424 dポート=53 パケット=2 \
バイト=122 src=192.168.2.1 dst=192.168.2.118 スポーツ=53 dポート=36424 パケット=2 バイト=320 \
[確実] mark=0 use=1 id=2779986232# nft ルール foo bar ct id 2779986232 カウンターを追加します
出所: オープンネット.ru