nftables パケット フィルター 0.9.5 リリース

公開済み パケットフィルター解除 nftables 0.9.5、IPv6、IPv4、ARP、およびネットワーク ブリッジのパケット フィルタリング インターフェイスを統合することにより、iptables、ip6table、a​​rptables、ebtables の代替として開発されています。 nftables パッケージには、ユーザー空間で実行されるパケット フィルター コンポーネントが含まれていますが、カーネル レベルの作業は、リリース 3.13 以降 Linux カーネルの一部となっている nf_tables サブシステムによって提供されます。 nftables 0.9.5 リリースが機能するために必要な変更はカーネルに含まれています Linux 5.7.

カーネル レベルは、パケットからのデータの抽出、データ操作の実行、およびフロー制御の基本機能を提供する、プロトコルに依存しない汎用インターフェイスのみを提供します。 フィルタリング ルールとプロトコル固有のハンドラはユーザー空間でバイトコードにコンパイルされ、その後、このバイトコードは 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

コメントを追加します