Linux でネットワークインターフェイスがプロミスキャスモードかどうかを確認する方法

LinuxLinuxBeginner
今すぐ練習

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、Linux のネットワークインターフェイスがプロミスキャスモードで動作しているかどうかを確認する方法を学びます。プロミスキャスモードでは、ネットワークインターフェイスが宛先アドレスに関係なく受信したすべてのネットワークトラフィックをキャプチャできるため、ネットワークの監視と分析に不可欠です。

プロミスキャスモードの状態を判断するための 3 つの異なる方法を探索します。具体的には、ip link show コマンドを使用してインターフェイスのフラグを調べる方法、tcpdump コマンドを利用してパケットキャプチャの動作を観察する方法、および /sys/class/net ファイルシステム内のインターフェイスの設定を調べる方法です。これらの手順を完了することで、Linux 環境でネットワークインターフェイスの設定を検証する実践的なスキルを身につけることができます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux(("Linux")) -.-> linux/PackagesandSoftwaresGroup(["Packages and Softwares"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/RemoteAccessandNetworkingGroup -.-> linux/ifconfig("Network Configuring") linux/RemoteAccessandNetworkingGroup -.-> linux/ping("Network Testing") linux/RemoteAccessandNetworkingGroup -.-> linux/ip("IP Managing") linux/PackagesandSoftwaresGroup -.-> linux/curl("URL Data Transferring") linux/PackagesandSoftwaresGroup -.-> linux/apt("Package Handling") subgraph Lab Skills linux/ls -.-> lab-558736{{"Linux でネットワークインターフェイスがプロミスキャスモードかどうかを確認する方法"}} linux/cat -.-> lab-558736{{"Linux でネットワークインターフェイスがプロミスキャスモードかどうかを確認する方法"}} linux/cd -.-> lab-558736{{"Linux でネットワークインターフェイスがプロミスキャスモードかどうかを確認する方法"}} linux/ifconfig -.-> lab-558736{{"Linux でネットワークインターフェイスがプロミスキャスモードかどうかを確認する方法"}} linux/ping -.-> lab-558736{{"Linux でネットワークインターフェイスがプロミスキャスモードかどうかを確認する方法"}} linux/ip -.-> lab-558736{{"Linux でネットワークインターフェイスがプロミスキャスモードかどうかを確認する方法"}} linux/curl -.-> lab-558736{{"Linux でネットワークインターフェイスがプロミスキャスモードかどうかを確認する方法"}} linux/apt -.-> lab-558736{{"Linux でネットワークインターフェイスがプロミスキャスモードかどうかを確認する方法"}} end

このステップでは、ip link show コマンドを使用してネットワークインターフェイスのプロミスキャスモードの状態を確認する方法を学びます。プロミスキャスモードは、ネットワークインターフェイスコントローラ (NIC) の設定で、コントローラが特定の宛先として指定されたフレームだけでなく、受信したすべてのトラフィックを中央処理装置 (CPU) に渡すことができます。これは、ネットワークの監視と分析によく使用されます。

まず、まだ開いていない場合はターミナルを開きます。デスクトップの左側にある Xfce Terminal アイコンをクリックすることで、ターミナルを開くことができます。

では、ip link show コマンドを使用してネットワークインターフェイスの状態を表示しましょう。以下のコマンドを入力し、Enter キーを押します。

ip link show

次のような出力が表示されます。

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff

この環境では、通常 eth0 という名前のメインのネットワークインターフェイスに対応する行を探します。山括弧 (<>) 内のフラグを調べます。これらのフラグに PROMISC が含まれている場合、そのインターフェイスはプロミスキャスモードになっています。上記の例の出力では、PROMISC が含まれていないため、eth0 はプロミスキャスモードではありません。

ip link show コマンドは、Linux でネットワークインターフェイスの設定を調べるための基本的なツールです。さまざまなフラグや状態を含むこのコマンドの出力を理解することは、ネットワークのトラブルシューティングと管理に不可欠です。

Continue をクリックして次のステップに進みます。

tcpdump -i で確認する

このステップでは、tcpdump コマンドを使用してネットワークインターフェイスのプロミスキャスモードの状態を確認します。tcpdump は強力なコマンドラインパケットアナライザです。ネットワークを介して送信または受信されるパケットをキャプチャして表示することができます。インターフェイスがプロミスキャスモードになっている場合、tcpdump はネットワークセグメント上のすべてのパケットを宛先アドレスに関係なくキャプチャすることができます。

まず、tcpdump をインストールする必要があります。前の実験で htop をインストールしたのと同じように、sudo apt install コマンドを使用します。

sudo apt update
sudo apt install tcpdump -y

-y フラグは、インストール中のすべてのプロンプトに自動的に「はい」と回答します。

では、tcpdump を使用して eth0 インターフェイスを監視しましょう。-i オプションを使用してインターフェイスを指定し、-n オプションを使用して DNS ルックアップを防止します。これにより、出力がすっきりします。

sudo tcpdump -i eth0 -n

tcpdumpeth0 を監視していることを示す出力が表示されます。

tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type ETHERNET (100Mbps), snapshot length 262144 bytes

インターフェイスがプロミスキャスモードになっている場合、tcpdump は見つけたすべてのトラフィックをキャプチャします。プロミスキャスモードでない場合、インターフェイスの MAC アドレス宛のトラフィックまたはブロードキャスト/マルチキャストトラフィックのみをキャプチャします。

いくつかのトラフィックを生成するには、別のターミナルウィンドウを開くか (または現在のターミナルの新しいタブを開いて)、例えば次のようにウェブサイトに ping を送信してみます。

ping -c 4 google.com

tcpdump のターミナルの出力を観察します。パケットがキャプチャされているのが見えるはずです。

重要: tcpdump を停止するには、tcpdump が実行されているターミナルで Ctrl + C を押します。

tcpdump 自体は初期出力に「プロミスキャスモード」と明示的に表示されませんが、インターフェイス宛ではないトラフィックをキャプチャできることは、プロミスキャスモードが有効かどうかを確認する実用的な方法です。自分のシステムの通信に関係のないトラフィック (ネットワークセグメント上の他のデバイスからの ARP 要求など) が見られる場合、それはプロミスキャスモードの強力な指標です。

Continue をクリックして次に進みます。

/sys/class/net でインターフェイスを調べる

このステップでは、/sys ファイルシステムを探索して、ネットワークインターフェイスに関する情報(プロミスキャスモードの状態を含む)を見つけます。/sys ファイルシステムは、Linux の仮想ファイルシステムで、カーネルやデバイスドライバとやり取りする方法を提供します。これは、ハードウェアデバイスとその設定に関する情報を公開します。

/sys 内のネットワークインターフェイスディレクトリに移動します。cd コマンドを使用して現在のディレクトリを変更します。

cd /sys/class/net/

次に、ls コマンドを使用してこのディレクトリの内容を表示します。

ls

ip link show の出力と同様に、ネットワークインターフェイスのリストが表示されます。eth0lo が表示されるはずです。

eth0  lo

ここでの各ディレクトリは、ネットワークインターフェイスに対応しています。eth0 のディレクトリの中身を見てみましょう。

cd eth0

次に、eth0 ディレクトリ内のファイルを表示します。

ls

eth0 インターフェイスに関する情報が含まれた多くのファイルとディレクトリが表示されます。私たちが関心を持っているのは、プロミスキャスモードの状態を示すファイルです。この情報は、デバイスのフラグや状態に関連するファイルに含まれることが多いです。

正確なファイル名はカーネルバージョンによって多少異なる場合がありますが、この情報を見つける一般的な場所は、フラグや状態情報が含まれている可能性のあるファイルの内容を調べることです。

状態やフラグを示す可能性のあるファイルの内容を読み取ってみましょう。cat コマンドを使用してファイルの内容を表示します。たとえば、flags という名前のファイルやそれに似たものを探すことができます。

cat flags

cat flags コマンドの出力は 16 進数になります。この数値は、さまざまなインターフェイスフラグのビットマスクを表しています。これを解釈するには、通常、特定のフラグとそれに対応するビット値についてカーネルドキュメントを参照する必要があります。ただし、特にプロミスキャスモードを確認する場合は、/sys 内でより直接的な方法があることがよくあります。

/sys 内でプロミスキャスモードを確認するより信頼性の高い方法は、プロミスキャスフラグのカウントを明示的に示すファイルを探すことです。このファイルは通常 flags などという名前で、その内容を正しく解釈すると、プロミスキャスフラグが設定されているかどうかがわかります。

まだいない場合は、/sys/class/net/eth0 ディレクトリに戻りましょう。

cd /sys/class/net/eth0

では、もう一度 flags ファイルを調べてみましょう。flags ファイルの 16 進数値は、さまざまなインターフェイスの状態を表しています。16 進数値を直接解釈するにはカーネルフラグの知識が必要ですが、ステップ 1 の ip link show 出力に PROMISC フラグが含まれていることは、プロミスキャスモードを確認するより使いやすい方法です。/sys ファイルシステムは、ip などのツールが使用する生のカーネルデータを提供します。

/sys 内で直接確認する場合は、通常、プロミスキャスカウントまたは状態を明示的に示すファイルを探します。ただし、この環境では、標準ツールを使用してプロミスキャスモードを確認する最も簡単な方法は、ステップ 1 で示したように ip link show を使用することです。/sys ファイルシステムは基盤となるデータを提供しますが、特定のカーネルドキュメントがないと解釈するのはより複雑になります。

このステップでは、/sys ファイルシステムがデバイス情報への低レベルアクセスを提供する方法を示しています。/sys 内の単一のファイルを介して直接プロミスキャスモードを確認することは複雑な場合がありますが、このファイルシステムを理解することは、高度な Linux システム分析にとって価値があります。

Continue をクリックしてこのステップを完了します。

まとめ

この実験では、ip link show コマンドを使用して、Linux のネットワークインターフェイスがプロミスキャスモードになっているかどうかを確認する方法を学びました。このコマンドはネットワークインターフェイスの設定を表示し、PROMISC フラグが存在することはプロミスキャスモードを示します。また、ネットワークトラフィックをキャプチャすることでプロミスキャスモードの状態を確認する別の方法として、tcpdump コマンドの使用を始めました。