Day 21: tcpdump入門 - ネットワーク解析ツールの基礎
はじめに
前回は、GUIベースで視覚的なネットワーク解析が可能なWiresharkを紹介しました。一方で、より軽量でコマンドラインから直接操作できる(CLI)ツールを求める場面もあると思います。そんなときに活躍するのがtcpdumpです。
tcpdumpは、ネットワークパケットをキャプチャし、リアルタイムで解析できる強力なCLIツールです。
例えば以下のような用途で使われます:
- リモートサーバーでのトラブルシューティング。
- 軽量環境での効率的なパケットキャプチャ。
- 自動化スクリプトとの組み合わせ。
ここでは、tcpdumpの基本的な使い方やフィルタリング機能、実際の解析例について解説していきます
tcpdumpとは?
tcpdumpは、ネットワーク解析の基本を押さえた、シンプルかつ強力なCLI(コマンドラインインターフェース)ベースのツールです。
UNIX系OS(Linux、macOSなど)で動作し、ネットワーク上を流れるデータ(パケット)をリアルタイムでキャプチャできます。
Wiresharkと同様にパケット解析が可能ですが、GUIを持たないため、軽量でリモートサーバーやリソースの限られた環境で特に効果を発揮します。
主な用途
-
トラブルシューティング
例えば、「特定のデバイスがネットワークに接続できない」や「パケット損失が頻繁に起きる」といった問題を特定するときに使用されます。 -
セキュリティ監視
不審なトラフィック(例:不正なポートスキャンやマルウェアの通信)がないか監視できます。
また、インシデント調査の際に、疑わしいパケットを収集して分析することが可能です。 -
プロトコル分析
TCP、UDP、ICMPといったプロトコルの動作を解析し、通信内容の詳細を把握できます。例えば、TCPハンドシェイクの動作確認やDNSクエリの詳細調査などに使用されます。 -
リモートサーバーでの軽量キャプチャ
GUIが使えない環境(例:SSH接続したリモートサーバー)でも、tcpdumpならパケットキャプチャが可能です。
特徴
-
軽量で高速
CLIベースなのでシステムリソースへの負担が少なく、ネットワーク負荷が高い状況でも快適に動作します。 -
柔軟なフィルタリング機能
「必要なデータだけ」をキャプチャできるフィルタリング機能を備えています。
例えば、特定のプロトコル(例:HTTP)、IPアドレス(例:192.168.1.1)、ポート番号(例:80)だけを記録することも可能です。 -
PCAP形式での保存
キャプチャしたデータをPCAP形式で保存でき、後でWiresharkや他の解析ツールでじっくり分析できます。
tcpdumpで迅速にデータを収集し、Wiresharkで視覚的に深掘りするといった使い方もよく行われます。 -
オープンソースで無料
無償で利用できるため、ネットワークエンジニアやセキュリティ専門家だけでなく、初心者も気軽に試せます。
基本的な使い方
インストール
tcpdumpは多くのLinuxディストリビューションに標準インストールされていますが、ない場合は以下のコマンドでインストール可能です。
-
Debian系(Ubuntuなど):
sudo apt install tcpdump
-
RHEL系(CentOSなど):
sudo yum install tcpdump
macOSの場合、Homebrewを使ってインストールできます。
brew install tcpdump
キャプチャの基本コマンド
-
インターフェースの確認
tcpdumpを実行するには、キャプチャ対象のネットワークインターフェースを指定する必要があります。以下のコマンドで利用可能なインターフェースを確認できます。tcpdump -D
例:
1. en0 (Wi-Fi) 2. lo0 (Local Loopback)
-
インターフェースを指定してキャプチャを開始
以下のコマンドで指定したインターフェースのトラフィックをキャプチャします。sudo tcpdump -i en0
よく使うオプション:
-
-c [パケット数]
:指定したパケット数でキャプチャを停止。 -
-w [ファイル名]
:キャプチャデータをPCAPファイルに保存。
例:100パケットをキャプチャし、保存する
sudo tcpdump -i en0 -c 100 -w capture.pcap
-
フィルタリングの基本
tcpdumpは、Wiresharkと同様にフィルタリング機能があります。これにより不要なトラフィックを除外して「必要なデータだけ」をキャプチャすることができます。以下は代表的なフィルタ条件です。
-
プロトコルの指定
特定のプロトコル(例:TCP、UDP、ICMP)のトラフィックをキャプチャ。sudo tcpdump -i en0 tcp
-
IPアドレスの指定
送信元または宛先のIPアドレスを指定。sudo tcpdump -i en0 host 192.168.1.1
-
ポート番号の指定
特定のポートで通信するトラフィックをキャプチャ。sudo tcpdump -i en0 port 80
-
複合条件
AND、OR、NOTを使用して複数条件を組み合わせ。sudo tcpdump -i en0 'tcp and port 80'
tcpdumpの解析例
HTTP通信をキャプチャする
HTTP通信は、ウェブブラウザとサーバー間でやり取りされるトラフィックです。以下のコマンドでHTTPトラフィックをキャプチャできます。
sudo tcpdump -i en0 'tcp port 80'
- ウェブブラウザでHTTPサイト(例:http://example.com)にアクセスします。
- tcpdumpが通信内容をキャプチャして表示します。
-
GET
リクエストやレスポンスステータス(例:200 OK)を確認できます。
DNSクエリの解析
DNSトラフィックは、デバイスがウェブサイトのドメイン名(例:www.google.com)をIPアドレスに解決する際に発生します。
以下のコマンドでDNSクエリをキャプチャ:
sudo tcpdump -i en0 'udp port 53'
解析ポイント:
- クエリの送信元と宛先IP。
- リクエストされたドメイン名。
- レスポンスデータ(例:IPアドレス)。
使用上の注意点
許可された環境でのみ使用
tcpdumpでキャプチャしたデータには、機密情報(パスワード、認証トークンなど)が含まれる可能性があります。許可されたネットワークでのみ使用し、収集したデータの取り扱いには注意してください。
ストレージ容量に注意
tcpdumpは膨大なトラフィックデータを生成する可能性があるため、キャプチャ範囲やパケット数を適切に制限しましょう。
小テスト
Q1: tcpdumpで使用可能なネットワークインターフェースを表示するコマンドはどれですか?
a) tcpdump -i all
b) tcpdump -D
c) tcpdump -interfaces
d) tcpdump -list
Q2: HTTP通信をキャプチャするフィルタはどれですか?
a) port 53
b) tcp port 80
c) udp port 443
d) host 80
Q3: キャプチャデータをPCAP形式で保存するためのオプションは何ですか?
a) -s
b) -c
c) -w
d) -o
Q4: DNSクエリをキャプチャするための適切なフィルタはどれですか?
a) udp port 53
b) tcp port 80
c) host 192.168.1.1
d) port 443
解答
-
Q1: b)
tcpdump -D
-
Q2: b)
tcp port 80
-
Q3: c)
-w
-
Q4: a)
udp port 53
まとめ
tcpdumpは、軽量かつ強力なネットワーク解析ツールであり、特にリモートサーバー環境やコマンドライン操作に慣れたユーザーにとって最適なツールです。基本的なフィルタリング機能を活用するだけでも、日常的なトラブルシューティングやセキュリティ調査に大いに役立ちます。是非学習にも活かしてみてください。
Discussion