CTC 教育サービス
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes
こんにちは。加賀結衣(かが ゆい)と申します。
このコラムでは、株式会社リックテレコムの「Windows/Linuxのトラブル追跡実践ノウハウ」をもとに、私が実際にPCに触りながら学んだことをまとめていきます。
コラム内のページ表記は、この書籍のページを示します(Pはページです)。
日々発生するコンピュータのトラブルに対し、どのようなツールを使い、どのような情報を収集すればよいか知りたいと思われている初心者の方に、このコラムが少しでもお役に立てば嬉しいです。
今回は、通信の解析と生成について学びましょう。
---------------------------------------------------------------------
第5章 ネットワークのトラブルシューティング
5.3 通信の解析と生成
5.3.1 ネットワーク通信の内容を保存する(p.283)
5.3.2 特定ポート/特定ホストの通信のみ保存する(p.272)
5.3.3 保存した通信データからSMTP通信データ、HTTP通信データを抽出する(p.275)
5.3.4 抽出したデータをネットワークに送信する(p.280)
5.3.5 HTTPS通信の内容を検査する(p.280)
----------------------------------------------------------------------
5.3 通信の解析と生成
5.3.1 ネットワーク通信の内容を保存する(p.283)
ネットワークに関するトラブルシュートの際には、ネットワークに実施に流れているデータを取得して解析することがあります。
Linuxではtcpdumpコマンドが使用できますが、Windowsの場合にはネットワーク解析ツールを利用することが多いと言えます。
ツールとしては、例えば、Wireshark(ワイヤーシャーク)や MicrosoftのNetwork Monitor(ネットワークモニター)などがあります。
■Linuxの場合
Linuxの場合、tcpdumpコマンドを利用して送受信されているパケットを調査できます。
-wオプションにて、キャプチャしたパケットをファイルに保存できることについては以前述べましたが、-i デバイス名で、インターフェースを指定してパケットを調査することができます。
構文にすると、以下のようになります。
tcpdump -i デバイス名 -w ファイル名
例えば、tcpdump -i eth0 -w output.cap 等と指定します。
■Windowsの場合
Windowsの場合、Wireshark(ワイヤーシャーク)を利用してパケットを調査できます。
Wiresharkは以下からダウンロードできます。
https://www.wireshark.org/download.html
「Stable Release」以下に提示されているものが、最も安定しているバージョンですのでインストールする場合は、この中から選ぶとよいかもしれません。
あるいは、Network Monitorを利用する場合は、以下からダウンロードできます。
https://www.microsoft.com/en-us/download/details.aspx?id=4865
以下では、Wiresharkをインストールして使ってみましょう。
上記のサイトからWiresharkをダウンロードし、画面表示に従ってインストールします。
インストール後、Wiresharkを起動し、以下のように上部のメニューバーから[キャプチャ]を選択し、[開始]をクリックするとパケット採取を開始できます。
キャプチャ中は、上部にキャプチャ中である旨が表示されます。
なお、上部のメニューバーの[キャプチャ]内の[停止]をクリックするとパケット採取を終了できます。
採取したデータを保存したい場合は、[ファイル] - [保存]をクリックすると任意のファイル名で保存できます。
また、保存したファイルは、[ファイル] - [開く]にて対象ファイルを選択すると開くことができます。
5.3.2 特定ポート/特定ホストの通信のみ保存する(p.272)
ネットワークに関するトラブルシュートを行う際には、対象のポートやホスト、通信データの種類などで対象を絞って調査ログを採取することが効率的です。
ネットワークに常時接続しているマシンでは常に様々なデータ通信が発生しており、対象を絞らないとデータ量が膨大になる可能性があります。
■Linuxの場合
Linuxの場合、tcpdumpコマンドで、ポートを指定したいときは port ポート番号、IPアドレスを指定したいときは host IPアドレスというオプションで対象のポートやIPアドレスを指定できます。
また、ip proto プロトコル名で、プロトコール名を指定したり、src で送信元、dst で送信先をフィルタリング対象として指定したりすることもできます。
例えば、srt host 10.3.221.160 and port 80 とすると、送信元ホストの対象IPアドレスが10.3.221.160で、かつ、対象ポート番号80のパケットを取得対象として指定することができます。
■Windowsの場合
Wiresharkを使用する場合には、[キャプチャ] - [キャプチャフィルター]を選択し、開いた画面で右下の + をクリックして新規フィルタを作成します。
新規キャプチャフィルタの画面が開いたら、右にフィルタ内容としてport 80 and 10.3.221.160と入力し、OKをクリックすると、対象ポートを80、対象ホストのIPアドレスを10.3.221.160にフィルタリングした状態でデータをキャプチャすることができます。
5.3.3 保存した通信データからSMTP通信データ、HTTP通信データを抽出する(p.275)
次に、保存した通信データからプロトコル別にデータを抽出する方法を確認してみましょう。
Wiresharkをを使用して、簡単に抽出することができます。
SMTP通信を抽出する場合には、まずtcp.port == 25 とフィルタをかけることで25番ポートを使用した通信にしぼって表示させることができます。
また、HTTP通信を抽出する場合には、まずtcp.port == 80 とフィルタをかけることで80番ポートを使用した通信にしぼって表示させることができます。
以下は、tcp.port == 80 のフィルタ実行例です。
ポートでフィルタをかけた後は、確認したい通信のパケットデータを選択し、右クリックして[追跡]- [TCPストリーム]を選択すると、対象のデータが表示されます。
抽出したデータは[Save as]をクリックして任意の名称で保存します。
その後、対象ファイルをメモ帳(テキストエディタ)で開いて対象のデータを抽出します。
5.3.4 抽出したデータをネットワークに送信する(p.280)
抽出したデータをネットワークに送信する方法として、telnetコマンドを利用する方法があります。
これは、Windows、Linuxのいずれでも利用できます。
また、Linuxではnetcatコマンドを利用してデータ送信することも可能です。
詳細はP.280 以下をご参照ください。
5.3.5 通信の内容を検査する(p.280)
HTTPSなど暗号化された通信の内容を確認したい場合には、Wiresharkやmitmproxy、Fiddlerなどを利用できます。
これまで上記で確認してきたWiresharkでは、読み込んだキャプチャデータに記録されている通信先のサーバの秘密鍵を取得できる場合にのみHTTPS通信が複合できます。
また、mitmproxy は man in the middle 型のプロキシサーバーのツールで、以下のサイトで詳細を確認できます。
現時点では以下からダウンロードできます。
https://github.com/mitmproxy/mitmproxy/releases/tag/v2.0.2
Linux用のmitmproxyを例にすると、起動時にはmitmproxy -p ポート番号というコマンドで、指定したポートでプロキシの待ち受けを開始できます。
次に、mitmproxyを介してHTTPS通信を行うクライアントを設定します。
Internet Explorerを利用する場合、[インターネット オプション] - [接続タブ]の[LANの設定]にてプロキシサーバー配下の[LANにプロキシサーバーを使用する]にチェックを入れ、アドレスとポートにmitmproxyを実行しているホストのIPアドレスと待ち受けポート番号を入力します。
HTTPS通信が開始されると、mitmproxyのコンソールに通信内容が表示されていくのでこちらで通信詳細を確認することが可能です。
なお、Internet Explorerにmitmproxyの証明書を登録しておくことも可能です。
★ネットワークに関するトラブルシュートの際には、tcpdumpコマンドやWiresharkを利用して、ネットワークに実施に流れているデータを取得して解析することができます。
★ネットワークに関するトラブルシュートを行う際には、対象のポートやホスト、通信データの種類などで対象を絞って調査ログを採取することが効率的です。
指定したポート以外で発生しているデータ通信が製品の挙動に影響したりすることもあるため、対象を絞る際には注意が必要です。
なお、サーバ(OS)・ネットワーク分野における原因究明の仕方や切り分けなどを行う方法を基礎から学びたい方には、CTC教育サービスのオリジナルコースである
「システムトラブルシュート(ファーストステップ)」
「システムトラブルシュート(ネクストステップ)」がお勧めです。
詳細は、以下のリンクをご参照くださいませ。
http://www.school.ctc-g.co.jp/course/SSE01.html
http://www.school.ctc-g.co.jp/course/SSE02.html
最後まで読んでくださってどうもありがとうございました。次回もどうぞお楽しみに。
[IT研修]注目キーワード Python UiPath(RPA) 最新技術動向 Microsoft Azure Docker Kubernetes