(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Linux】tcpdumpで特定ポートのパケットを取得し解析する流れ

スポンサーリンク

はじめに

Linux環境にてNTPデーモンを起動してNTPサーバと通信しているパケットを取得し、Windows環境のWiresharkに読ませる流れとそのパケットの中身について説明します。

環境情報
  • Debian GNU/Linux 9
  • Wireshark 3.2.2

事前情報

NTPサーバは「インターネットマルチフィード(MFEED) 時刻情報提供サービス for Public」を利用しています。

# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*ntp3.jst.mfeed. 133.243.236.19   2 u   34  256  377  160.231   -0.137   0.150

ちなみにrefidとは参照しているサーバーの更に上位のNTPサーバを指しているので参照しているNTPサーバのIPアドレスはまた別となります。

# ping ntp.jst.mfeed.ad.jp
PING ntp.jst.mfeed.ad.jp (210.173.160.87) 56(84) bytes of data.
64 bytes from ntp3.jst.mfeed.ad.jp (210.173.160.87): icmp_seq=1 ttl=60 time=155 ms
...

パケットキャプチャ

tcpdumpが入っていない場合は以下コマンドでインストールします。

# apt-get install tcpdump

以下がインストールされています。

# tcpdump --version
tcpdump version 4.9.3
libpcap version 1.8.1
OpenSSL 1.0.2u  20 Dec 2019

NTPはポート123で通信されているので以下コマンドでtest.capとしてパケットを残します。

# tcpdump -s0 -i eth0 -X port 123 -w test.cap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
^C2 packets captured
3 packets received by filter
0 packets dropped by kernel

Ctrl+Cにて停止しますが、上を見れば分かる通り2つのパケットがキャプチャーできています。

ちなみに-wを外せば標準出力にて確認できます。

# tcpdump -s0 -i eth0 -X port 123
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
... IP instance-1.hoge.internal.ntp > ntp3.jst.mfeed.ad.jp.ntp: NTPv4, Client, length 48
        0x0000:  45b8 .......
...
        0x0040:  b0d7 ......

パケットを解析

Wiresharkでtest.capをオープンすると以下のように確かに2つのパケットが確認できます。

f:id:mtiit:20200412205122p:plain
NTP通信がキャプチャーできている

UDPにて通信が発生しており送信元も送信先も123であることが分かります。

User Datagram Protocol, Src Port: 123, Dst Port: 123
    Source Port: 123
    Destination Port: 123
    Length: 56
...

またクライアントのReference IDは指定しているNTPサーバですがサーバからの返答には上位サーバが格納されています。

Reference ID: 133.243.236.19

終わりに

今回は123に絞って通信を取得しましたが以下のようにオプションを変更すれば全てのパケットを取得できます。

# tcpdump -s0 -i eth0 -X -w test.cap

怪しい通信がある際の調査方法の参考になれば幸いです。