カーネル レベルは、パケットからのデータの抽出、データ操作の実行、およびフロー制御の基本機能を提供する、プロトコルに依存しない汎用インターフェイスのみを提供します。 フィルタリング ロジック自体とプロトコル固有のハンドラーはユーザー空間でバイトコードにコンパイルされ、その後、このバイトコードは Netlink インターフェイスを使用してカーネルにロードされ、BPF (Berkeley Packet Filters) を思わせる特別な仮想マシンで実行されます。 このアプローチにより、カーネル レベルで実行されるフィルタリング コードのサイズを大幅に削減し、プロトコルを操作するための解析ルールとロジックのすべての機能をユーザー空間に移動できます。
主な革新:
- 時間によるパケットのマッチングのサポート。 ルールがトリガーされる時間と日付の両方の範囲を定義し、個々の曜日にトリガーを構成できます。 また、エポカルタイムを秒単位で表示するための新しいオプション「-T」も追加されました。
メタタイム \»2019-12-24 16:00\" — \»2020-01-02 7:00\"
メタアワー「17:00」~「19:00」
メタデー「金曜日」 - SELinux マーク (secmark) の回復と保存のサポート。
ct 秒マーク セット メタ 秒マーク
メタ secmark セット ct secmark - synproxy マップ リストのサポートにより、バックエンドごとに複数のルールを定義できます。
テーブル IP foo {
シンプロキシ https-synproxy {
ミリ秒 1460
wスケール7
タイムスタンプサックパーマ
}synproxy 他の synproxy {
ミリ秒 1460
wスケール5
}チェーンプレ {
タイプ フィルタ フック プリルーティング優先度 raw。 ポリシーを受け入れます。
tcp dport 8888 tcp フラグ syn notrack
}チェーンバー{
タイプフィルターフックフォワード優先度フィルター。 ポリシーを受け入れます。
ct 状態が無効、追跡されていない synproxy 名 ip maddr マップ { 192.168.1.0/24 : “https-synproxy”, 192.168.2.0/24 : “other-synproxy” }
}
} - パケット処理ルールからセット要素を動的に削除する機能。
nft ルールの追加 ... @set5 { ip6 saddr を削除します。 ip6パパ}
- ネットワーク ブリッジ インターフェイスのメタデータで定義された ID とプロトコルによる VLAN マッピングのサポート。
メタ IBRPID 100
メタ irvproto vlan - ルールを表示するときにセットの要素を除外するオプション「-t」(「--terse」)。 「nft -t list ruleset」を実行すると、次のように出力されます。
テーブル IP x {
セットy {
ipv4_addr と入力します
}
}そして「nftリストルールセット」を使うと
テーブル IP x {
セットy {
ipv4_addr と入力します
要素 = { 192.168.10.2、192.168.20.1、
192.168.4.4、192.168.2.34 }
}
} - netdev チェーンで複数のデバイスを指定して (カーネル 5.5 でのみ機能)、共通のフィルタリング ルールを組み合わせる機能。
テーブル netdev x を追加
チェーンを追加 netdev xy { \
タイプフィルターフック入力デバイス = { eth0, eth1 } 優先度 0;
} - データ型の説明を追加する機能。
#nft は ipv4_addr を記述します
データタイプ ipv4_addr (IPv4 アドレス) (ベースタイプ整数)、32 ビット - libreadline の代わりに linenoise ライブラリを使用して CLI インターフェイスを構築する機能。
./configure --with-cli=linenoise
出所: オープンネット.ru