最終更新日 2025年1月26日
ssコマンドとは?基本概要と用途
ss
コマンド(Socket Statistics)は、Linuxでネットワーク接続の状況を確認するためのコマンドです。
サーバーがどのポートで待機しているかや、どのクライアントと通信しているかを素早く把握できます。
従来は netstat
コマンドが使われていましたが、ss
はより高速で、詳細なソケット情報を取得できるため、現在では netstat
の代替として一般的に使用されています。
SSコマンドの概要については下記で紹介しているので興味があったら見てみてください!
ssコマンドのオプションを組み合わせて使う
ss
コマンドは、オプションを組み合わせることでより詳細な情報を取得できます。
ここでは、よく使われる組み合わせ例と、高度なフィルタリングの活用方法を紹介します。
ss -tulnp
(すべてのリスニングソケット+プロセス情報を表示)ss -tan state established
(確立済みのTCP接続のみを表示)ss -tunlp | grep :80
(ポート80を使用しているプロセスを特定)ss -tan dst 192.168.1.100
(特定のIPアドレスとの接続のみ表示)ss -tan sport = 22
(特定の送信元ポートを利用している接続を表示)
各オプションを単体で使用した場合などの基礎的な説明は下記の記事で紹介しているのでよかったら見てみてください!
❶ ss -tulnp
(すべてのリスニングソケット+プロセス情報を表示)
サーバーが現在待ち受けている TCP/UDPのポート を確認し、それぞれ どのプロセスが使用しているか を調べます。
実行コマンド
ss -tulnp
実際の出力結果
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3))
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=5678,fd=6))
udp UNCONN 0 0 127.0.0.1:123 0.0.0.0:* users:(("ntpd",pid=9012,fd=4))
実行コマンドオプションの解説
-t
→ TCPソケットを表示-u
→ UDPソケットを表示-l
→ LISTEN状態のソケットのみ表示(待ち受け中のポート)-n
→ アドレスを数値で表示(DNS解決を省略して高速化)-p
→ プロセス情報を表示(どのプログラムが使用しているか特定)
上記出力結果の解説
2行目の内容(SSHサーバーの待機状態)
tcp
(ネットワークプロトコル) → TCP接続を使用LISTEN
(状態) → ポート22(SSH)が接続を待機している状態Recv-Q: 0
(受信キュー) → 受信待ちのデータはなしSend-Q: 128
(送信キュー) → 最大128個の接続を待機できる設定Local Address:Port
の0.0.0.0:22
→ どのIPアドレスからのSSH接続も受け付ける状態Peer Address:Port
の0.0.0.0:*
→ まだ特定のクライアントとの接続は確立されていないProcess(プロセス情報)
→sshd
(SSHサーバー)がポート22を使用中pid=1234
→ SSHデーモン(sshd
)のプロセスID(PID)が1234
fd=3
→ このプロセスが使用しているファイルディスクリプタ(ソケットの識別番号)が3
この行の情報から、SSHサーバー(sshd
)が動作中で、外部からのSSH接続を待機していることが分かります。
3行目の内容(Webサーバーの待機状態)
tcp
(ネットワークプロトコル) → TCP接続を使用LISTEN
(状態) → ポート80(HTTP)が接続を待機している状態Recv-Q: 0
(受信キュー) → 受信待ちのデータはなしSend-Q: 128
(送信キュー) → 最大128個の接続を待機できる設定Local Address:Port
の0.0.0.0:80
→ どのIPアドレスからのHTTP接続も受け付ける状態Peer Address:Port
の0.0.0.0:*
→ まだ特定のクライアントとの接続は確立されていないProcess(プロセス情報)
→nginx
(Webサーバー)がポート80を使用中pid=5678
→nginx
のプロセスID(PID)が5678
fd=6
→nginx
がこのポートをリスニングしているソケットの識別番号が6
この行の情報から、Nginx Webサーバーが動作中で、外部からのHTTPリクエストを待ち受けていることが分かります。
4行目の内容(NTPサーバーの待機状態)
udp
(ネットワークプロトコル) → UDP接続を使用UNCONN
(状態) → 「未接続」の状態(UDPはTCPのように接続を確立しないため通常)Recv-Q: 0
(受信キュー) → 受信待ちのデータはなしSend-Q: 0
(送信キュー) → 送信待ちのデータはなしLocal Address:Port
の127.0.0.1:123
→ サーバーの ローカルホスト(127.0.0.1) 上で ポート123(NTP) が待機しているPeer Address:Port
の0.0.0.0:*
→ まだ特定のクライアントとの接続は確立されていないProcess(プロセス情報)
→ntpd
(NTPサーバー)がポート123を使用中pid=9012
→ntpd
のプロセスID(PID)が9012
fd=4
→ntpd
がこのポートを使用しているソケットの識別番号が4
この行の情報から、このサーバーはNTPサービスを実行しており、ローカルホスト(127.0.0.1)内でのみ時刻同期を提供していることが分かります。
❷ ss -tan state established
(確立済みのTCP接続のみを表示)
現在 確立済み(ESTABLISHED)のTCP接続 を確認するコマンドです。
サーバーへの接続状況を把握し、どのクライアントが通信しているかを確認する際に役立ちます。
実行コマンド
ss -tan state established
実際の出力結果
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.10:22 192.168.1.50:50123
tcp ESTAB 0 0 192.168.1.10:443 203.0.113.100:50234
コマンドオプションの解説
-t
→ TCP接続を表示-a
→ すべての接続を表示(デフォルトでは確立済み接続のみ)-n
→ アドレスを数値で表示state established
→ 確立済みの接続のみを表示
上記出力結果の解説
2行目の内容(SSH接続が確立済み)
tcp
(ネットワークプロトコル) → TCP接続を使用ESTAB(状態)
→ 確立済みの接続で、通信が可能な状態Recv-Q: 0
(受信キュー) → 受信待ちのデータなしSend-Q: 0
(送信キュー) → 送信待ちのデータなし(スムーズに通信中)Local Address:Port
の192.168.1.10:22
→ サーバーがポート22(SSH) でクライアントと通信中Peer Address:Port
の192.168.1.50:50123
→ クライアント192.168.1.50
がポート50123
からSSH接続している
この行の情報から、サーバー 192.168.1.10
にクライアント 192.168.1.50
がSSHで接続していることが分かります。
SSHはリモート管理のために使用されるため、192.168.1.50
は管理者のPCなどである可能性が高いです。
3行目の内容(HTTPS接続が確立済み)
tcp
(ネットワークプロトコル) → TCP接続を使用ESTAB(状態)
→ 確立済みの接続で、通信が可能な状態Recv-Q: 0
(受信キュー) → 受信待ちのデータなしSend-Q: 0
(送信キュー) → 送信待ちのデータなし(スムーズに通信中)Local Address:Port
の192.168.1.10:443
→ サーバーがポート443(HTTPS) でクライアントと通信中Peer Address:Port
の203.0.113.100:50234
→ クライアント203.0.113.100
がポート50234
からHTTPS接続している
この行の情報から、サーバー 192.168.1.10
に外部のクライアント 203.0.113.100
がHTTPSで接続していることが分かります。
このクライアントはWebブラウザを使用して、サーバー上のWebサイトにアクセスしている可能性が高いです。
❸ ss -tunlp | grep :80
(ポート80を使用しているプロセスを特定)
特定のポート(ここでは ポート80)を使用しているプロセスを特定する方法です。
Webサーバー(ApacheやNginx)が適切に稼働しているか確認する際に活用できます。
実行コマンド
ss -tunlp | grep :80
実際の出力結果
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=5678,fd=6))
実行コマンドの解説
ss -tunlp
で すべてのLISTENソケット+プロセス情報を取得grep :80
で ポート80を使用しているエントリのみを表示
上記出力結果の解説
この ss
コマンドの出力結果から、以下のことが分かります。
- Nginx Webサーバーがポート80(HTTP)で待機中(プロセス
nginx
、PID5678
) - どのIPアドレス(
0.0.0.0
)からの接続も受け入れる状態 - 現在、クライアントとの接続は確立されていない(まだ
ESTABLISHED
ではない)
❹ ss -tan dst 192.168.1.100
(特定のIPアドレスとの接続のみ表示)
特定のIP(この場合は 192.168.1.100)との通信のみを抽出するコマンドです。
特定のクライアントとの接続数を確認する際に役立ちます。
実行コマンド
ss -tan dst 192.168.1.100
実際の出力結果
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.10:22 192.168.1.100:50123
tcp ESTAB 0 0 192.168.1.10:443 192.168.1.100:50234
実行コマンドの解説
dst 192.168.1.100
で このIPアドレスへの接続のみ表示state established
を組み合わせると 確立済みの接続だけを確認可能
上記出力結果の解説
2行目の内容(SSH接続が確立済み)
tcp
(プロトコル) → TCP接続を使用ESTAB(状態)
→ 接続が確立されている状態(クライアントとサーバーが正常に通信中)Recv-Q: 0
(受信キュー) → サーバー側で受信待ちのデータはなしSend-Q: 0
(送信キュー) → 送信待ちのデータはなし(通信がスムーズ)Local Address:Port
の192.168.1.10:22
→ サーバー(192.168.1.10
)がSSH(ポート22) でクライアントと通信中Peer Address:Port
の192.168.1.100:50123
→ クライアント(192.168.1.100
)がポート50123
からSSH接続している
この行の情報から、サーバー 192.168.1.10
にクライアント 192.168.1.100
がSSHで接続していることが分かります。
SSHはリモート管理のために使用されるため、192.168.1.100
は管理者のPCやリモートサーバーの可能性が高いです。
3行目の内容(HTTPS接続が確立済み)
tcp
(プロトコル) → TCP接続を使用ESTAB(状態)
→ 接続が確立されている状態(クライアントとサーバーが正常に通信中)Recv-Q: 0
(受信キュー) → サーバー側で受信待ちのデータはなしSend-Q: 0
(送信キュー) → 送信待ちのデータはなし(通信がスムーズ)Local Address:Port
の192.168.1.10:443
→ サーバー(192.168.1.10
)がHTTPS(ポート443) でクライアントと通信中Peer Address:Port
の192.168.1.100:50234
→ クライアント(192.168.1.100
)がポート50234
からHTTPS接続している
この行の情報から、サーバー 192.168.1.10
にクライアント 192.168.1.100
がHTTPSで接続していることが分かります。
このクライアントは、WebブラウザやAPIクライアントを使用して、サーバー上のWebサイトやアプリケーションにアクセスしている可能性が高いです。
❺ ss -tan sport = 22
(特定の送信元ポートを利用している接続を表示)
特定の送信元ポート(ここでは 22番(SSH))を使用している接続を確認する方法です。
SSHセッションの状況を調査したり、異常なSSH接続を監視する際に有用です。
実行コマンド
ss -tan sport = 22
実際の出力結果
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.1.10:22 192.168.1.50:60123
tcp ESTAB 0 0 192.168.1.10:22 203.0.113.10:60234
実行コマンドの解説
sport = 22
で 送信元ポート22を使用している接続のみを表示- SSHのポートフォワーディングや踏み台サーバーを経由した接続の監視にも活用可能
上記出力結果の解説
2行目の内容(SSH接続が確立済み – ローカルネットワークからの接続)
tcp
(プロトコル) → TCP接続を使用ESTAB(状態)
→ 接続が確立されている状態(クライアントとサーバーが正常に通信中)Recv-Q: 0
(受信キュー) → サーバー側で受信待ちのデータはなしSend-Q: 0
(送信キュー) → 送信待ちのデータはなし(通信がスムーズ)Local Address:Port
の192.168.1.10:22
→ サーバー(192.168.1.10
)がSSH(ポート22) でクライアントと通信中Peer Address:Port
の192.168.1.50:60123
→ クライアント(192.168.1.50
)がポート60123
からSSH接続している
この行の情報から、サーバー 192.168.1.10
にクライアント 192.168.1.50
(ローカルネットワーク内のPC)がSSHで接続していることが分かります。
SSHはリモート管理のために使用されるため、192.168.1.50
は管理者のPCやリモートサーバーの可能性が高いです。
3行目の内容(SSH接続が確立済み – 外部IPからの接続)
tcp
(プロトコル) → TCP接続を使用ESTAB(状態)
→ 接続が確立されている状態(クライアントとサーバーが正常に通信中)Recv-Q: 0
(受信キュー) → サーバー側で受信待ちのデータはなしSend-Q: 0
(送信キュー) → 送信待ちのデータはなし(通信がスムーズ)Local Address:Port
の192.168.1.10:22
→ サーバー(192.168.1.10
)がSSH(ポート22) でクライアントと通信中Peer Address:Port
の203.0.113.10:60234
→ クライアント(203.0.113.10
)がポート60234
からSSH接続している
この行の情報から、サーバー 192.168.1.10
にクライアント 203.0.113.10
(外部ネットワークのIPアドレス)がSSHで接続していることが分かります。
ゴリタン
インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。
CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。