2026年9月11日

2026年9月11日

ss コマンドの実行手順:待ち受けポートと接続状態を確認する方法

ss は Linux でソケット(通信の出入り口)の状態を表示するコマンドで、「どのポートでどのプロセスが待ち受けているか」「今どの相手と何本の接続があるか」を素早く確認できます。古くから使われてきた netstat の後継として iproute2 パッケージに含まれており、多くのディストリビューションで最初から使えます。この記事では、ss の基本的な実行手順と出力の読み方、状態やポートでの絞り込み、そして WordPress サーバーでよくある確認作業(Web サーバーが起動しない、DB が外部に公開されていないか、接続数の急増)への応用を説明します。

netstat と tracert の役割の違いについては別の記事で扱っているため、ここでは ss そのものの使い方に絞ります。

ss の基本的な実行手順

まず、待ち受け中のポートを一覧するところから始めます。

# TCP と UDP の待ち受けポートを、プロセス名つきで数値表示
sudo ss -tulpn

各オプションの意味は次のとおりです。

  • -t:TCP ソケットを表示
  • -u:UDP ソケットを表示
  • -l:待ち受け(LISTEN)中のソケットだけを表示
  • -p:ソケットを使っているプロセスを表示
  • -n:ポート番号やアドレスを名前に変換せず数値で表示

-p で他のユーザーが起動したプロセスまで表示するには root 権限が必要です。sudo を付けずに実行すると、プロセス欄が空になることがあります。-n を付けると名前解決をしないため表示が速く、ポート番号を直接確認できます。

出力の読み方

ss -tulpn の出力には、次のような列が並びます。

  • Netid:tcp や udp などのプロトコル
  • State:LISTEN(待ち受け)や ESTAB(接続確立)などの状態
  • Recv-Q / Send-Q:キューにたまっているデータ量
  • Local Address:Port:自ホスト側のアドレスとポート
  • Peer Address:Port:相手側のアドレスとポート
  • Process:users:(("nginx",pid=1234,fd=6)) のようなプロセス情報

特に重要なのが Local Address の部分です。0.0.0.0:80 や [::]:80 は、すべてのインターフェースで待ち受けていることを示し、外部から接続できる状態です。127.0.0.1:3306 のようにループバックアドレスなら、同じサーバー内からしか接続できません。

Recv-Q と Send-Q は状態によって意味が変わります。LISTEN のソケットでは、Recv-Q が受け付け待ちの接続数、Send-Q がその上限(backlog)です。Recv-Q が上限に近い状態が続く場合は、アプリケーションが接続を受け付けきれていない可能性があります。ESTAB のソケットでは、まだアプリが読み取っていないデータ量や、相手から確認応答を受けていないデータ量を示します。

状態とポートで絞り込む

接続数が多いサーバーでは、条件で絞り込むと必要な情報だけを見られます。

# 確立済みの TCP 接続だけを表示
ss -tn state established

# 443 番ポートへの接続(自ホストが待ち受け側)を表示
ss -tn '( sport = :443 )'

# 特定の相手との接続を表示
ss -tn dst 203.0.113.50

# 3306 番で待ち受けているプロセスを確認
sudo ss -ltnp 'sport = :3306'

state には established、time-wait、syn-recv、close-wait などを指定できます。sport は自ホスト側のポート、dport は相手側のポートです。フィルター式はシェルに解釈されないよう、シングルクォートで囲みます。

接続数を数えたい場合は、ヘッダーを出さない -H と wc -l を組み合わせます。

# 443 番への確立済み接続の数
ss -Htn state established '( sport = :443 )' | wc -l

# 状態ごとのソケット数の概要
ss -s

-H は比較的新しい iproute2 で追加されたオプションのため、古い環境で使えない場合は tail -n +2 でヘッダー行を除きます。

WordPress サーバーでの確認例

Web サーバーが起動しない(ポートの競合)

nginx や Apache の起動時に「Address already in use」のようなエラーが出る場合は、すでに別のプロセスが 80 番や 443 番を使っています。

sudo ss -ltnp '( sport = :80 or sport = :443 )'

Process 欄に表示されたプロセスが、停止し忘れた別の Web サーバーなのか、意図して動かしているものなのかを確認します。停止する場合は、そのサービスを systemctl で止めてから目的の Web サーバーを起動します。

MySQL / MariaDB が外部に公開されていないか

DB を Web サーバーと同じホストで動かしている場合、外部から 3306 番に接続できる必要は通常ありません。sudo ss -ltnp 'sport = :3306' の Local Address が 0.0.0.0 や [::] になっていたら、DB の設定(bind-address)とファイアウォールを確認します。設定を変更する前には、設定ファイルと DB のバックアップを取り、ステージング環境で WordPress から接続できることを確かめてから本番に反映します。

PHP-FPM の待ち受け先を確認する

PHP-FPM は TCP(例: 127.0.0.1:9000)か UNIX ソケットで待ち受けます。nginx の設定と一致しているかを確認するには、次のコマンドが便利です。

# TCP で待ち受けている場合
sudo ss -ltnp | grep php-fpm

# UNIX ソケットで待ち受けている場合
sudo ss -lxp | grep php

-x は UNIX ドメインソケットを表示するオプションです。nginx の fastcgi_pass に書かれたアドレスやソケットのパスと一致していなければ、502 エラーの原因になります。

接続数が急に増えたとき

サイトが重いときに ss -s で TCP の総数を見て、普段より極端に多い場合は状態別に確認します。

  • ESTAB が多い:アクセス集中、またはクローラーやボットの大量接続。ss -tn state established '( sport = :443 )' で相手の IP を確認し、アクセスログと照合します。
  • SYN-RECV が多い:接続の確立途中で止まっている接続が多い状態で、大量の接続要求を受けている可能性があります。ファイアウォールや上流の防御サービスでの対策を検討します。
  • TIME-WAIT が多い:短い接続を大量に開閉している状態で、それ自体は正常な動作の範囲であることも多いです。リバースプロキシとバックエンド間で接続を再利用できているか(keepalive)を確認します。
  • CLOSE-WAIT が多い:相手が接続を閉じたのに、自ホストのアプリが閉じていない状態です。アプリ側の不具合や処理の詰まりが疑われるため、該当プロセスを特定してログを確認します。

netstat との対応

古い手順書に netstat のコマンドが書かれている場合は、ss に置き換えて実行できます。多くのディストリビューションでは、netstat を含む net-tools が既定でインストールされていません(2026年10月現在)。

  • netstat -tulpn → ss -tulpn
  • netstat -an → ss -an
  • netstat -s → ss -s(表示内容は異なり、ss は概要のみ)

ss は netstat より高速で、状態やポートでの絞り込みをコマンド側で行えるのが利点です。

まとめ

  • sudo ss -tulpn で、待ち受けポートとプロセスを一覧できます。
  • Local Address が 0.0.0.0 や [::] なら外部から接続可能、127.0.0.1 なら同じホスト内だけです。
  • state やポートのフィルターで絞り込み、-H と wc -l で接続数を数えられます。
  • ポートの競合、DB の公開状態、PHP-FPM の待ち受け先、接続数の急増といった WordPress サーバーの確認に役立ちます。
  • 設定を変更する前にはバックアップを取り、ステージングで確認してから本番に反映してください。

お気軽にご相談ください

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