Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

6.5. nftables コマンドにおける決定マップの使用

ディクショナリーとしても知られている決定マップにより、nft は一致基準をアクションにマッピングすることで、パケット情報に基づいてアクションを実行できます。

6.5.1. nftables での匿名マップの使用

匿名マップは、ルールで直接使用する { match_criteria : action } ステートメントです。ステートメントには、複数のコンマ区切りマッピングを含めることができます。
匿名マップの欠点は、マップを変更する場合には、ルールを置き換える必要があることです。動的なソリューションの場合は、「nftables での名前付きマップの使用」 の説明に従って名前付きマップを使用します。
この例では、匿名マップを使用して、IPv4 プロトコルおよび IPv6 プロトコルの TCP パケットと UDP パケットの両方を別のチェーンにルーティングし、着信 TCP パケットと UDP パケットを個別にカウントする方法を説明します。

手順6.15 nftables での匿名マップの使用

  1. example_table を作成します。
    # nft add table inet example_table
  2. example_table に tcp_packets チェーンを作成します。
    # nft add chain inet example_table tcp_packets
  3. このチェーンのトラフィックをカウントする tcp_packets にルールを追加します。
    # nft add rule inet example_table tcp_packets counter
  4. example_table に udp_packets チェーンを作成します。
    # nft add chain inet example_table udp_packets
  5. このチェーンのトラフィックをカウントする udp_packets にルールを追加します。
    # nft add rule inet example_table udp_packets counter
  6. 着信トラフィックのチェーンを作成します。たとえば、example_table に、着信トラフィックをフィルタリングする incoming_traffic という名前のチェーンを作成するには、次のコマンドを実行します。
    # nft add chain inet example_table incoming_traffic { type filter hook input priority 0 \; }
  7. 匿名マップを持つルールを incoming_traffic に追加します
    # nft add rule inet example_table incoming_traffic ip protocol vmap { tcp : jump tcp_packets, udp : jump udp_packets }
    匿名マップはパケットを区別し、プロトコルに基づいて別のカウンターチェーンに送信します。
  8. トラフィックカウンターを一覧表示するには、example_table を表示します。
    # nft list table inet example_table
    table inet example_table {
      chain tcp_packets {
        counter packets 36379 bytes 2103816
      }
    
      chain udp_packets {
        counter packets 10 bytes 1559
      }
    
      chain incoming_traffic {
        type filter hook input priority filter; policy accept;
        ip protocol vmap { tcp : jump tcp_packets, udp : jump udp_packets }
      }
    }
    
    tcp_packets チェーンおよび udp_packets チェーンのカウンターは、受信パケットとバイトの両方を表示します。

このページには機械翻訳が使用されている場合があります (詳細はこちら)。