うたカモ技術ブログ

Linux ネットワーク

【ネットワークコマンド】   通信ソケット確認ツール ssコマンドの使い方

post: 

今回は、Linuxでソケット情報を確認するときに使うssコマンドについて紹介します。

サービスが待ち受けていない、どのプロセスが通信しているか知りたい、接続状態を確認したい、といった場面で ssは非常に有効です。

この記事では、UbuntuなどのLinux環境を前提に、基本操作から実運用で使うフィルタ方法までをまとめます。

目次

  1. ssとは
  2. ssコマンドの確認とインストール
  3. よく使うssの基本操作
  4. state条件と式フィルタ
  5. 出力項目の読み方
  6. netstatからの読み替え
  7. トラブルシュートでの使い方
  8. 用途別のオプション実行例
  9. おわりに
  10. 参考文献

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名前解決せず数値で表示
-tTCPのみ表示
-uUDPのみ表示
-pPID/プロセス名を表示(要権限)
-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状態

  1. LISTEN: サービスが待受中
  2. ESTAB: 接続確立済み
  3. TIME-WAIT: 切断後の待機状態
  4. CLOSE-WAIT: 相手から切断要求を受けた状態

netstatからの読み替え

次のように読み替えると移行しやすいです。

旧コマンド(netstat)読み替え先用途
netstat -lntpss -lntpTCP待受とプロセス確認
netstat -antpss -antpTCP接続一覧確認
netstat -lnupss -lnupUDP待受とプロセス確認
netstat -rnip routeルーティング確認
netstat -iip -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 -lntpss -ntp state establishedss -sの3つを押さえると、障害対応の初動がかなり速くなります。

既存のnetstat手順も読み替えながら、運用手順に組み込んでみてください。

参考文献