LESSON 25分

netstatで接続状況を確認しよう

ストーリー

「先輩、自分のPCがどのサーバーと通信しているか確認する方法ってありますか?」

「netstat や ss コマンドを使えば、現在の接続状況が一目で分かるよ」

「接続状況?どんな情報が見えるんですか?」

「どのポートが開いているか、どのIPと通信中か、接続の状態は何か。セキュリティ診断でも使う重要なコマンドだね」


netstat / ss とは

一言で言うと

自分のコンピュータのネットワーク接続状況を表示するコマンド

  • 現在どのポートが開いているか
  • どのIPアドレスと通信しているか
  • 接続の状態(待ち受け、確立、終了待ちなど)

netstat vs ss

コマンド説明
netstat古くからあるコマンド(Windows、Mac、Linux で使える)
ssLinux の新しいコマンド(netstat より高速)

Linuxでは ss の使用が推奨されています。本レッスンでは両方を紹介します。


基本的な使い方

Linux: ss コマンド

bash
# TCP/UDP の接続とリッスン中のポートを表示
ss -tuln

Windows / Mac: netstat コマンド

bash
# 接続とリッスン中のポートを表示
netstat -an

ss コマンドのオプション

オプション意味
-tTCPの接続を表示
-uUDPの接続を表示
-lLISTEN状態(待ち受け中)のみ表示
-nポート番号を数字で表示(名前解決しない)
-pプロセス名も表示(要root権限)
-aすべての接続を表示

よく使う組み合わせ

bash
# 待ち受け中のTCP/UDPポート一覧
ss -tuln

# すべてのTCP接続(待ち受け+確立)
ss -tan

# プロセス名付きで表示(要root)
sudo ss -tulnp

出力の読み方

ss -tuln の出力例

State    Recv-Q  Send-Q   Local Address:Port    Peer Address:Port
LISTEN   0       128      0.0.0.0:22             0.0.0.0:*
LISTEN   0       128      0.0.0.0:80             0.0.0.0:*
LISTEN   0       128      0.0.0.0:443            0.0.0.0:*
LISTEN   0       128      127.0.0.1:3306         0.0.0.0:*

各列の意味

意味
State接続の状態
Recv-Q受信キュー(受信待ちデータ量)
Send-Q送信キュー(送信待ちデータ量)
Local Address:Port自分のIPアドレスとポート
Peer Address:Port相手のIPアドレスとポート

Local Address の読み方

アドレス意味
0.0.0.0:80すべてのネットワークインターフェースでポート80を待ち受け
127.0.0.1:3306ローカルホスト(自分自身)からのみポート3306を待ち受け
192.168.1.10:22特定のIPでポート22を待ち受け

Peer Address の読み方

アドレス意味
0.0.0.0:*まだ接続相手がいない(LISTEN状態)
203.0.113.50:54321特定のIPと通信中

接続の状態(State)

TCP接続にはさまざまな状態があります。

状態意味
LISTEN接続を待ち受けている
ESTABLISHED接続が確立している(通信中)
TIME_WAIT接続終了後の待機状態
CLOSE_WAIT相手からの切断を受けて終了待ち
SYN_SENT接続要求を送信中
SYN_RECV接続要求を受信中

よく見る状態

LISTEN      → サーバーが起動して待ち受けている
ESTABLISHED → 現在通信中
TIME_WAIT   → 通信が終わった直後(しばらくすると消える)

確立中の接続を確認する

ss -tan の出力例

State         Recv-Q  Send-Q   Local Address:Port    Peer Address:Port
LISTEN        0       128      0.0.0.0:22             0.0.0.0:*
ESTABLISHED   0       0        192.168.1.10:22        192.168.1.100:54321
ESTABLISHED   0       0        192.168.1.10:443       203.0.113.50:45678
TIME_WAIT     0       0        192.168.1.10:80        203.0.113.60:34567

この出力から分かること:

  • ポート22(SSH)が待ち受け中で、192.168.1.100 から接続されている
  • ポート443(HTTPS)で 203.0.113.50 と通信中
  • ポート80(HTTP)で 203.0.113.60 との通信が終了した直後

実践:よく使うシナリオ

シナリオ1: Webサーバーが起動しているか確認

bash
ss -tln | grep :80

出力例:

LISTEN   0   128   0.0.0.0:80   0.0.0.0:*

ポート80がLISTEN状態なら、Webサーバーは起動しています。

シナリオ2: 特定のポートを使っているプロセスを特定

bash
sudo ss -tulnp | grep :3000

出力例:

LISTEN   0   128   *:3000   *:*   users:(("node",pid=12345,fd=21))

ポート3000はNode.jsプロセス(PID 12345)が使用しています。

シナリオ3: 外部との通信を確認

bash
ss -tan | grep ESTABLISHED

現在確立している接続だけを表示します。


Windows での netstat

Windows では ss の代わりに netstat を使います。

cmd
rem 接続とポートの一覧
netstat -an

rem 確立中の接続のみ
netstat -an | findstr ESTABLISHED

rem プロセスIDも表示
netstat -ano

オプション

オプション意味
-aすべての接続とポートを表示
-n数字で表示(名前解決しない)
-oプロセスIDを表示

セキュリティの観点から

ss / netstat はセキュリティ診断でも重要なコマンドです。

確認すべきポイント

確認項目チェック方法
不要なポートが開いていないかss -tuln で確認
不審な接続がないかss -tan で ESTABLISHED を確認
意図しないプロセスがポートを使っていないかsudo ss -tulnp で確認

注意が必要なケース

LISTEN 0.0.0.0:3306  → MySQLが全てのインターフェースで公開されている(危険な可能性)
LISTEN 127.0.0.1:3306 → ローカルのみ(安全)

データベースなど外部に公開すべきでないサービスは、127.0.0.1(ローカルホスト)でのみリッスンすべきです。


まとめ

ポイント内容
ss / netstatネットワーク接続状況を表示するコマンド
-tulnTCP/UDPのリッスンポートを数字で表示
LISTEN接続を待ち受けている状態
ESTABLISHED接続が確立し通信中
Local / Peer Address自分と相手のIP:ポート

チェックリスト

  • ss コマンドの基本的な使い方が分かる
  • 主要なオプション(-t, -u, -l, -n)を理解した
  • LISTEN と ESTABLISHED の違いが分かる
  • 出力結果からどのポートが開いているか読み取れる
  • セキュリティ観点での確認ポイントを知っている

次のステップへ

netstat / ss でネットワーク接続状況を確認する方法が分かりました。

次はStep 5のチェックポイントクイズです。ネットワークコマンドの知識を総確認しましょう。


推定読了時間: 25分