サーバーの「誰が」何をしているのか?迷子にならないための「netstat」活用術
こんにちは!NOCの現場で、深夜の冷え切ったデータセンターのサーバーラックと格闘し続けて早十数年。今日も今日とで、ネットワークの海を漂うパケットたちの「迷子」を探し出しているエンジニアです。
インフラの世界に飛び込んだばかりの頃、皆さんはこんな不安に襲われたことはありませんか?
「サーバーに接続できない…」「なんか変な通信が走っている気がする…」
そんな時、私たちの頼れる相棒となるのが netstat コマンドです。
今日は、この netstat を使って、サーバーの中で「誰が(プロセス)」、「どの窓口(ポート)で」待ち構えているのかを突き止める、現場の定石を伝授します。
—
「ポート」はサーバーの郵便受け
まずはイメージしましょう。サーバー(PC)をひとつの大きな「ビル」だと考えてみてください。そのビルには、たくさんの「郵便受け(ポート)」があります。
- 80番の郵便受けには「Webブラウザからのお手紙」が届く。
- 22番の郵便受けには「遠隔操作(SSH)用のお手紙」が届く。
サーバーの中で動いているプログラムたちは、それぞれの担当の郵便受けの前に座り、「何か届いていないかな?」と監視しています。これが「リスニング(Listen)」の状態です。
しかし、もし「身に覚えのない郵便受け」の前で誰かが待ち構えていたら……? それは、ウイルスや不正なプログラムが勝手に部屋を借りているサインかもしれません。これを暴くのが、今日の主役です。
—
netstat で「誰が」を特定する
では、実際にコマンドを叩いてみましょう。現場で最もよく使うのが以下の組み合わせです。
# 現場で頻用する鉄板コマンド
sudo netstat -tulpn
このオプションたちの意味を、優しく解読していきますね。
-t(TCP): 郵便の種類(TCP)を確認します。-u(UDP): もうひとつの郵便の種類(UDP)も確認します。-l(Listening): 「今まさに待ち構えている」ものだけを表示します。-p(Program): ここが重要!「誰(PID/プログラム名)」がやっているかを表示します。-n(Numeric): 数字(IPアドレスやポート番号)をそのまま表示します。名前解決の待ち時間を省くための、現場の知恵です。
これを実行すると、ずらっとリストが出てきます。注目すべきは一番右側の PID/Program name という列です。
# 出力例
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1234/nginx
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 567/sshd
例えば、1234/nginx とあれば、「1234 という名前のIDを持つ、nginx というプログラムが、80番のポートを握っているんだな」と瞬時に理解できるわけです。
—
不正な動きを見つけたらどうする?
もし、心当たりのないプログラムが怪しいポートで待ち構えていたら、まずはその PID(先ほどの例でいう 1234 のような数字)を特定します。
次に、そのPIDが具体的に何をしているのか、さらに深掘りします。
# PIDからプロセスの詳細を確認する(例: PIDが1234の場合)
ps -ef | grep 1234
ここで実行ファイルのパス(場所)を確認してください。もし、/tmp/ や /var/tmp/ といった、本来プログラムが置いてあるはずのない場所に実行ファイルがある場合……残念ながら、それはセキュリティインシデントの可能性が高いです。
—
まとめ:一歩ずつ、「見える化」していこう
ネットワークのトラブル対応は、探偵の仕事に似ています。「何が起きているか」を正確に把握できれば、解決の糸口は必ず見つかります。
1. netstat -tulpn で、今のサーバーの「待ち受け状況」を俯瞰する。
2. PID を確認して、「犯人(プロセス)」を特定する。
3. ps コマンドで、「犯人の素性(実行場所)」を洗い出す。
この手順を覚えておくだけで、現場での対応スピードは劇的に上がります。最初は難しく感じるかもしれませんが、サーバーの中身が見えるようになると、ネットワークの世界がもっと面白くなりますよ!
皆さんのサーバーが、今日も平穏無事でありますように。何かあったら、またいつでも聞きに来てくださいね。現場のシニアエンジニアより、愛を込めて。
コメント