2018年4月2日月曜日

tcpdump入門① (tcpdumpでよく使うオプションたち)

サーバー間通信がうまく動作しない場合などに、パケットキャプチャをして調査することがある。Linuxの場合、パケットキャプチャツールとして、tcpdumpが定番となっている。名前がTCPとなっているが、UDPの通信も確認できる。

本記事では2回にわけて、tcpdumpの使い方を説明する。1回目となる今回はtcpdumpの基礎的な使用方法と、よく使うオプションの説明を行う。次回では、実際にtcpdumpで取得したTCP通信のパケットキャプチャのデータを見て、どのような通信が行われているかを読み解いてみることにする。

tcpdumpの使い方

まずは、調査対象のインターフェース番号を確認する必要がある。-Dオプションで確認ができる。通常、CentOS 7では、3番が通常のネットワークインターフェースとなるようだ。

# tcpdump -D
------------------------------
1.nflog (Linux netfilter log (NFLOG) interface)
2.nfqueue (Linux netfilter queue (NFQUEUE) interface)
3.eno16780032
4.any (Pseudo-device that captures on all interfaces)
5.lo
------------------------------

インタフェースを指定し、すべてのパケットをキャプチャするコマンドは以下の通りとなる。なお、tcpdumpを終了する場合は、Ctrl+Cにて行うこと。

# tcpdump -i 3
------------------------------
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno16780032, link-type EN10MB (Ethernet), capture size 65535 bytes
10:30:56.887081 IP 192.168.11.110.ssh > 192.168.11.82.62780: Flags [P.], seq 2961489592:2961489832, ack 1367601915, win 274, length 240
10:30:56.887192 IP 192.168.11.82.62780 > 192.168.11.110.ssh: Flags [.], ack 240, win 8210, length 0
10:30:56.887514 IP 192.168.11.110.53846 > 192.168.11.31.domain: 17612+ PTR? 82.11.168.192.in-addr.arpa. (44)
10:30:56.887647 IP 192.168.11.31 > 192.168.11.110: ICMP 192.168.11.31 udp port domain unreachable, length 80
10:30:56.887674 IP 192.168.11.110.34744 > 192.168.11.31.domain: 17612+ PTR? 82.11.168.192.in-addr.arpa. (44)

~(以下略)~
------------------------------

上記のようにキャプチャはできるものの、すべてのパケットがキャプチャされてしまうことから大量の情報が表示されてしまい、解析することが困難となる。このような場合は、次節で述べるフィルター機能を使うとよい。

tcpdumpでよく使うフィルター機能

tcpdumpでは、条件に合致したパケットのみ表示させるフィルター機能が存在する。よく使うフィルター機能について、以下に記載する。

特定のホストの通信をキャプチャする

# tcpdump -i 3 host 192.168.11.112

特定のプロトコルの通信をキャプチャする

# tcpdump -i 3 port 25

特定のホストの特定のプロトコルの通信をキャプチャする

複数条件指定にて対応する。andやorを使えばよい。

# tcpdump -i 3 host 192.168.11.112 and port 25

送信元ホストと送信先ホストを指定する

送信元はsrc、送信先はdstで指定することができる。ただし、srcとdstを指定した場合は、戻りパケットがキャプチャされないため、通信の全体を確認したい場合は不向きである。

# tcpdump -i 3 src 192.168.11.112 and dst 192.168.11.110

tcpdumpでよく使うオプション

フィルター以外によく使うオプションを以下に記載する。

キャプチャの表示を詳細化する

以下3種類があり、下に行くほど詳細になるようだが、具体的にどのように詳細になるかというと不明である。とりあえず詳細にしたければ、一番詳細な-vvvにしておくとよいと思われる。

tcpdump -i 3 -v host 192.168.11.112
tcpdump -i 3 -vv host 192.168.11.112
tcpdump -i 3 -vvv host 192.168.11.112

IPアドレスをホスト名に変換させないで表示させる

tcpdumpは、デフォルトでIPアドレスをhostsやDNSで名前解決して表示する。IPアドレスの方がわかりやす場合もあるので、名前解決を抑止する場合は-nオプションを付与する。

tcpdump -i 3 -n host 192.168.11.112

プロトコル名をポート番号で表示させる

tcpdumpは、デフォルトでポート番号をプロトコル名に変換して表示する(たとえば、22番ポートならsshと表示される)。しかしこの機能は、かえってキャプチャを見る際にわかりにくくなることもあるので、そのような場合は、-nnオプションを使ってポート番号で表示させることができる。

tcpdump -i 3 -nn host 192.168.11.112

通信内容をASCIIで表示させる

-Aオプションを使うことで、実際の通信内容がASCIIで表示させる。これにより、通信内容を視覚的に理解しやすくなる。

tcpdump -i 3 -A host 192.168.11.112

以下表示例。

------------------------------
17:40:21.060227 IP 192.168.11.110.54942 > 192.168.11.112.25: Flags [P.], seq 29:146, ack 171, win 237, options [nop,nop,TS val 2436234930 ecr 3717090658], length 117
E.....@.@......n...p.....N.Hn..U...........
.5....MbMAIL FROM:<ex-1@example.com> SIZE=632 BODY=8BITMIME
RCPT TO:<ex-1@example.com> ORCPT=rfc822;ex-1@example.com
DATA
------------------------------

パケットキャプチャをファイルで出力する

-wオプションの後にファイル名を指定することで、パケットキャプチャをファイルとして出力することができる。

なお、-s 0のオプションは、古いtcpdumpでは1つのパケットの取得上限サイズが96バイトとなっており、それ以上の情報は切り捨てられてしまうので、65535バイトまで受け取ることができるようにする設定となる。ただし、最近のtcpdump(少なくともCentOS 7のtcpdump)ではデフォルト65535となったようなので、-sオプションは省略しても問題ない。

tcpdump -i 3 -s 0 -w test.cap host 192.168.11.112

出力されたファイルを確認すると、tcpdumpユーザーでファイルが作成されていることがわかる。

# ls -l
------------------------------
-rw-r--r--  1 tcpdump tcpdump  4277  3月 31 07:22 test.cap
------------------------------

このファイルはWiresharkで開くことができる。Wiresharkによって通信の流れがグラフィカルかつ整理されて表示することができるようになり、通信解析が非常にはかどる。


以上がtcpdumpの基本的な使用方法となる。次回は、tcpdumpで実際の通信の流れを調べてみることにする。

★次回はこちら↓
tcpdump入門② (パケットキャプチャからTCP通信を読み解く)
https://tech-mmmm.blogspot.jp/2018/04/tcpdump-tcp.html

0 件のコメント:

コメントを投稿

人気の投稿