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

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

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

Linuxサーバー管理において、ネットワーク接続の状態確認は日常的に行う作業です。従来はnetstatコマンドが使われてきましたが、現在はより高速で機能豊富な「ss(Socket Statistics)」コマンドが推奨されています。

ssコマンドは/proc/net/tcpを直接読み取るため、数千〜数万の接続がある本番サーバーでもストレスなく動作します。本記事では、ssコマンドの基本オプションから実務で役立つワンライナーまで、コピー&ペーストですぐに使えるチートシートとしてまとめました。

ssコマンドを使うメリット

  • 高速: netstatより圧倒的に速い。大量接続時でも瞬時に結果を返す
  • 豊富なフィルタリング: ポート、IP、接続状態で柔軟にフィルタ可能
  • 詳細情報: TCP内部状態、メモリ使用量、タイマー情報まで確認できる
  • モダン: iproute2パッケージに含まれ、現代のLinuxディストリビューションで標準搭載

ssはSocket Statisticsの略で、netstatの後継コマンド。ネットワーク接続の状態を高速に確認できる。


基本オプション

オプション説明
-tTCP接続のみ表示
-uUDP接続のみ表示
-lLISTENしているソケットのみ表示
-aすべてのソケットを表示(LISTEN含む)
-nポート番号を数値で表示(名前解決しない)
-pプロセス情報を表示(要root)
-rホスト名を名前解決して表示
-e拡張情報を表示
-mメモリ使用量を表示
-oタイマー情報を表示
-i内部TCP情報を表示
-s統計サマリーを表示
-4IPv4のみ
-6IPv6のみ
-xUNIXドメインソケット

よく使うコマンド例

基本的な確認

コマンド説明
ss確立済み接続を表示
ss -tulnLISTEN中のTCP/UDPポート一覧(数値表示)
ss -tulnp上記 + プロセス情報付き
ss -taすべてのTCP接続を表示
ss -uaすべてのUDP接続を表示
ss -sソケット統計サマリー

プロセス・ポート確認

コマンド説明
ss -tlnpLISTENしているTCPポートとプロセス
ss -ulnpLISTENしているUDPポートとプロセス
ss -p | grep nginxnginx関連の接続を確認
ss -tlnp | grep :80ポート80を使用しているプロセス
ss -tlnp | grep :443ポート443を使用しているプロセス

接続状態の確認

コマンド説明
ss -t state establishedESTABLISHED状態の接続
ss -t state time-waitTIME-WAIT状態の接続
ss -t state close-waitCLOSE-WAIT状態の接続
ss -t state listeningLISTEN状態のソケット
ss -t state syn-sentSYN-SENT状態の接続
ss -t state syn-recvSYN-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-sentSYN送信済み(接続開始)
syn-recvSYN受信済み(接続待ち)
fin-wait-1FIN送信済み
fin-wait-2FIN-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 との対応表

netstatss説明
netstat -tulnss -tulnLISTEN中のポート
netstat -tulnpss -tulnp上記 + プロセス
netstat -anss -an全接続(数値)
netstat -sss -s統計情報
netstat -rip 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からの移行も、対応表を参考にすればスムーズに行えるでしょう。