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

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

カーネル レベルは、パケットからのデータの抽出、データ操作の実行、およびフロー制御の基本機能を提供する、プロトコルに依存しない汎用インターフェイスのみを提供します。
フィルタリング ロジック自体とプロトコル固有のハンドラーはユーザー空間でバイトコードにコンパイルされ、その後、このバイトコードは Netlink インターフェイスを使用してカーネルにロードされ、BPF (Berkeley Packet Filters) を思わせる特別な仮想マシンで実行されます。このアプローチにより、カーネル レベルで実行されるフィルタリング コードのサイズを大幅に削減し、プロトコルを操作するための解析ルールとロジックのすべての機能をユーザー空間に移動できます。

主な革新:

  • IPsec のサポート。パケット、IPsec 要求 ID、および SPI (セキュリティ パラメーター インデックス) タグに基づいてトンネル アドレスを照合できます。例えば、

    ... IP SDDR 192.168.1.0/24 の ipsec
    ... spi 1-65536 の ipsec

    経路がIPsecトンネルを通過しているかどうかも確認できます。たとえば、IPSec を経由しないトラフィックをブロックするには、次のようにします。

    …フィルタ出力 rt ipsec 欠落ドロップ

  • IGMP (インターネット グループ管理プロトコル) のサポート。たとえば、ルールを使用して、受信した IGMP グループ メンバーシップ要求を破棄できます。

    NFT 追加ルール netdev foo bar igmp タイプ メンバーシップ クエリ カウンター ドロップ

  • 変数を使用して遷移チェーン (jump / goto) を定義する可能性。例えば:

    dest = ber を定義します
    ルールを追加 ip foo bar ジャンプ $dest

  • ヘッダーの TTL 値に基づいてオペレーティング システム (OS フィンガープリント) を識別するためのマスクのサポート。たとえば、送信側 OS に基づいてパケットをマークするには、次のコマンドを使用できます。

    ... メタ マーク セット osf ttl スキップ ネーム マップ { "Linux" : 0x1,
    「Windows」: 0x2、
    「MacOS」: 0x3、
    "不明" : 0x0 }
    ... OSF TTL スキップ バージョン "Linux:4.20"

  • 送信者の ARP アドレスとターゲット システムの IPv4 アドレスを照合する機能。たとえば、アドレス 192.168.2.1 から送信される ARP パケットのカウンタを増やすには、次のルールを使用できます。

    テーブル arp x {
    チェーン y {
    タイプフィルターフック入力優先度フィルター。ポリシーを受け入れます。
    arp sawdr ip 192.168.2.1 カウンタ パケット 1 バイト 46
    }
    }

  • プロキシ (tproxy) を介したリクエストの透過的な転送のサポート。たとえば、ポート 80 への呼び出しをプロキシ ポート 8080 にリダイレクトするには、次のようにします。

    テーブル IP x {
    チェーン y {
    タイプ フィルター フック プリルーティング優先度 -150;ポリシーを受け入れます。
    tcp dport 80 tproxy から:8080
    }
    }

  • SO_MARK モードでの setsockopt() を介して設定マークをさらに取得できる機能を備えたソケットのマーキングのサポート。例えば:

    テーブル inet x {
    チェーン y {
    タイプ フィルター フック プリルーティング優先度 -150;ポリシーを受け入れます。
    tcp dport 8080 マーク セット ソケット マーク
    }
    }

  • チェーンの優先テキスト名の指定のサポート。例えば:

    nft add chain ip x raw { タイプ フィルタ フック プレルーティング優先順位 raw; }
    nft add chain ip x filter { type フィルタ フック プレルーティング優先度フィルタ; }
    nft add chain ip x filter_later { type フィルターフック プレルーティング優先フィルター + 10; }

  • SELinux タグ (Secmark) のサポート。たとえば、SELinux コンテキストで「sshtag」タグを定義するには、次のコマンドを実行できます。

    nft secmark inet フィルター sshtag "system_u:object_r:ssh_server_packet_t:s0" を追加

    そして、ルール内でこのラベルを使用します。

    nft ルールの追加 inet フィルター入力 tcp dport 22 メタ secmark セット「sshtag」

    nft add map inet filter secmapping { type inet_service : secmark; }
    nft 要素の追加 inet フィルター secmapping { 22 : "sshtag" }
    nft ルールの追加 inet フィルター入力メタ secmark セット tcp dport マップ @secmapping

  • /etc/services ファイルで定義されているように、プロトコルに割り当てられたポートをテキスト形式で指定する機能。例えば:

    nft ルール xy tcp dport "ssh" を追加
    NFT リスト ルールセット -l
    テーブル x {
    チェーン y {
    ...
    tcp dポート「ssh」
    }
    }

  • ネットワークインターフェイスのタイプを確認する機能。例えば:

    ルール inet raw プレルーティング メタ iifkind "vrf" を追加します。

  • 「動的」フラグを明示的に指定することにより、セットの内容を動的に更新するためのサポートが改善されました。たとえば、セット「s」を更新して送信元アドレスを追加し、30 秒間パケットがない場合にエントリをリセットするには、次のようにします。

    テーブルxを追加
    add set xs { type ipv4_addr;サイズ128。タイムアウトは 30 秒。動的フラグ。 }
    add chain xy { type フィルタフック入力優先度 0; }
    ルール xy 更新 @s { ip addr } を追加します

  • 別のタイムアウト条件を設定する機能。たとえば、ポート 8888 に到着するパケットのデフォルトのタイムアウトをオーバーライドするには、次のように指定できます。

    テーブル IP フィルター {
    ct タイムアウト アグレッシブ tcp {
    プロトコルtcp;
    l3プロトIP;
    ポリシー = {確立: 100、close_wait: 4、close: 4}
    }
    連鎖出力 {
    ...
    tcp dport 8888 ct タイムアウト セット "aggressive-tcp"
    }
    }

  • inet ファミリの NAT サポート:

    テーブル inet nat {
    ...
    ip6 お父さんが死んだ::2::1 dnat から死んだ:2::99
    }

  • タイプミスエラーレポートの改善:

    NFT 追加チェーン フィルター テスト

    エラー: そのようなファイルまたはディレクトリはありません。ファミリ IP のテーブル「フィルター」のことですか?
    チェーンフィルターテストを追加
    ^^^^^^

  • インターフェイス名をセットで指定する機能:

    set sc {
    「inet_service」と入力します。 ifname
    要素 = { "ssh" . "eth0" }
    }

  • 更新されたフローテーブル ルール構文:

    nft テーブル x を追加
    nft add flowtable x ft {フック入力優先度 0;デバイス = { eth0、wlan0 }; }
    ...
    nft add ルール x フォワード ip プロトコル { tcp, udp } flow add @ft

  • JSON サポートが改善されました。

出所: オープンネット.ru

コメントを追加します