操作して学ぶ
SMTPフロー可視化
メールを送るたびに、裏ではクライアントとサーバーが十数往復のテキストコマンドをやり取りしています。 接続直後の挨拶から、拡張ネゴシエーション(EHLO)、暗号化への昇格(STARTTLS)、認証(AUTH)、 本文の転送(MAIL/RCPT/DATA)、切断(QUIT)までを1ステップずつ追えます。 メッセージの色はフェーズを表します。
接続拡張ネゴシエーション暗号化開始認証メール転送切断
1 / 24
接続サーバー → クライアント
1. 220 グリーティング
220 mail.example.com ESMTP PostfixTCP接続が確立すると、クライアントが何か言う前にサーバーから先に挨拶が届く。多くのプロトコルはクライアントが最初に喋るが、SMTPは逆——「相手の準備ができているか」を先に伝える設計。
要点220番台は「これから始まる/準備完了」を示す応答コード。ホスト名やソフトウェア名をあえて伏せる運用も多い。
押さえどころ
- サーバーが先に喋る。TCP接続が確立すると、クライアントが何か送る前に
220の挨拶が届く。多くのプロトコルと逆の順番。 - EHLOを2回送る。STARTTLSの前後で同じEHLOを送り直すのは儀礼ではなく、平文だった1回目のやり取りが経路上で書き換えられていた可能性を消すため(STARTTLSダウングレード攻撃対策)。
- Base64は暗号化ではない。AUTH LOGINのユーザー名・パスワードはBase64で符号化されるだけ。安全なのはSTARTTLSで経路全体が暗号化されているから。
- 250はまだ「届いた」ではない。DATAの後の
250 queued as …は「サーバーが引き受けた」印であって、宛先に配送できた保証ではない。 - dot-stuffing。本文の終端は単独行の「.」。本文中に行頭「.」があると誤って終端と解釈されるため、送信側がピリオドを2つに複製して回避する。
ここで可視化したのはメールを送信する側(MUA→送信MTA、または587番のSubmission)の1本道です。 複数のMTAを経由する中継や、送信ドメイン認証(SPF/DKIM/DMARC)による「なりすまし対策」はこのやり取りの外側の話になります。