2026年5月24日

2026年5月24日

ssコマンドとnetstatで接続状態・待ち受けポートを確認する方法

サーバーの調査では、「どのポートで待ち受けているか」「どのプロセスがそのポートを使っているか」「どこから何本接続されているか」をよく確認します。Linux でこれを調べるコマンドが ss(socket statistics)と、昔からある netstat です。

現在の主なディストリビューションでは、ss が入っている iproute2 パッケージが標準で、netstat を含む net-tools パッケージは最小構成では入っていないことがあります。この記事では ss を中心に、よく使う確認方法を説明します。コマンドと出力は 2026年10月時点の Debian 12(iproute2 6.1.0)で確認しています。

ssとnetstatのインストール

ss が見つからない場合は、iproute2 を入れます。netstat を使いたい場合は net-tools を入れます。

# Debian / Ubuntu
sudo apt install iproute2      # ss
sudo apt install net-tools     # netstat

# RHEL / AlmaLinux / Rocky Linux
sudo dnf install iproute       # ss
sudo dnf install net-tools     # netstat

よく使うオプション

オプション 意味
-t TCP を表示する
-u UDP を表示する
-l 待ち受け中(LISTEN)のソケットだけ表示する
-a 待ち受け中と接続中の両方を表示する
-n ポート番号やアドレスを名前に変換せず、数字のまま表示する(速い)
-p ソケットを使っているプロセスを表示する
-s 集計(サマリー)を表示する
-H 見出しの行を表示しない(集計するときに便利)
-4 / -6 IPv4 / IPv6 だけ表示する

待ち受け中のポートとプロセスを確認する

いちばんよく使うのが ss -tulnp です。TCP と UDP の待ち受け中のポートを、使っているプロセスと一緒に表示します。

sudo ss -tulnp

出力例:

Netid State  Recv-Q Send-Q Local Address:Port Peer Address:PortProcess
udp   UNCONN 0      0            0.0.0.0:5353      0.0.0.0:*    users:(("nc",pid=365,fd=3))
tcp   LISTEN 0      1            0.0.0.0:8443      0.0.0.0:*    users:(("nc",pid=364,fd=3))
tcp   LISTEN 1      1            0.0.0.0:8080      0.0.0.0:*    users:(("nc",pid=363,fd=3))
  • Local Address:Port が待ち受けているアドレスとポートです。0.0.0.0 はすべての IPv4 アドレス、127.0.0.1 は自分自身からの接続だけを受け付けることを表します。IPv6 では [::] や * と表示されます
  • Process 欄の users:(("プロセス名",pid=番号,fd=番号)) が、そのポートを使っているプロセスです
  • -p で他のユーザーのプロセスまで表示するには root 権限が必要です。sudo を付けないと、自分のプロセス以外は Process 欄が空になります

特定のポートだけ見たい場合は、フィルターでポートを指定します。

# 443番ポートで待ち受けているプロセス
sudo ss -tlnp 'sport = :443'

# プロセス名で絞り込む(例: nginx)
sudo ss -tlnp | grep nginx

lsof を使う方法もあります。

sudo lsof -nP -iTCP -sTCP:LISTEN

確立済みの接続を確認する

state フィルターで、接続の状態を指定して表示できます。

ss -tn state established

出力例:

Recv-Q Send-Q Local Address:Port  Peer Address:Port Process
0      0          127.0.0.1:60984    127.0.0.1:8080
0      0          127.0.0.1:8080     127.0.0.1:60984

state を指定すると State の列が表示されなくなり、列の位置が1つずつ前にずれます。接続相手(Peer Address:Port)は4列目です。

自分のサーバーの特定のポート(例: 443)に来ている接続だけを見るには、sport(自分側のポート)で絞り込みます。自分から外部の特定ポートへの接続を見るときは dport(相手側のポート)を使います。

# 自分の443番ポートに来ている接続
ss -tn state established '( sport = :443 )'

# 外部の3306番ポート(MySQL)への接続
ss -tn state established '( dport = :3306 )'

# ポートの範囲で絞り込む
ss -tn 'dport >= :8000 and dport <= :9000'

接続元IPごとの接続数を数える

アクセスが集中しているときに、どの IP アドレスから多く接続されているかを数えます。-H で見出しを消し、4列目(接続相手)からポート番号を取り除いて数えます。

ss -Htn state established '( sport = :443 )' \
  | awk '{print $4}' | sed -E 's/:[0-9]+$//' \
  | sort | uniq -c | sort -rn | head

出力は「接続数 IPアドレス」の形で、多い順に並びます。IPv6 のアドレスは [2001:db8::1] のように角かっこ付きで表示されます。sed で最後の :ポート番号 だけを消しているので、IPv6 のアドレスも途中で切れません。

状態ごとの接続数を数える

ss -Htan | awk '{print $1}' | sort | uniq -c

出力例:

      4 ESTAB
      2 LISTEN
      2 TIME-WAIT

ss では状態の名前が ESTAB・TIME-WAIT のように表示されます(netstat では ESTABLISHED・TIME_WAIT)。

全体の集計だけなら ss -s が手軽です。

ss -s
Total: 13
TCP:   46 (estab 4, closed 40, orphaned 0, timewait 2)

TIME-WAITの数を確認する

TIME-WAIT は、先に接続を閉じた側に一定時間残る状態です。Web サーバーやリバースプロキシのように短い接続を大量に扱うサーバーでは、ある程度残っているのは普通の動きです。数だけを確認するには、見出しを消して行数を数えます。

ss -Htan state time-wait | wc -l

-H を付けないと見出しの1行も数えてしまうので注意してください。

netstatとの対応

古い手順書に netstat が書かれている場合は、次のように読み替えます。

目的 netstat ss / ip
待ち受けポートとプロセス netstat -tulnp ss -tulnp
すべての TCP 接続 netstat -tan ss -tan
確立済みの接続だけ netstat -tn の出力を grep ESTABLISHED で絞り込む ss -tn state established
ルーティングテーブル netstat -rn ip route
ネットワークインターフェースの統計 netstat -i ip -s link

netstat -tulnp と ss -tulnp はオプションの意味が同じで、表示する内容もほぼ同じです。ただし、-l も -a も付けないときの表示は違います。netstat -tn は TIME_WAIT なども含めた待ち受け以外の接続を表示し、ss -tn は TIME-WAIT を表示しません。列の並びや状態の名前も違うので、awk などで列を取り出すスクリプトはそのままでは流用できません。

注意点

  • -n を付けないと、IP アドレスやポートを名前に変換しようとして表示が遅くなることがあります。調査では -n を付けるのが基本です
  • -p でプロセスを表示するには sudo が必要です
  • コンテナの中で動いているプロセスの接続は、コンテナのネットワークの中でしか見えないことがあります。Docker では、コンテナに入って確認するか、ホストの ss で公開ポートを確認します
  • 待ち受けているポートが分かったら、外部に公開する必要がないポートはファイアウォールで閉じるか、127.0.0.1 だけで待ち受けるように設定を変えます

まとめ

  • 待ち受けポートとプロセスの確認は sudo ss -tulnp
  • 確立済みの接続は ss -tn state established。state を指定すると State 列が消え、接続相手は4列目になる
  • 集計するときは -H で見出しを消してから awk・sort・uniq -c で数える
  • 全体の集計は ss -s
  • netstat は net-tools パッケージを入れれば使えるが、新しく手順を作るなら ss と ip を使う

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ
▲