★前回はこちら↓
tcpdump入門① (tcpdumpでよく使うオプションたち)
https://tech-mmmm.blogspot.jp/2018/04/tcpdump-tcpdump.html
SMTPのパケットをキャプチャしてみる
実際にSMTPのパケットをキャプチャしてみよう。環境としては以下の通りとなる。・メール送信元:192.168.11.110
・メール送信先:192.168.11.112
メール送信元からメール送信先に、1通のメールを送信する際のパケットをキャプチャ結果を以下に記載する。
# tcpdump -i 3 -nn host 192.168.11.112 and port 25
------------------------------
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eno16780032, link-type EN10MB (Ethernet), capture size 65535 bytes
22:38:40.599031 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [S], seq 2738265213, win 29200, options [mss 1460,sackOK,TS val 1417334469 ecr 0,nop,wscale 7], length 0
22:38:40.599564 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [S.], seq 1404691787, ack 2738265214, win 28960, options [mss 1460,sackOK,TS val 2698190197 ecr 1417334469,nop,wscale 7], length 0
22:38:40.599583 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [.], ack 1, win 229, options [nop,nop,TS val 1417334469 ecr 2698190197], length 0
・・・★①
22:38:40.615489 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [P.], seq 1:42, ack 1, win 227, options [nop,nop,TS val 2698190213 ecr 1417334469], length 41
22:38:40.615511 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [.], ack 42, win 229, options [nop,nop,TS val 1417334485 ecr 2698190213], length 0
22:38:40.615568 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [P.], seq 1:29, ack 42, win 229, options [nop,nop,TS val 1417334485 ecr 2698190213], length 28
22:38:40.615584 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [.], ack 29, win 227, options [nop,nop,TS val 2698190214 ecr 1417334485], length 0
22:38:40.616588 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [P.], seq 42:171, ack 29, win 227, options [nop,nop,TS val 2698190215 ecr 1417334485], length 129
22:38:40.616663 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [P.], seq 29:140, ack 171, win 237, options [nop,nop,TS val 1417334486 ecr 2698190215], length 111
22:38:40.632369 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [P.], seq 171:236, ack 140, win 227, options [nop,nop,TS val 2698190230 ecr 1417334486], length 65
22:38:40.632458 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [P.], seq 140:753, ack 236, win 237, options [nop,nop,TS val 1417334502 ecr 2698190230], length 613
22:38:40.637043 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [P.], seq 236:287, ack 753, win 236, options [nop,nop,TS val 2698190235 ecr 1417334502], length 51
・・・★②
22:38:40.637186 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [F.], seq 753, ack 288, win 237, options [nop,nop,TS val 1417334507 ecr 2698190235], length 0
22:38:40.637247 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [.], ack 754, win 236, options [nop,nop,TS val 2698190235 ecr 1417334507], length 0
・・・★③
^C
15 packets captured
15 packets received by filter
0 packets dropped by kernel
------------------------------
★①までが、TCPの通信開始時に実施される3-Wayハンドシェイクとなる。
------------------------------
22:38:40.599031 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [S], seq 2738265213, win 29200, options [mss 1460,sackOK,TS val 1417334469 ecr 0,nop,wscale 7], length 0
22:38:40.599564 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [S.], seq 1404691787, ack 2738265214, win 28960, options [mss 1460,sackOK,TS val 2698190197 ecr 1417334469,nop,wscale 7], length 0
22:38:40.599583 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [.], ack 1, win 229, options [nop,nop,TS val 1417334469 ecr 2698190197], length 0
------------------------------
上記のオレンジ網掛け箇所がTCPパケットのフラグとなっている。フラグについては、tcpdumpのmanページの「TCP Packets」の項目に説明がある。
------------------------------
Flags are some combination of S (SYN), F (FIN), P (PUSH), R (RST), U (URG), W (ECN CWR), E (ECN-Echo) or `.' (ACK), or `none' if no flags are set.
------------------------------
以上より、"S":SYN、".":ACKとなることがわかる。つまり、SYN→SYN/ACK→ACKの3-Wayハンドシェイクが実施されていることがわかる。
また、緑網掛け箇所はデータ長を表すが、3-Wayハンドシェイクではデータを持たないため、0となっている。詳細は割愛するが、length 0の場合、前回受信したシーケンス番号+1の値でackを返す。
★②からは、実際のデータパケットのやり取りとなる。
------------------------------
22:38:40.615489 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [P.], seq 1:42, ack 1, win 227, options [nop,nop,TS val 2698190213 ecr 1417334469], length 41
22:38:40.615511 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [.], ack 42, win 229, options [nop,nop,TS val 1417334485 ecr 2698190213], length 0
22:38:40.615568 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [P.], seq 1:29, ack 42, win 229, options [nop,nop,TS val 1417334485 ecr 2698190213], length 28
22:38:40.615584 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [.], ack 29, win 227, options [nop,nop,TS val 2698190214 ecr 1417334485], length 0
22:38:40.616588 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [P.], seq 42:171, ack 29, win 227, options [nop,nop,TS val 2698190215 ecr 1417334485], length 129
22:38:40.616663 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [P.], seq 29:140, ack 171, win 237, options [nop,nop,TS val 1417334486 ecr 2698190215], length 111
22:38:40.632369 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [P.], seq 171:236, ack 140, win 227, options [nop,nop,TS val 2698190230 ecr 1417334486], length 65
22:38:40.632458 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [P.], seq 140:753, ack 236, win 237, options [nop,nop,TS val 1417334502 ecr 2698190230], length 613
22:38:40.637043 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [P.], seq 236:287, ack 753, win 236, options [nop,nop,TS val 2698190235 ecr 1417334502], length 51
------------------------------
tcpdumpではシーケンス番号は相対表示になり1から開始して表示される。1つめのパケットでは、seq1:42までのシーケンス番号でデータ送信を行っており、2つめのパケットではシーケンス番号42までを受け取ったことを示すack 42を返している。
3-Wayハンドシェイクのようなlength 0の場合は、受け取ったシーケンス番号+1をackで返していたが、実際にデータを含むlength 0ではないパケットの場合は、ackは受信済みのシーケンス番号となる点に注意。
このようにTCPの通信では、送信側が送ったシーケンス番号に対して、受信側でどのシーケンス番号まで受信したかを返すことで、データの抜けのない正確な通信が実現できるように設計されている。
★③で通信の終了となるFINパケットのやり取りを実施している。
------------------------------
22:38:40.637068 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [F.], seq 287, ack 753, win 236, options [nop,nop,TS val 2698190235 ecr 1417334502], length 0
22:38:40.637186 IP 192.168.11.110.53830 > 192.168.11.112.25: Flags [F.], seq 753, ack 288, win 237, options [nop,nop,TS val 1417334507 ecr 2698190235], length 0
22:38:40.637247 IP 192.168.11.112.25 > 192.168.11.110.53830: Flags [.], ack 754, win 236, options [nop,nop,TS val 2698190235 ecr 1417334507], length 0
------------------------------
このように、tcpdumpで通信をキャプチャすることで、3-Wayハンドシェイクから始まり、FINパケットてクローズするTCPの通信の流れを確認することができた。
パケットの中身をASCIIで表示させると、もっとわかりやすい!
-Aオプションを使って、パケットの中身を表示させると、もっとわかりやすい。以下キャプチャ例となる。オレンジ網掛けが送信したSMTPコマンドとなり、黄色網掛けが応答となる。------------------------------
17:40:21.059074 IP 192.168.11.112.25 > 192.168.11.110.54942: Flags [P.], seq 1:42, ack 1, win 227, options [nop,nop,TS val 3717090657 ecr 2436234912], length 41
E..]..@.@..q...p...n....n....N.,...........
..Ma.5..220 t1112rh72.localdomain ESMTP Postfix
↑★SMTP接続に成功して220を返している
17:40:21.059133 IP 192.168.11.110.54942 > 192.168.11.112.25: Flags [.], ack 42, win 229, options [nop,nop,TS val 2436234929 ecr 3717090657], length 0
E..4..@.@......n...p.....N.,n........U.....
.5....Ma
17:40:21.059428 IP 192.168.11.110.54942 > 192.168.11.112.25: Flags [P.], seq 1:29, ack 42, win 229, options [nop,nop,TS val 2436234929 ecr 3717090657], length 28
E..P..@.@......n...p.....N.,n........q.....
.5....MaEHLO t1110rh72.localdomain
↑★EHLOを送信
17:40:21.059526 IP 192.168.11.112.25 > 192.168.11.110.54942: Flags [.], ack 29, win 227, options [nop,nop,TS val 3717090657 ecr 2436234929], length 0
E..4..@.@......p...n....n....N.H...........
..Ma.5..
17:40:21.060047 IP 192.168.11.112.25 > 192.168.11.110.54942: Flags [P.], seq 42:171, ack 29, win 227, options [nop,nop,TS val 3717090658 ecr 2436234929], length 129
E.....@.@......p...n....n....N.H...........
..Mb.5..250-t1112rh72.localdomain
250-PIPELINING
250-SIZE 1048576
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
↑★EHLOの応答
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
↑★MAIL FROM、RCPT TO、DATAを送信
17:40:21.078089 IP 192.168.11.112.25 > 192.168.11.110.54942: Flags [P.], seq 171:236, ack 146, win 227, options [nop,nop,TS val 3717090676 ecr 2436234930], length 65
E..u..@.@..V...p...n....n..U.N.............
..Mt.5..250 2.1.0 Ok
250 2.1.5 Ok
354 End data with <CR><LF>.<CR><LF>
↑★MAIL FROM、RCPT TO、DATAの応答
------------------------------
以上のように、SMTPのコマンドのやり取りを確認することができる。
0 件のコメント:
コメントを投稿