アーカイブにあるこのチュートリアルでは、ss コマンドを使用してネットワーク情報を取得する方法を学びます。
Linux には、ほとんどすべてのニーズを満たすために利用できる、かなり大規模なツールの配列があります。 開発からセキュリティ、生産性、管理まで…それを成し遂げなければならないとき、Linux はそこに奉仕するためにあります。 管理者が頻繁に利用するツールの一つにnetstatがある。 しかし、netstat コマンドは、より速く、より人間に読みやすい ss コマンドに取って代わられ、非推奨となった。
ss コマンドはソケットの統計情報をダンプするためのツールで、netstat と同様の方法で情報を表示します (よりシンプルで高速ですが)。 また、ss コマンドは、他の多くのツールよりもさらに多くの TCP および状態情報を表示することができます。 ss は新しい netstat なので、Linux マシンやネットワーク接続で何が起こっているかについての情報をより簡単に得ることができるように、このツールの活用方法を見ていきます。
ssコマンドライン ユーティリティは、PACKET、TCP、UDP、DCCP、RAWおよびUnixドメイン ソケットなどの統計情報を表示できます。 netstat の代替となるこのユーティリティは、より使いやすくなっています (ss がどれほど簡単か、すぐにわかるように man ページを比較してみてください)。 ss を使うと、あなたの Linux マシンが他のマシン、ネットワーク、サービスとどのように通信しているか、ネットワーク接続、ネットワーキングプロトコル統計、Linux ソケット接続の詳細など、非常に詳細な情報を得ることができます。
管理者キットの新しいツールとして、ss を使いこなしましょう。
基本的な使い方
ssコマンドは、Linuxプラットフォームの他のコマンドと同様に動作します。 コマンド実行ファイルを発行し、利用可能なオプションの任意の組み合わせでそれに従います。 ss のマニュアルページ (コマンド man ss を実行) を見ると、netstat コマンドに見られるようなオプションがほとんどないことに気がつくと思います。
ss コマンドを引数やオプションなしで発行すると、接続が確立されている TCP ソケットの完全なリストが返されます (図 1)。
ss コマンド (オプションなし) はかなりの量の情報 (すべての tcp、udp、および unix ソケット接続の詳細) を表示するので、このコマンド出力をファイルに送信して後で見ることもできます:
ss > ss_output
もちろん、非常に基本的なコマンドはすべての状況に対して有用というわけではありません。 現在リッスンしているソケットを表示したいだけならどうでしょうか。
ss -l
上記のコマンドは、現在のリッスン中のソケットのリストのみを出力します。
もう少し具体的にするには、次のように考えてみてください。
デフォルトでは、-t、-u、-x オプションを使用するだけでは確立された(または接続された)接続のみがリストアップされるだけです。
ss -t -a
上記のコマンドの出力には、すべての TCP ソケットが含まれます (図 3)。
上記の例では、私のマシンの IP アドレスから、さまざまなポートを通じて、さまざまな IP アドレスに、(さまざまな状態の)UDP 接続が行われていることが分かります。 このコマンドの netstat バージョンとは異なり、ss はこれらの接続に責任のある PID とコマンド名を表示しない。 それでも、トラブルシューティングを始めるには十分な情報がある。 これらのポートやURLのいずれかが疑わしい場合、どのIPアドレス/ポートが接続を行っているかを知ることができます。 これにより、問題のトラブルシューティングの初期段階で役立つ情報を入手することができます。
TCP ステートによる ss のフィルタリング
ss コマンドで使用できる非常に便利なオプションの 1 つに、TCP ステート (接続の「ライフ ステージ」) を使用してフィルタリングする能力があります。 状態を使えば、ssコマンドの結果をより簡単にフィルタリングすることができます。 ss ツールはすべての標準的な TCP ステートと一緒に使うことができます。
-
established
-
syn-sent
-
syn-recv
-
fin-wait-1
-
fin-wait-2
-
time-
-
fin-wait-2
- time-
-
closed
-
close-wait
-
last-ack
-
listening
-
closing
sys recognizes他の有効な状態の識別子は、次のとおりです。
-
all (上記の全ての状態)
-
connected (listen と closed を除く全ての状態)
-
synchronized (syn-sent を除く全ての接続状態)
-
bucket (minisocket として維持されている状態, 例えば、time-wait や
-
syn-recv)
-
big (bucket stateと反対)
状態を扱うための構文は簡単で、次のようになります。
For tcp ipv4:ss -4 state FILTERFor tcp ipv6:ss -6 state FILTER
ここで、FILTERは使用する状態の名前です。
例えば、マシン上のすべてのリスニングIPv4ソケットを表示する場合を考えてみましょう。
ss -4 state listening
このコマンドの結果は、図 4 のようになります。
Show connected sockets from specific address
ssに割り当てできる1つの便利な作業は、別の IP アドレスによる接続を報告させるというものです。 例えば、IP アドレス 192.168.1.139 のマシンがあなたのサーバに接続したかどうか/どのように接続したかを調べたいとします。 この場合、
ss dst 192.168.1.139
というコマンドを実行すると、ソケットのNetid、状態、ローカルIP:ポート、リモートIP:ポートが報告されます(図5)。
ss コマンドを活用する
Linuxサーバーやネットワークのトラブルシューティングを行うために、ssコマンドは非常に多くのことを行うことができます。 ss のマニュアルページ (コマンド man ss を実行) を読むのに時間がかかるのは当然でしょう。
The Linux Foundation と edX が提供する無料の「Introduction to Linux」コースで、Linux についてもっと学びましょう。