📘

Day 21: tcpdump入門 - ネットワーク解析ツールの基礎

2024/11/18に公開

はじめに

前回は、GUIベースで視覚的なネットワーク解析が可能なWiresharkを紹介しました。一方で、より軽量でコマンドラインから直接操作できる(CLI)ツールを求める場面もあると思います。そんなときに活躍するのがtcpdumpです。

tcpdumpは、ネットワークパケットをキャプチャし、リアルタイムで解析できる強力なCLIツールです。
例えば以下のような用途で使われます:

  • リモートサーバーでのトラブルシューティング。
  • 軽量環境での効率的なパケットキャプチャ。
  • 自動化スクリプトとの組み合わせ。

ここでは、tcpdumpの基本的な使い方やフィルタリング機能、実際の解析例について解説していきます


tcpdumpとは?

tcpdumpは、ネットワーク解析の基本を押さえた、シンプルかつ強力なCLI(コマンドラインインターフェース)ベースのツールです。
UNIX系OS(Linux、macOSなど)で動作し、ネットワーク上を流れるデータ(パケット)をリアルタイムでキャプチャできます。

Wiresharkと同様にパケット解析が可能ですが、GUIを持たないため、軽量でリモートサーバーやリソースの限られた環境で特に効果を発揮します。

主な用途

  1. トラブルシューティング
    例えば、「特定のデバイスがネットワークに接続できない」や「パケット損失が頻繁に起きる」といった問題を特定するときに使用されます。

  2. セキュリティ監視
    不審なトラフィック(例:不正なポートスキャンやマルウェアの通信)がないか監視できます。
    また、インシデント調査の際に、疑わしいパケットを収集して分析することが可能です。

  3. プロトコル分析
    TCP、UDP、ICMPといったプロトコルの動作を解析し、通信内容の詳細を把握できます。例えば、TCPハンドシェイクの動作確認やDNSクエリの詳細調査などに使用されます。

  4. リモートサーバーでの軽量キャプチャ
    GUIが使えない環境(例:SSH接続したリモートサーバー)でも、tcpdumpならパケットキャプチャが可能です。

特徴

  1. 軽量で高速
    CLIベースなのでシステムリソースへの負担が少なく、ネットワーク負荷が高い状況でも快適に動作します。

  2. 柔軟なフィルタリング機能
    「必要なデータだけ」をキャプチャできるフィルタリング機能を備えています。
    例えば、特定のプロトコル(例:HTTP)、IPアドレス(例:192.168.1.1)、ポート番号(例:80)だけを記録することも可能です。

  3. PCAP形式での保存
    キャプチャしたデータをPCAP形式で保存でき、後でWiresharkや他の解析ツールでじっくり分析できます。
    tcpdumpで迅速にデータを収集し、Wiresharkで視覚的に深掘りするといった使い方もよく行われます。

  4. オープンソースで無料
    無償で利用できるため、ネットワークエンジニアやセキュリティ専門家だけでなく、初心者も気軽に試せます。


基本的な使い方

インストール

tcpdumpは多くのLinuxディストリビューションに標準インストールされていますが、ない場合は以下のコマンドでインストール可能です。

  • Debian系(Ubuntuなど)
    sudo apt install tcpdump
    
  • RHEL系(CentOSなど)
    sudo yum install tcpdump
    

macOSの場合、Homebrewを使ってインストールできます。

brew install tcpdump

キャプチャの基本コマンド

  1. インターフェースの確認
    tcpdumpを実行するには、キャプチャ対象のネットワークインターフェースを指定する必要があります。以下のコマンドで利用可能なインターフェースを確認できます。

    tcpdump -D
    

    1. en0 (Wi-Fi)
    2. lo0 (Local Loopback)
    
  2. インターフェースを指定してキャプチャを開始
    以下のコマンドで指定したインターフェースのトラフィックをキャプチャします。

    sudo tcpdump -i en0
    

    よく使うオプション

    • -c [パケット数]:指定したパケット数でキャプチャを停止。
    • -w [ファイル名]:キャプチャデータをPCAPファイルに保存。

    :100パケットをキャプチャし、保存する

    sudo tcpdump -i en0 -c 100 -w capture.pcap
    

フィルタリングの基本

tcpdumpは、Wiresharkと同様にフィルタリング機能があります。これにより不要なトラフィックを除外して「必要なデータだけ」をキャプチャすることができます。以下は代表的なフィルタ条件です。

  1. プロトコルの指定
    特定のプロトコル(例:TCP、UDP、ICMP)のトラフィックをキャプチャ。

    sudo tcpdump -i en0 tcp
    
  2. IPアドレスの指定
    送信元または宛先のIPアドレスを指定。

    sudo tcpdump -i en0 host 192.168.1.1
    
  3. ポート番号の指定
    特定のポートで通信するトラフィックをキャプチャ。

    sudo tcpdump -i en0 port 80
    
  4. 複合条件
    AND、OR、NOTを使用して複数条件を組み合わせ。

    sudo tcpdump -i en0 'tcp and port 80'
    

tcpdumpの解析例

HTTP通信をキャプチャする

HTTP通信は、ウェブブラウザとサーバー間でやり取りされるトラフィックです。以下のコマンドでHTTPトラフィックをキャプチャできます。

sudo tcpdump -i en0 'tcp port 80'
  1. ウェブブラウザでHTTPサイト(例:http://example.com)にアクセスします。
  2. tcpdumpが通信内容をキャプチャして表示します。
  3. 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


解答

  1. Q1: b) tcpdump -D
  2. Q2: b) tcp port 80
  3. Q3: c) -w
  4. Q4: a) udp port 53

まとめ

tcpdumpは、軽量かつ強力なネットワーク解析ツールであり、特にリモートサーバー環境やコマンドライン操作に慣れたユーザーにとって最適なツールです。基本的なフィルタリング機能を活用するだけでも、日常的なトラブルシューティングやセキュリティ調査に大いに役立ちます。是非学習にも活かしてみてください。

Discussion