【保存版】ssコマンドチートシート:netstat後継のソケット確認を完全網羅
Linuxサーバー管理において、ネットワーク接続の状態確認は日常的に行う作業です。従来はnetstatコマンドが使われてきましたが、現在はより高速で機能豊富な「ss(Socket Statistics)」コマンドが推奨されています。
ssコマンドは/proc/net/tcpを直接読み取るため、数千〜数万の接続がある本番サーバーでもストレスなく動作します。本記事では、ssコマンドの基本オプションから実務で役立つワンライナーまで、コピー&ペーストですぐに使えるチートシートとしてまとめました。
ssコマンドを使うメリット
- 高速: netstatより圧倒的に速い。大量接続時でも瞬時に結果を返す
- 豊富なフィルタリング: ポート、IP、接続状態で柔軟にフィルタ可能
- 詳細情報: TCP内部状態、メモリ使用量、タイマー情報まで確認できる
- モダン: iproute2パッケージに含まれ、現代のLinuxディストリビューションで標準搭載
ssはSocket Statisticsの略で、netstatの後継コマンド。ネットワーク接続の状態を高速に確認できる。
基本オプション
| オプション |
説明 |
-t |
TCP接続のみ表示 |
-u |
UDP接続のみ表示 |
-l |
LISTENしているソケットのみ表示 |
-a |
すべてのソケットを表示(LISTEN含む) |
-n |
ポート番号を数値で表示(名前解決しない) |
-p |
プロセス情報を表示(要root) |
-r |
ホスト名を名前解決して表示 |
-e |
拡張情報を表示 |
-m |
メモリ使用量を表示 |
-o |
タイマー情報を表示 |
-i |
内部TCP情報を表示 |
-s |
統計サマリーを表示 |
-4 |
IPv4のみ |
-6 |
IPv6のみ |
-x |
UNIXドメインソケット |
よく使うコマンド例
基本的な確認
| コマンド |
説明 |
ss |
確立済み接続を表示 |
ss -tuln |
LISTEN中のTCP/UDPポート一覧(数値表示) |
ss -tulnp |
上記 + プロセス情報付き |
ss -ta |
すべてのTCP接続を表示 |
ss -ua |
すべてのUDP接続を表示 |
ss -s |
ソケット統計サマリー |
プロセス・ポート確認
| コマンド |
説明 |
ss -tlnp |
LISTENしているTCPポートとプロセス |
ss -ulnp |
LISTENしているUDPポートとプロセス |
ss -p \| grep nginx |
nginx関連の接続を確認 |
ss -tlnp \| grep :80 |
ポート80を使用しているプロセス |
ss -tlnp \| grep :443 |
ポート443を使用しているプロセス |
接続状態の確認
| コマンド |
説明 |
ss -t state established |
ESTABLISHED状態の接続 |
ss -t state time-wait |
TIME-WAIT状態の接続 |
ss -t state close-wait |
CLOSE-WAIT状態の接続 |
ss -t state listening |
LISTEN状態のソケット |
ss -t state syn-sent |
SYN-SENT状態の接続 |
ss -t state syn-recv |
SYN-RECV状態の接続 |
フィルタリング
ポートでフィルタ
| コマンド |
説明 |
ss -tln sport = :22 |
送信元ポート22 |
ss -tln dport = :443 |
宛先ポート443 |
ss -tln sport = :80 or sport = :443 |
ポート80または443 |
ss -tln 'sport >= :1024' |
1024以上のポート |
ss -tln 'dport < :1024' |
1024未満のポート |
IPアドレスでフィルタ
| コマンド |
説明 |
ss -tn dst 192.168.1.1 |
宛先IPでフィルタ |
ss -tn src 192.168.1.0/24 |
送信元サブネットでフィルタ |
ss -tn dst 10.0.0.0/8 |
宛先サブネットでフィルタ |
複合フィルタ
# ポート80への接続でESTABLISHED状態のもの
ss -tn state established dport = :80
# 特定IPからの接続を確認
ss -tn src 203.0.113.50
# 複数条件(AND)
ss -tn 'dst 192.168.1.1 and dport = :22'
# 複数条件(OR)
ss -tn 'dport = :80 or dport = :443'
状態一覧(TCP State)
| 状態 |
説明 |
established |
接続確立済み |
syn-sent |
SYN送信済み(接続開始) |
syn-recv |
SYN受信済み(接続待ち) |
fin-wait-1 |
FIN送信済み |
fin-wait-2 |
FIN-ACK受信済み |
time-wait |
接続終了待ち |
close-wait |
相手からFIN受信、アプリ終了待ち |
last-ack |
最後のACK待ち |
closing |
同時クローズ |
listening |
接続待ち受け中 |
closed |
未使用 |
実務でよく使うワンライナー
サービス確認
# Webサーバーのポート確認
ss -tlnp | grep -E ':80|:443'
# メールサーバーのポート確認
ss -tlnp | grep -E ':25|:587|:465|:993|:995|:143|:110'
# SSHの接続確認
ss -tnp | grep :22
# PostgreSQLの接続確認
ss -tnp | grep :5432
接続数カウント
# ESTABLISHED接続の総数
ss -t state established | wc -l
# ポート80への接続数
ss -tn dport = :80 | wc -l
# IPごとの接続数(上位10件)
ss -tn | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -rn | head -10
# 状態別の接続数
ss -t | awk '{print $1}' | sort | uniq -c
# TIME-WAITの数を確認
ss -t state time-wait | wc -l
トラブルシューティング
# CLOSE-WAIT(アプリ側の問題の可能性)
ss -tnp state close-wait
# SYN-RECV多数(SYN Flood攻撃の可能性)
ss -tn state syn-recv | wc -l
# 特定ポートを使用しているプロセスのPID
ss -tlnp | grep :80 | awk '{print $7}'
# 接続元IPアドレス一覧
ss -tn state established | awk '{print $5}' | cut -d: -f1 | sort -u
netstat との対応表
| netstat |
ss |
説明 |
netstat -tuln |
ss -tuln |
LISTEN中のポート |
netstat -tulnp |
ss -tulnp |
上記 + プロセス |
netstat -an |
ss -an |
全接続(数値) |
netstat -s |
ss -s |
統計情報 |
netstat -r |
ip route |
ルーティング |
出力の見方
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 0 192.168.1.10:22 203.0.113.50:54321 users:(("sshd",pid=1234,fd=3))
| フィールド |
説明 |
| State |
接続状態 |
| Recv-Q |
受信キューのバイト数(0以外は処理遅延の可能性) |
| Send-Q |
送信キューのバイト数(0以外はネットワーク問題の可能性) |
| Local Address:Port |
ローカル側のIP:ポート |
| Peer Address:Port |
接続先のIP:ポート |
| Process |
プロセス名、PID、ファイルディスクリプタ |
Tips
- netstatより高速:
/proc/net/tcp を直接読むため大量接続時でも速い
- Recv-Q/Send-Qの監視: 値が大きい場合はボトルネックの可能性
- TIME-WAITが多い: 短時間に大量の接続/切断がある(通常は問題なし)
- CLOSE-WAITが多い: アプリがソケットを正しくクローズしていない可能性
- watchと組み合わせ:
watch -n 1 'ss -s' でリアルタイム監視
まとめ
ssコマンドは、現代のLinuxサーバー管理において必須のツールです。特に ss -tulnp(LISTENポート確認)と ss -tn state established(確立済み接続確認)の2つを覚えておくだけで、日常的なネットワーク確認作業がスムーズになります。netstatからの移行も、対応表を参考にすればスムーズに行えるでしょう。
コメント