【保存版】ssコマンドチートシート:netstat後継のソケット確認を完全網羅

チートシート

【保存版】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からの移行も、対応表を参考にすればスムーズに行えるでしょう。

コメント

タイトルとURLをコピーしました