Linux / コマンド / ss - 開いているポートとソケット接続の状態を確認

ssは、アプリが通信に使う端点であるソケットの状態を調べるiproute2のツールです。TCP(Transmission Control Protocol)やUDP(User Datagram Protocol)の待ち受けポート、相手との接続情報などを確認できます。

オプションなしでは、既定で待ち受け中のソケットを除いた一覧を表示します。サーバーポートを調べるときは-lで待ち受けソケットを選び、-t・-uでTCP・UDPを指定します。-pは使用プロセスを表示しますが、他のユーザーの情報は権限によって見えない場合があります。

基本的な文法

ss [オプション] [フィルター]

インストールされている実装とオプションは、配布版によって異なる場合があります。man ssで現在のシステムの説明を確認してください。

使用例

TCPの待ち受けポート

数字のアドレス・ポートでサービスの待機状態を確認します。

ss -ltn

TCP・UDPの待ち受けポートとプロセス

どのプロセスがポートを使用しているか確認します。必要に応じてsudoを使用します。

sudo ss -ltnup

特定のポートの接続

TCPの待ち受け以外のソケットから、ローカル側のポート(sport)または相手側のポート(dport)が22に一致するものを表示します。待ち受けポートの有無を調べる例とは区別してください。

ss -tn '( sport = :22 or dport = :22 )'

リスニングソケットをどう読むか?

ss -ltnはTCP(-t)で接続を待機している(-l)ソケットを数字のアドレス・ポート(-n)で表示します。

ss -ltn

例の出力の一部(アドレスとキューサイズは環境によって異なります):

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

0.0.0.0:22はすべてのIPv4ローカルアドレスの22番ポートで待機していることを意味します。ソケットがリスニング中であるという事実だけで、ファイアウォールや外部ネットワークからアクセス可能と結論づけることはできません。プロセス名は-pとして確認できますが、権限によって一部が隠されます。

127.0.0.1:ポートにのみバインドされたサービスは、同じコンピュータ上では接続できますが、外部インターフェースから直接アクセスすることはできません。0.0.0.0にバインドされていても、ファイアウォールやセキュリティグループによってブロックされる可能性があります。ポート競合を調査する場合、権限が許可されていればss -ltnpで所有プロセスを確認してください。

主なオプションと形式

オプション・形式 説明
-l 受信待機ソケットを表示します。
-t / -u TCPまたはUDPソケットを選択します。
-n アドレスとポートを数字で表示します。
-p ソケットを使用しているプロセス情報を表示します。
-a 待ち受け中と待ち受け以外のソケットを含みます。
-s プロトコルごとのソケットの概要を表示します。

使用する際の注意点

サービスが127.0.0.1でのみリスニングしている場合、外部から接続することはできず、0.0.0.0でリスニングしているからといってファイアウォールまで開かれているという意味ではありません。UDPにはTCPのような接続確立の手順がありませんが、アプリが相手を固定したUDPソケットは接続済みとして表示されることがあります。-pのプロセス情報が空の場合、権限を確認してください。アドレスやルートは、ipによるインターフェースとルーティングの確認で切り分けます。

よくある質問

ssでポートは見えるのに外部から接続できない理由は?

受信アドレスがループバックかどうか、ファイアウォール・ルーティング・クラウドセキュリティルールで許可されているかを別途確認する必要があります。

公式ドキュメント

オプションの正確な動作や実装ごとの違いはssの公式ドキュメントで確認できます。