オプション1

オプション1

Linux ベースのルーター (Debian ディストリビューション) に多数の NIC があるとします。特定の NIC のオープン接続の数を出力するにはどうすればよいでしょうか? (回避策は許容される回答です)

答え1

オプション1

netstat | awk '$4 ~ /xxx.xxx.xxx.xxx/ { ++count } END { print count }'

どこxxx.xxx.xxx.xxxNIC の IP アドレスです。

  • netstat開いている接続をすべて見つけます
  • awkNICのIPアドレスと一致する
    • $4awk4列目を見ることになる
    • { ++count } END { print count }awk一致が見つかるたびにカウントアップするように指示します。完了したら、最終カウントを出力します。

オプション2

netstat | grep xxx.xxx.xxx.xxx -c

どこxxx.xxx.xxx.xxxNIC の IP アドレスです。

  • netstat開いている接続をすべて見つけます
  • grepNICのIPアドレスと一致する
    • -cgrep一致した数を印刷するのではなく、カウントするように要求します。

オプション 1 には、どこでもなくローカル アドレス フィールドのみに一致するという利点があります。オプション 2 では、リモート アドレスがローカルホストを指すオープン接続がある場合、カウントが 2 倍になる可能性があります。

答え2

できません。基本的な IP ルーターは、IP 層のみを参照して、ステートレスにデータグラムを転送するだけです。エンドポイントではない接続については何も知りません。

SPI ファイアウォールや NAT ゲートウェイの場合は話が別です。

答え3

ルーターは接続を追跡しません。ファイアウォールに問い合わせる必要があります。

Linux ファイアウォールはステートフルな「接続」追跡をサポートしていますが、必ずしもデフォルトでアクティブになっているわけではありません。もし次のいずれかに該当します:

  • -m stateまたはを使用するiptablesルール-m conntrack
  • または、 を使用するnftablesルールct state
  • またはiptables/nftables NATテーブル内の任意のルール(例:nat/preroutingチェーン)

ファイアウォールの conntrack システムはアクティブであり、次のコマンドを使用してその「状態テーブル」を確認できます。

conntrack -L

ただし、これはファイアウォール (ルータではない) によって実行されるため、状態は特定のインターフェースとは関係がなく、L3/L4 アドレス指定のみを考慮します。

関連情報