【ネットワークコマンド】 通信ソケット確認ツール ssコマンドの使い方
今回は、Linuxでソケット情報を確認するときに使うssコマンドについて紹介します。
サービスが待ち受けていない、どのプロセスが通信しているか知りたい、接続状態を確認したい、といった場面で ssは非常に有効です。
この記事では、UbuntuなどのLinux環境を前提に、基本操作から実運用で使うフィルタ方法までをまとめます。
目次
- ssとは
- ssコマンドの確認とインストール
- よく使うssの基本操作
- state条件と式フィルタ
- 出力項目の読み方
- netstatからの読み替え
- トラブルシュートでの使い方
- 用途別のオプション実行例
- おわりに
- 参考文献
ssとは
ssは、TCP/UDP/UNIXドメインソケットなどの接続情報と待受情報を確認できるコマンドです。
現在のLinuxでは、従来のnetstatより高速かつ柔軟に絞り込みできるため、 日常運用や障害対応で広く使われています。
ちなみに私は組み込む機器向けLinuxでの開発が多いため、netstatを使うことが多いです。まあ、netstatですらインストールされていない環境だったりするわけですが。。。
ssコマンドの確認とインストール
インストール確認
まず現在の環境でssが使えるか確認します。
kamo@kamo:~$ which ss kamo@kamo:~$ ss -V
一般的なディストリビューションでは標準搭載ですが、最小構成イメージでは入っていない場合があります。
インストール
次のコマンドでインストールできます。
kamo@kamo:~$ sudo apt update kamo@kamo:~$ sudo apt install iproute2
よく使うssの基本操作
全ソケットを表示する
kamo@kamo:~$ ss -a
TCP/UDP/UNIXなどを含むソケット情報をまとめて確認できます。
待受中のTCPポートを確認する
kamo@kamo:~$ sudo ss -lntp
サービスが待ち受けているポートを確認する基本形です。
接続中のTCPセッションを確認する
kamo@kamo:~$ sudo ss -ntp state established
現在どこと通信しているかを把握できます。
UDPソケットを確認する
kamo@kamo:~$ sudo ss -lnup
ソケット統計を確認する
kamo@kamo:~$ ss -s
TCP/UDPごとの接続件数を要約表示できます。
代表的なオプション
上記の例のように、オプションを利用することで様々な情報を取得することが可能です。
一般的に以下のオプションがあります。
| オプション | 意味 |
|---|---|
| -a | すべてのソケットを表示 |
| -l | 待受ソケットのみ表示 |
| -n | 名前解決せず数値で表示 |
| -t | TCPのみ表示 |
| -u | UDPのみ表示 |
| -p | PID/プロセス名を表示(要権限) |
| -s | 要約統計を表示 |
| -H | ヘッダー行を非表示 |
| state <状態> | 接続状態で絞り込む(例: established, listening) |
state条件と式フィルタ
ssは、状態(state)と式フィルタ(src/dst/sport/dport)を組み合わせると 大量出力でも絞り込めます。
ESTABLISHEDだけ表示する
kamo@kamo:~$ ss -nt state established
ローカル待受の443番だけ確認する
kamo@kamo:~$ sudo ss -lnt '( sport = :443 )'
外向きHTTPS通信だけ確認する
kamo@kamo:~$ sudo ss -nt state established '( dport = :443 )'
特定宛先への通信だけ確認する
kamo@kamo:~$ sudo ss -nt '( dst 192.168.10.20 )'
出力項目の読み方
ss -lntpでよく見る列
| 項目 | 意味 |
|---|---|
| Netid | プロトコル種別(tcp / udp など) |
| State | 接続状態(LISTEN / ESTAB など) |
| Recv-Q | 受信キューのデータ量 |
| Send-Q | 送信キューのデータ量 |
| Local Address:Port | ローカル側IP:ポート |
| Peer Address:Port | 相手側IP:ポート |
| Process | 紐づくプロセス情報(-p指定時) |
よく見るTCP状態
- LISTEN: サービスが待受中
- ESTAB: 接続確立済み
- TIME-WAIT: 切断後の待機状態
- CLOSE-WAIT: 相手から切断要求を受けた状態
netstatからの読み替え
次のように読み替えると移行しやすいです。
| 旧コマンド(netstat) | 読み替え先 | 用途 |
|---|---|---|
| netstat -lntp | ss -lntp | TCP待受とプロセス確認 |
| netstat -antp | ss -antp | TCP接続一覧確認 |
| netstat -lnup | ss -lnup | UDP待受とプロセス確認 |
| netstat -rn | ip route | ルーティング確認 |
| netstat -i | ip -s link | インタフェース統計確認 |
トラブルシュートでの使い方
サービスが待受しているか確認する
kamo@kamo:~$ sudo ss -lntp | grep ':80 ' kamo@kamo:~$ sudo ss -lntp | grep ':443 '
WebサーバーのポートがLISTENしていない場合は、まずサービスの起動状態を確認します。
想定外の外部通信がないか確認する
kamo@kamo:~$ sudo ss -ntp state established
不審な接続先や想定外の常時接続がないかを確認できます。
ポート競合を確認する
kamo@kamo:~$ sudo ss -lntp '( sport = :3000 )'
アプリ起動失敗時に、対象ポートを既に別プロセスが利用していないかを確認できます。
プロセス情報が表示されない
-pで情報が出ない場合はsudo付きで再実行し、 それでも見えない場合はOSのプロセス可視化制限(例: hidepid)を確認してください。
用途別のオプション実行例
1) サーバーが待受しているか確認したい
kamo@kamo:~$ sudo ss -lntp
2) 特定ポート(例:8080)を掴んでいるプロセスを調べたい
kamo@kamo:~$ sudo ss -lntp '( sport = :8080 )'
3) 外向きHTTPS接続だけ確認したい
kamo@kamo:~$ sudo ss -ntp state established '( dport = :443 )'
4) DNS/NTPのUDP待受を確認したい
kamo@kamo:~$ sudo ss -lnup '( sport = :53 )' kamo@kamo:~$ sudo ss -lnup '( sport = :123 )'
5) 現在の確立済みTCP接続数をざっくり把握したい
kamo@kamo:~$ ss -Htan state established | wc -l
6) 1秒ごとに接続状況の変化を追いたい
kamo@kamo:~$ watch -n 1 'ss -s; echo; ss -lnt'
おわりに
この記事では、ssコマンドの基本操作と、実運用で使いやすい絞り込み例を紹介しました。
まずはss -lntp、ss -ntp state established、 ss -sの3つを押さえると、障害対応の初動がかなり速くなります。
既存のnetstat手順も読み替えながら、運用手順に組み込んでみてください。
参考文献
- ss(8) - Linux manual page https://man7.org/linux/man-pages/man8/ss.8.html
- ip(8) - Linux manual page https://man7.org/linux/man-pages/man8/ip.8.html