Red Hat Training

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

6.8. nftables ルールのデバッグ

nftables フレームワークは、管理者がルールをデバッグし、パケットが一致するかどうかを確認するためのさまざまなオプションを提供します。本セクションでは、3 つのオプションを説明します。

6.8.1. カウンターによるルールの作成

ルールが一致しているかどうかを確認するには、カウンターを使用できます。本セクションでは、カウンターを使用して新しいルールを作成する方法を説明します。
既存のルールにカウンターを追加する手順は、「既存のルールへのカウンターの追加」を参照してください。

前提条件

  • ルールを追加するチェーンが存在する。

手順6.21 カウンターによるルールの作成

  1. counter パラメーターを使用して新しいルールをチェーンに追加します。以下の例では、ポート 22 で TCP トラフィックを許可し、このルールに一致するパケットとトラフィックをカウントするカウンターを使用するルールを追加します。
    # nft add rule inet example_table example_chain tcp dport 22 counter accept
  2. カウンター値を表示するには、次のコマンドを実行します。
    # nft list ruleset
    table inet example_table {
      chain example_chain {
        type filter hook input priority filter; policy accept;
        tcp dport ssh counter packets 6872 bytes 105448565 accept
      }
    }
    

6.8.2. 既存のルールへのカウンターの追加

ルールが一致しているかどうかを確認するには、カウンターを使用できます。本セクションでは、既存のルールにカウンターを追加する方法を説明します。
カウンターで新しいルールを追加する手順は、「カウンターによるルールの作成」を参照してください。

前提条件

  • カウンターを追加するルールがある。

手順6.22 既存のルールへのカウンターの追加

  1. チェーンのルール (ハンドルを含む) を表示します。
    # nft --handle list chain inet example_table example_chain
    table inet example_table {
      chain example_chain { # handle 1
        type filter hook input priority filter; policy accept;
        tcp dport ssh accept # handle 4
      }
    }
    
  2. ルールの代わりに counter パラメーターを使用して カウンター を追加します。以下の例は、前の手順で表示したルールの代わりに、カウンターを追加します。
    # nft replace rule inet example_table example_chain handle 4 tcp dport 22 counter accept
  3. カウンター値を表示するには、次のコマンドを実行します。
    # nft list ruleset
    table inet example_table {
      chain example_chain {
        type filter hook input priority filter; policy accept;
        tcp dport ssh counter packets 6872 bytes 105448565 accept
      }
    }
    

6.8.3. 既存のルールに一致するパケットの監視

nftables のトレース機能と nft monitor コマンドを組み合わせると、管理者はルールに一致するパケットを表示できます。この手順では、ルールのトレースと、このルールに一致するパケットの監視を有効にする方法を説明します。

前提条件

  • カウンターを追加するルールがある。

手順6.23 既存のルールに一致するパケットの監視

  1. チェーンのルール (ハンドルを含む) を表示します。
    # nft --handle list chain inet example_table example_chain
    table inet example_table {
      chain example_chain { # handle 1
        type filter hook input priority filter; policy accept;
        tcp dport ssh accept # handle 4
      }
    }
    
  2. ルールを置き換えてトレース機能を追加しますが、meta nftrace set 1 パラメーターを使用します。以下の例は、前の手順で表示したルールの代わりに、トレースを有効にします。
    # nft replace rule inet example_table example_chain handle 4 tcp dport 22 meta nftrace set 1 accept
  3. nft monitor コマンドを使用してトレースを表示します。以下の例は、コマンドの出力をフィルターリングして、inet example_table example_chain を含むエントリーのみを表示します。
    # nft monitor | grep "inet example_table example_chain"
    trace id 3c5eb15e inet example_table example_chain packet: iif "enp1s0" ether saddr 52:54:00:17:ff:e4 ether daddr 52:54:00:72:2f:6e ip saddr 192.0.2.1 ip daddr 192.0.2.2 ip dscp cs0 ip ecn not-ect ip ttl 64 ip id 49710 ip protocol tcp ip length 60 tcp sport 56728 tcp dport ssh tcp flags == syn tcp window 64240
    trace id 3c5eb15e inet example_table example_chain rule tcp dport ssh nftrace set 1 accept (verdict accept)
        ...
    
    警告
    nft monitor コマンドは、トレースが有効なルールの数と、一致するトラフィックの量に応じて、多くの出力を表示できます。grep などのユーティリティーを使用して出力をフィルターリングします。