class: title, smokescreen, shelf, no-footer # 電子メール<br>- アプリケーション層の例(2) - --- class: img-right,compact # メール関連プロトコル <!-- 構成図: メールのやりとりの概要 --> ![SMTP](images/smtp-overview.png) - HTTP/1.0より少し複雑なstatefullの例 - (暗号モードが別途あり,省略) - メールの送信(図の(1)),転送(図の(2)) - SMTP = Simple Mail Transfer Protocol - 25/tcp が伝統のポート番号で、 サーバ間メール転送(図の(2))のデフォルト - 587/tcpはMail Submission(送信,図(1)) - メールをPCに取込む(図の(3))プロトコル - メールソフト(メールリーダ)の裏側 - POP3 - Post Office Protocol - 110/tcp - IMAP4 - Internet Message Access Protocol - 143/tcp --- class: img-right,compact # POP3 全体構成 <div class=footnote> <small> (脚注)POP3のほうが単純なので、こちらから先にやります </small> </div> <!-- 構成図: メールのやりとりの概要 --> <!-- ![width480px](images/smtp_overview.gif) --> ![SMTP](images/smtp-overview.png) - 図の一番左の部分 - 図の(2):メールサーバがメールを受信 - 受信したメール群はメールサーバに保存されています - 保存場所をメールスプール(spool)と呼びます - メールサーバと同じホスト上で、POPサーバも動いています - ユーザはPOP3もしくはIMAP4プロトコルでサーバからメールを取り込みます(図の(3)) - 注: ブラウザ(webmail)やスマホのアプリも、 裏側では IMAP4 でアクセスしています --- class: col-2,compact # POP3 動作の詳細 <div class=footnote> <small> (脚注1)+で始まる一連の行は、サーバからの応答 <br> (脚注2)クライアントから「4文字のコマンド 引数」を送信 </small> </div> - POP3 - 最初は挨拶 - ログイン(**認証**) - ユーザ名とパスワードを送信 -> 本人であることを証明 - 本人であることを確認後 - メールを取得 - メールを削除 - 本人であることを確認できない時は? - 何もできません - ログアウトできるだけ - ログアウト <wbr> - `// C言語風のコメント`をつけておきます ``` +OK Qpopper (version 4.0.5) at // 挨拶 メールサーバ starting. ...略... .. 省略 ... USER ユーザ名 // ログイン +OK Password required for ユーザ名. PASS パスワード // パスワード +OK ユーザ名 has 1 visible... // 認証OK RETR 1 // メール1番を取得 ... 略(メール本体が表示) ... +OK 434 octets DELE 1 // メール1番を削除 +OK Message 1 has been deleted. ... 略 ... QUIT // 終了 +OK Pop server at メールサーバ signing off. ``` --- class: col-2,compact # POP3でメールを受信するデモ <div class=footnote> <small> (脚注1)+で始まる一連の行は、サーバからの応答 <br> (脚注2)クライアントから「4文字のコマンド 引数」を送信 </small> </div> ``` +OK Dovecot ... // サーバからの挨拶 USER ユーザ名 // ログイン PASS パスワード // パスワード STAT // 統計情報を表示 LIST // メール一覧を表示 RETR 1 // メール1番を取得 DELE 1 // メール1番を削除 QUIT // 終了 ``` <iframe width="679" height="394" src="https://www.youtube.com/embed/OfdR9YwiOU8?rel=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> 埋め込みが動作しない方は[こちら](https://www.youtube.com/embed/OfdR9YwiOU8?rel=0) --- class: img-right,compact # SMTP 全体構成 <div class=footnote> <small> (脚注) 客先に一つだけサーバを納品するといった場合、ログのメールを送るようにしたいわけです </small> </div> <!-- 構成図: メールのやりとりの概要 --> <!-- ![width480px](images/smtp_overview.gif) --> ![SMTP](images/smtp-overview.png) - 図の(2)がメール転送(mail transfer) - 伝統の25/tcpを使います - 図の(1)が(ユーザからの)メール送信 - mail submissionと呼んでいます - submissionでは不正アクセスを防ぐ必要があります - 自組織のユーザだけが送信できます。 そうでないとSPAM送信サーバに悪用されます - 使うポートは25/tcpもしくは587/tcp - 587/tcpは人間用、25/tcpはシステム用(ログメール用)といった使い分けができるように、あえて別ポートにした運用がのぞましい --- class: col-2,compact # SMTP 動作の詳細 - SMTP - 最初は挨拶 - 送信者を指定 - 送信先を指定 - 必要なら複数指定可 - 一度に指定できるメールアドレスは一つなので、 必要な回数だけ繰り返します - 複数指定も、ふつう上限があります(念のためのSPAM対策) - 上限は1000人くらいが普通ではないかと - メールを送信 - ログアウト <wbr> - `// C言語風のコメント`をつけておきます ``` 220 〜.fml.org ESMTP Postfix // サーバからの挨拶 EHLO client.nuinui.net 250-mta.fml.org ... 略 ... 250 8BITMIME MAIL FROM:<fukachan@fml.org> // 送信者 250 Ok RCPT TO:<rudo@nuinui.onet> // 送信先 250 Ok DATA // データ転送開始 354 End data with <CR><LF>.<CR><LF> メール本文をここで送信 . 250 Ok: queued as 9BB9F86640 QUIT // 終了 221 Bye ``` --- class: col-2,compact # SMTPでメールを送信するデモ(ビデオ) ``` 220 〜.fml.org ESMTP Postfix // サーバからの挨拶 MAIL FROM:<fukachan@fml.org> // 送信者 RCPT TO:<rudo@nuinui.onet> // 送信先 DATA // データ転送開始 QUIT // 終了 ``` <iframe width="679" height="394" src="https://www.youtube.com/embed/dCSryiMkEfM?rel=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe> 埋め込みが動作しない方は[こちら](https://www.youtube.com/embed/dCSryiMkEfM?rel=0) --- class: title, smokescreen, shelf, no-footer # 参考資料<br>メールサーバのソフトウエア紹介 <div class=footnote> 中間試験には出ません </div> --- class: col-2,compact # 参考: メールソフトウエア - コードを読むならPostfixがおすすめです - メールサーバのソフトウエア (登場順) - Sendmail - もっとも初期からあるメールサーバで、 互換の基準、いまは商用サポートあり - モノリシックアーキテクチャ - バグが多かったしな... - (90年代末にPostfixがリリースされた時にSendmailは捨てました) - qmail - 高速でセキュアなのは確かですが、 DJB(作者)の設計思想では運用しづらい。 DJB教に入信しないと...(数学屋とは馬があわない:-) - Exim - Debian/Linuxのデフォルトなので運用されているサーバ数は多いらしい - Postfix - 作者W.Venemaは Postfix以前にtcp_wrappersやSATAN、 またFIRSTの運営などセキュリティ分野で知られた人です (高エネルギー物理出身ですけどね:-) - モデュラーアーキテクチャの勉強にもおすすめです --- class: center,compact # 参考: Postfixの(だいぶ簡略化した)内部構造 ![height480px](images/postfix-internals.png) メールサーバの内部構造は複雑なので説明は省略します