Linuxでネットワークのトラブルシューティングやセキュリティ診断を行う際、強力なツールとなるのが「tcpdump」です。tcpdumpは、ネットワーク上を流れるパケットをリアルタイムでキャプチャし、中身を確認できる便利なコマンドラインツールです。GUIに頼らずに軽量で高性能な解析ができるため、システム管理者やセキュリティエンジニアには欠かせません。本記事では、tcpdumpの基本的な使い方から応用的なフィルタリング方法、ログ保存のテクニックまでを詳しく解説します。初心者の方でも読みながら実践できる内容を心がけていますので、ぜひ参考にしてください。
tcpdumpとは何か?
tcpdumpは、UNIX系のOSで利用できるネットワークパケットキャプチャツールです。コマンドラインから簡単にネットワークインターフェースを監視し、流れているパケットの情報を表示することができます。トラブルシューティング、セキュリティ調査、ネットワークの挙動確認など、幅広い用途に対応しており、シンプルながら非常に強力なツールです。
tcpdumpの大きな特長は、以下の通りです。
- 軽量で高速なパケットキャプチャが可能
- 詳細なパケット情報を表示
- BPF(Berkeley Packet Filter)による柔軟なフィルタリング
- 標準出力への表示やファイルへの保存が可能
tcpdumpは多くのLinuxディストリビューションで標準または簡単にインストールできます。
tcpdumpのインストール方法
多くのLinux環境ではtcpdumpがデフォルトでインストールされている場合もありますが、入っていない場合は以下のコマンドでインストールできます。
Debian/Ubuntu系
sudo apt update
sudo apt install tcpdump
Red Hat/CentOS系
sudo yum install tcpdump
Arch系
sudo pacman -S tcpdump
インストール後、tcpdump --version
でバージョンを確認できます。
基本的な使い方
tcpdumpを実行するには、管理者権限(root権限)が必要です。以下は最も基本的な使用例です。
sudo tcpdump
このコマンドで、デフォルトのネットワークインターフェースに流れるすべてのパケットが表示されます。ただし、情報量が多いため、以下のようにオプションをつけて絞り込むのが一般的です。
インターフェースの指定
利用可能なインターフェースを確認する:
tcpdump -D
特定のインターフェース(例:eth0)でキャプチャ:
sudo tcpdump -i eth0
パケット数の指定
指定した数のパケットだけをキャプチャ:
sudo tcpdump -c 10 -i eth0
特定のプロトコルや通信のフィルタリング
tcpdumpの強みは、フィルター機能にあります。以下のように条件を指定して、必要なパケットだけを表示することができます。
IPアドレスで絞る
特定の送信元または宛先IP:
sudo tcpdump host 192.168.1.10
送信元IPだけを指定:
sudo tcpdump src 192.168.1.10
宛先IPだけを指定:
sudo tcpdump dst 192.168.1.10
ポート番号で絞る
特定のポート通信(例:HTTPの80番):
sudo tcpdump port 80
送信元または宛先ポートを指定:
sudo tcpdump src port 22
sudo tcpdump dst port 443
プロトコルで絞る
sudo tcpdump tcp
sudo tcpdump udp
sudo tcpdump icmp
複数条件の組み合わせ(AND/OR/NOT)も可能です:
sudo tcpdump 'tcp and port 80 and src 192.168.1.10'
出力結果の見方
tcpdumpの出力結果は1行ごとに1つのパケット情報を示します。
例:
15:02:18.123456 IP 192.168.1.10.56234 > 93.184.216.34.http: Flags [S], seq 123456789, win 29200, options [mss 1460], length 0
この行を分解すると以下の意味になります。
- 15:02:18.123456:パケットのキャプチャ時刻
- IP:プロトコル(IPv4)
- 192.168.1.10.56234 > 93.184.216.34.http:送信元IPとポート > 宛先IPとポート
- Flags [S]:TCPフラグ(ここではSYN)
- seq:シーケンス番号
- win:ウィンドウサイズ
- length:データ長
パケットデータの保存と解析
パケットを後から解析したい場合は、ファイルに保存しておくことも可能です。
保存する
sudo tcpdump -i eth0 -w capture.pcap
この.pcap
ファイルは、WiresharkなどのGUIツールで開くこともできます。
保存したファイルを読み込む
tcpdump -r capture.pcap
フィルターをつけて読み込むこともできます。
tcpdump -r capture.pcap port 80
実用的な応用例
DNSの確認
sudo tcpdump -i eth0 port 53
HTTPS通信の確認(通信内容は暗号化されて見えない)
sudo tcpdump -i eth0 port 443
自分のPCが外部にどんな接続をしているか確認
sudo tcpdump -i eth0 and not src net 192.168.0.0/16
よく使うオプションまとめ
オプション | 内容 |
---|---|
-i | インターフェース指定 |
-c | キャプチャするパケット数 |
-w | ファイルに書き出し |
-r | 保存ファイルの読み込み |
-n | ホスト名を解決しない(高速) |
-nn | ホスト名+ポート名も解決しない |
-v, -vv | 詳細な表示(vの数で情報量が変わる) |
セキュリティに関する注意点
tcpdumpは非常に強力なツールである反面、通信内容を傍受することもできるため、使用には十分な注意が必要です。権限のあるユーザーのみが利用するべきであり、不要なデータの保存や共有は控えるべきです。また、社内ネットワークでの利用はポリシーを遵守しましょう。