なぜpop3ではなくpop3sを使うのか

はやし
2023-10-12
2023-10-12

thum_oss

はじめに

もう20年近く前の話ですが、自身が新卒の頃、当時の上司になぜサーバへの接続はtelnetではなく、SSHを使うのかというのを教えてもらったことがあります。

今の時代telnetでリモート接続するなんてことはないと思いますが、20年近く前はまだ利用されていました。

結論的には、telnetは暗号化されていない平文で通信するので、通信を傍受されたら内容が筒抜けなので、セキュリティを考えるなら暗号化通信を行うSSHを使うべきだという話です。

当たり前と言えば当たり前なのですが、これを教えてもらう際、実際にtelnetの通信をパケットキャプチャした上で、「ほら、パスワード情報が平文で見えるでしょ!恐ろしいでしょ!」というのを見せてもらいながら説明してもらいました。

そこで、今回は実際に暗号化されていないプロトコルをパケットキャプチャするとどんな風に見えるのかを試したいと思います。

本当はtelnetサーバで試そうと思ったんですが、冒頭で述べたように今のご時世telentサーバなんて化石のようなものなので、未だに利用されることが多いpop3で見ていきたいと思います。(smtpやftpも同じです。)

用意するもの

  • メールアカウント
  • POP3が入ったサーバ(今回はDovecot)
  • tcpdumpコマンド
  • 外部からpop3できる環境(メーラ等)※今回は別サーバからtelnetコマンドなどで接続します。

準備物は上記の通りです。

tcpdumpはネットワークのパケットキャプチャを行うためのコマンドで、だいたいどんなディストリビューションにも用意されていると思います。

注意点としては、ディストリビューションやバージョンなどにより、オプションの意味合いが多少変わっていたりするので、適宜man等を見ることをお勧めします。

試してみる

今回は、メールアカウントがあるメールサーバ(192.168.1.5)に対して、外部サーバ(192.168.1.6)からpop3接続を行い、メールサーバ上でtcpdumpを使って通信内容を見てみます。


メールアカウントの情報は以下の通りです。

  • ユーザ名:example@example.com
  • パスワード:testtest

このアカウントに対して、外部サーバからpop3接続をしてみます。

パケットをキャプチャするために、予めメールサーバ内でtcpdumpを実行しておきます。

[root@example.com ~]# tcpdump port 110  -A

外部サーバからtelnetコマンドでpop3接続を行い、アカウント認証を行います。

[future@localhost ~]$ telnet 192.168.1.5 110
Trying 192.168.1.5...
Connected to 192.168.1.5.
Escape character is '^]'.
+OK Dovecot ready. <4d63.1.65263ad3.mscVECeQp73osPdevU+pmg==@example.com>
USER example@example.com ←ユーザ名入力
+OK
PASS testtest ←パスワード入力
+OK Logged in. ←ログイン成功

ログインが成功しました。

tcpdumpの結果を見てみます。

~省略~
15:04:03.943879 IP 192.168.1.6.35888 > example.com.pop3: Flags [.], ack 89, win 229, options [nop,nop,TS val 1424331824 ecr 2790683750], length 0
E..4..@.@............0.n...x..K......7.....
T..0.Vtf
15:04:12.777285 IP 192.168.1.6.35888 > example.com.pop3: Flags [P.], seq 1:27, ack 89, win 229, options [nop,nop,TS val 1424340657 ecr 2790683750], length 26
E..N..@.@............0.n...x..K....."......
T....VtfUSER example@example.com

15:04:12.777372 IP example.com.pop3 > 192.168.1.6.35888: Flags [.], ack 27, win 227, options [nop,nop,TS val 2790692584 ecr 1424340657], length 0
E..49R@.@..2.........n.0..K.........)f.....
.V..T...
15:04:12.777629 IP example.com.pop3 > 192.168.1.6.35888: Flags [P.], seq 89:94, ack 27, win 227, options [nop,nop,TS val 2790692584 ecr 1424340657], length 5
E..99S@.@..,.........n.0..K.........)k.....
.V..T...+OK

15:04:12.777863 IP 192.168.1.6.35888 > example.com.pop3: Flags [.], ack 94, win 229, options [nop,nop,TS val 1424340658 ecr 2790692584], length 0
E..4..@.@............0.n......K.....K......
T....V..
15:04:18.234044 IP 192.168.1.6.35888 > example.com.pop3: Flags [P.], seq 27:42, ack 94, win 229, options [nop,nop,TS val 1424346114 ecr 2790692584], length 15
E..C..@.@............0.n......K......'.....
T....V..PASS testtest

15:04:18.243823 IP example.com.pop3 > 192.168.1.6.35888: Flags [P.], seq 94:110, ack 42, win 227, options [nop,nop,TS val 2790698050 ecr 1424346114], length 16
E..D9T@.@.. .........n.0..K.........)v.....
.V.BT...+OK Logged in.

少し見ずらいのですが、よく見ると赤字部分のように平文でユーザ名とパスワードがわかります。

このように非暗号化プロトコルの場合、通信経路の中で通信を傍受されてしまうと、機密情報が丸見えになってしまうので、昨今ではpop3であればpop3s、smtpであればsmtpsといった暗号化プロトコルが用いられることが多いです。

せっかくなので、pop3sの場合だと、どういう風に見えるかも見てみます。

メールサーバ側でtcpdumpコマンドをpop3s(995)実行しておきます。

[root@example.com ~]# tcpdump port 995  -A

外部サーバからメールサーバのpop3sに接続します。

pop3sに接続するには、暗号化通信を行うためにopensslコマンドを利用します。

[future@localhost ~]$ openssl s_client -connect 192.168.1.5:995
~省略~
+OK Dovecot ready. <54ed.1.65263fe6.ODjyLaJ7sTkOKYTGyNutEw==@onyx247.asp-frontier.org>
USER example@example.com ←ユーザ名入力
+OK
PASS testtest ←パスワード入力
+OK Logged in. ←ログイン成功

無事ログインできました。

tcpdumpの結果を見てみます。

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
15:25:41.985355 IP 192.168.1.6.53822 > example.com.pop3s: Flags [S], seq 116700873, win 29200, options [mss 1460,sackOK,TS val 1425629865 ecr 0,nop,wscale 7], length 0
E..<k.@.@............>............r.a..........
T.b.........
15:25:41.985456 IP example.com.pop3s > 192.168.1.6.53822: Flags [S.], seq 3869540206, ack 116700874, win 28960, options [mss 1460,sackOK,TS val 2791981792 ecr 1425629865,nop,wscale 7], length 0
E..<..@.@..}...........>...n......q )n.........
.jB.T.b.....
15:25:41.985998 IP 192.168.1.6.53822 > example.com.pop3s: Flags [.], ack 1, win 229, options [nop,nop,TS val 1425629866 ecr 2791981792], length 0
E..4k.@.@............>.........o...........
T.b..jB.
15:25:41.986150 IP 192.168.1.6.53822 > example.com.pop3s: Flags [P.], seq 1:290, ack 1, win 229, options [nop,nop,TS val 1425629866 ecr 2791981792], length 289
E..Uk.@.@............>.........o.....3.....
T.b..jB.............>Z.0I&.&.\.......TL}.%.I...f>.. 2T._...s.R.q.....E;X.........*.>.H.........,.0.......+./...#.'.
...     ...........=.<.5./...........k.g.9.3...............
...
...........#.............&.$........... ...
.....................+........-.....3.&.$... .mmJ..-..S..1........$.T..S.7.?o
15:25:41.986182 IP example.com.pop3s > 192.168.1.6.53822: Flags [.], ack 290, win 235, options [nop,nop,TS val 2791981792 ecr 1425629866], length 0
E..4=.@.@..............>...o........)f.....
.jB.T.b.
15:25:42.101296 IP example.com.pop3s > 192.168.1.6.53822: Flags [.], seq 1:1449, ack 290, win 235, options [nop,nop,TS val 2791981907 ecr 1425629866], length 1448
E...=.@.@..L...........>...o......../......
.jCST.b.....=...9..-.pc..0..=C..~....?.O\0~....s.....0.................#.................0...0....      ..r
1.e..0..        *.H........0=1.0        ..U....JP1.0...U....Default City1.0...U.
..Future Spirits0...180130075045Z..280128075045Z0=1.0   ..U....JP1.0...U....Default City1.0...U.
..Future Spirits0.."0.. *.H.............0..
............M5....b......ai     ....0#..mKn....s..S..V.-..t.
2...u
.....V..g.y.......b..V.zp...o.+3.?..;.......G.W...z*8..hR..{r:oZ.2.X1.`"Qs...M.....8.R......vG...7..i:f.5.      ]..&.....t#..l..G...DY1`J..y.$g.i.......B.>...U..~...........>..#....-..o|Jd*..e4..T. ...[1...\Q.6   .......c........uPL..t.k2u..W. .....CR8..i9gZ.)M...^.H.5.)h.........#3.Xz...#..(... .....n..t7.p......<..v?.....}.!......`.u...T.K.].}.Hn1.i~?..6j..,...2...,...E..5..FC..i..H........t....f..Q..i0w..F.:.....v
6.E.3....r.i(...u....2}\....f.+.Z*....9c%.....0..  *.H.............md...$\..@.@    8.....Y.Ov..0Zf*`.......5$..:...HeA.}M<N...!.......t#..b.....i.....H.B,...k<u..#......c......../b.....
^......._....C.....2..a.....l..L.S0.8.....].3b|..Hu`kV..........3a7.S.#..xa....A&...Q3>!1....l....U..
.k...tc .P.%..^...b....~.*......i.[...3...y.....J.Pu0..Y...Q....4d..P
..O..r...R.:......d..1^0~:KH...[h@.g...\!.TE|.*.......K...N.....Zz...Q..d.
..]..[.......qN..X.3..|\kL.h........v$..$.I.....\.+S    ..PJ(...).)....K:=%.~:......y.'.........vF.3
.k...Xc..$..+.o.'.H....oj.......).vd[...3.;.6..oUR..5....M...I...A......./..fy.........(.o.m9....mXF.B..~..d
..LG...k.q1...dD.       u..+....\.>i:D.BU..
15:25:42.101343 IP example.com.pop3s > 192.168.1.6.53822: Flags [P.], seq 1449:1959, ack 290, win 235, options [nop,nop,TS val 2791981908 ecr 1425629866], length 510
E..2=.@.@..............>............+d.....
.jCTT.b.a%..(.j..q.....>X,h....Np..;...t..6O..guV@....*....z.......Q.9e:....G.I.5..;.k.m..A....T.O...+" zMl....d.....L...D.3.G..;.6
.....2"4..RJ...I"..W..0..nw.G..dN....T....Z.o}..FD)x.....).F]O.<.8...G................M..       8..*...l.2................>5.uk.........cr..I!.vT...+I......s..k8.ou).|..B..:.2....`|..{.7...=..Y... .J....R.3.x:.s...Z.i....MOY..{...sg\Nyv.....e..o...J>4".Q..ol._i...thQgo..H.1....&.3..jZ.P..a!.....p...a.......<._.......".2...f...-%0..d.L.Z.....)f..w
...u.b.g-D....q.W....V".R       .$..S(...........
15:25:42.101828 IP 192.168.1.6.53822 > example.com.pop3s: Flags [.], ack 1449, win 251, options [nop,nop,TS val 1425629982 ecr 2791981907], length 0
E..4k.@.@............>.....................
T.c..jCS
15:25:42.101849 IP 192.168.1.6.53822 > example.com.pop3s: Flags [.], ack 1959, win 274, options [nop,nop,TS val 1425629982 ecr 2791981908], length 0
E..4k.@.@............>.....................
T.c..jCT
15:25:42.102354 IP 192.168.1.6.53822 > example.com.pop3s: Flags [P.], seq 290:416, ack 1959, win 274, options [nop,nop,TS val 1425629982 ecr 2791981908], length 126
E...k.@.@..~.........>.....................
T.c..jCT....F...BA...d....8M..J2.6t....B..Q*M"........g.PK.#.W...Gs..   ^.H.."9..\I............(.68.`..+]..\M....|..k........8.X.....k.D
15:25:42.102370 IP example.com.pop3s > 192.168.1.6.53822: Flags [.], ack 416, win 235, options [nop,nop,TS val 2791981909 ecr 1425629982], length 0
E..4=.@.@..............>.......i....)f.....
.jCUT.c.
15:25:42.102822 IP example.com.pop3s > 192.168.1.6.53822: Flags [P.], seq 1959:2185, ack 416, win 235, options [nop,nop,TS val 2791981909 ecr 1425629982], length 226
E...=.@.@..............>.......i....*H.....
.jCUT.c.............,...H....X'."..r`..PS.T.vF)..6%r...y......T-..2Z..:...8J..........
.       ..9.....;.#.....e.e..k8.......L-on6(....d^.rw.g....#qhT..T.OKu:2,H..P.4pC~.4...Iqcz..x.;.]      .............(E............a...5>.@..J.`...F.#..%    .i.+
15:25:42.143591 IP 192.168.1.6.53822 > example.com.pop3s: Flags [.], ack 2185, win 296, options [nop,nop,TS val 1425630024 ecr 2791981909], length 0
E..4k.@.@............>.....i.......(.8.....
T.cH.jCU
15:25:42.143619 IP example.com.pop3s > 192.168.1.6.53822: Flags [P.], seq 2185:2302, ack 416, win 235, options [nop,nop,TS val 2791981950 ecr 1425630024], length 117
E...=.@.@..{...........>.......i....)......
.jC~T.cH....pE.......v..A..j..c...^.....~.9...D.Z4f.0..G.z-...aC`...".}]c..Q..K.9.J..u..v.A'..a.....
".._..lr..5C{%.....>.....
15:25:42.144096 IP 192.168.1.6.53822 > example.com.pop3s: Flags [.], ack 2302, win 296, options [nop,nop,TS val 1425630024 ecr 2791981950], length 0
E..4k.@.@............>.....i...l...(.......
T.cH.jC~
15:25:57.777284 IP 192.168.1.6.53822 > example.com.pop3s: Flags [P.], seq 416:470, ack 2302, win 296, options [nop,nop,TS val 1425645657 ecr 2791981950], length 54
E..jk.@.@............>.....i...l...(.......
T..Y.jC~....1.68.`..,05.E..o.Q..h..........Lrc=UI..$9.*....ETd
15:25:57.777649 IP example.com.pop3s > 192.168.1.6.53822: Flags [P.], seq 2302:2336, ack 470, win 235, options [nop,nop,TS val 2791997584 ecr 1425645657], length 34
E..V=.@.@..............>...l........)......
.j..T..Y.....E...............;.NG!..:.S3.<
15:25:57.778143 IP 192.168.1.6.53822 > example.com.pop3s: Flags [.], ack 2336, win 296, options [nop,nop,TS val 1425645658 ecr 2791997584], length 0
E..4k.@.@............>.............(+......
T..Z.j..
15:26:02.979108 IP 192.168.1.6.53822 > example.com.pop3s: Flags [P.], seq 470:513, ack 2336, win 296, options [nop,nop,TS val 1425650859 ecr 2791997584], length 43
E.._k.@.@............>.............(.......
T....j......&.68.`..-...C.9.0.......T.Y.5......g".n
15:26:02.988780 IP example.com.pop3s > 192.168.1.6.53822: Flags [P.], seq 2336:2381, ack 513, win 235, options [nop,nop,TS val 2792002795 ecr 1425650859], length 45
E..a=.@.@..............>............)......
.j..T.......(E........O..+..._67......T..T*$s'.O..;"^
15:26:02.989291 IP 192.168.1.6.53822 > example.com.pop3s: Flags [.], ack 2381, win 296, options [nop,nop,TS val 1425650869 ecr 2792002795], length 0
E..4k.@.@............>.............(.......
T....j..
15:26:13.336972 IP 192.168.220.6.58796 > 192.168.210.151.pop3s: Flags [S], seq 1789447314, win 64896, options [mss 1352,nop,wscale 8,nop,nop,sackOK], length 0
E..4..@.~.C4............j...........!A.....H........

当然ですが、暗号化されているため、パケットキャプチャの結果から通信内容を見ることはできませんでした。

まとめ

お客様とお話する時、よく「pop3やftpではなく、pop3sやftpsを利用すべきです!」といったお話をするのですが、今回試したような結果を見ると、平文でやりとりするこれらのプロトコルはセキュリティ的に見ればやはり脆弱なので、暗号化プロトコルが大事だなというのが分かると思います。

こういうのを自分で試してみると、改めて意味が理解できたりすると思うので、サーバエンジニアの方は一度はやってみると面白いと思います。