こんにちは、技術開発室の滝澤です。
技術開発室の基盤システム担当チームで電子メールプロトコル勉強会を開催したので、その概要について紹介します。
この記事ではプロトコルの内容についてではなく、どのようなことを行ったかを紹介します。どのRFCを調べてもらったかについてはおまけに掲載しましたので、もしメールプロトコルについて学習したい人や組織の参考になれば幸いです。
背景
先月(2022年11月)に技術開発室の基盤システム担当のメンバーで自社のメールサーバーの構築・移設を完了させました。
メンバー構成としてはベテラン1人(わたし)と中堅1人と新人2人です。メールサーバーに関しては、わたし以外のメンバーは運用のみ経験があるか、構築・運用経験が全くないようなメンバーでした。そのため、この移設プロジェクト開始時の最大の課題は、メンバーへの電子メール(以降、単にメールと呼ぶ)に関する技術移転と技術習得でした。さらに、メール関連のシステムの構築やツールの開発も必要であったため、メールプロトコルの習得が必要な状況でした。
下記のメモは本プロジェクト開始の3か月前(2021年12月時点)に技術移転について検討していたときのものです。
- 社内のメール関連技術の技術移転のために、メールサーバー・メールプロトコル入門を書く。
- 出版物としては10年以上メールサーバーやプロトコル関連の入門書は出版されていない。
- 特に送信ドメイン認証技術や迷惑メール対策技術については皆無であり、ウェブ上には廃止になった情報が普通に転がっており、ウェブで適当に検索して調べる学習は害が生じかねない状況である。
しかし、「メールサーバー・メールプロトコル入門を書く」というのは稼働的に無理であることはわかっていたので、結局はメンバーが自分たちで調べて勉強することになりました。その概要についてこのブログ記事で紹介します。
ちなみに、わたし(滝澤)は『メールRFC構成図』を作成する程度のほんのちょっとだけメールに詳しい人として本勉強会のアドバイザーをやりました。
実施概要
実施概要は以下のとおりです。
- 実施期間:4か月間
- 開催日:週に1回1時間30分実施
- 実施項目:後述
- 実施方法:それぞれのRFCや文書に対して担当を割り当てて、各自でまとめてもらって発表してもらう
- 利用ツール:翻訳ツールを使ってもかまわない
何もないところから学習をするのは難しいし効率的ではないため、きっかけと全体像と道しるべを示す必要がありました。そのため、まず最初に以下のことをわたしの方で説明しました。
- RFC入門
- メールシステムの概要
- 送信ドメイン認証の概要
- 迷惑メール対策の概要
実施項目は以下のとおりです。詳細は最後のおまけに掲載します。
- 第1部 メールプロトコル 基礎編
- メッセージフォーマット
- SMTP
- LMTP
- POP3
- IMAP
- TLS
- 認証(PLAIN、LOGIN)
- 第2部 メールプロトコル 拡張編
- メッセージフォーマット(MHTML、日本語対応、他)
- SMTP Service Extension
- IMAP Extension
- 国際化
- 認証(SASL)
- URI
- メールボックス名
- 第3部 メールプロトコル セキュリティー編
- 送信ドメイン認証
- Anti-Abuse(Greylisting、DNSBL、他)
- TLS(MTA-STS、他)
- メールの暗号化・デジタル署名
- 第4部 ベストプラクティス
- M3AAWGのベストプラクティス
この実施項目について担当を割り当てて、各自でまとめてもらって発表してもらいました。 しかし、スケジュールの関係ですべてを実施したわけではなく、一部は省きました。特に『第2部 メールプロトコル 拡張編』においては日本語対応と国際化のみを行いました。『第3部 メールプロトコル セキュリティー編』の『メールの暗号化・デジタル署名』は省きました。
わたし自身はアドバイザーとして、発表内容について、RFCではこのように記述されているけど実際はこうなんだとか、後に発行されたRFCでこの内容は変更されているとかを補足しました。
この勉強会の裏テーマとして、次のものがありました。
- 一次情報を調べる習慣を付ける
- プロトコル仕様を読めるようになる
- 英語の情報を調べることに対する抵抗感を無くす
英語が苦手なメンバーもおり、翻訳ツールを利用しても全くかまわないことは伝えました。ただし、翻訳が間違っていることもある点には注意して欲しいとも伝えました。
メンバーの感想
感想1
- IMAP(RFC9051)がかなり長くて大変だったが、そのおかげで他のRFC、RFC以外の英語ドキュメントを読むことへの抵抗がかなり減った
- メールを受け取ったときの挙動に対して、思いの外色々な要件があるのを知って学びになった
- ただメールサーバーを運用するだけでも、気をつけなければいけないことが多い
- 翻訳機の翻訳精度がまだ微妙だなと感じた
- 翻訳サイトを複数(Google翻訳,Deepl,weblio翻訳)使って、自分でも翻訳して読まないと変だなと思う部分が多々あった
- 勉強会の終盤や実運用時に「ここメール勉強会でやったところだ!」となれたのは楽しかった
感想2
- メール運用の大変さがわかった。
- 途中参加かつ関連する全てのRFCを読んだ訳ではないのにかなり大変だった。ただ世の中で使われている技術がどうやって標準化されているのかとその苦労を感じられてよかった。
感想3
- RFCごとに密度が違うのが意外だった
- しっかり決まっているものもあれば、結構ふんわりしてるものもある
- 実運用みてRFCちゃんと守ってくれ!!!と思うことが多い
- ルールが決まっているのは素晴らしいとおもった
- が、メールサーバを運用するためには知らなければいけないことが多すぎる......
- 歴史的な流れをRFCから読み取っていくのは面白かった
勉強会主催者としての感想
勉強会を始めてからしばらくはみんな大変で辛そうだったのですが、次第に慣れてきて、英語の文章を読む抵抗感はなくなってきたのを感じられました。 裏テーマの成果が出ていました。
最後に
普通に考えると無茶な勉強会ではありましたが、何とかやり遂げられました。 その成果として、メール関連のシステムやツールの開発もでき、メールサーバーの移設も無事に完了しました。
以降はおまけです。
おまけ:メールシステムの概要
「メールシステムの概要」で説明に利用した図を紹介します。
メールアーキテクチャ
メッセージフォーマット
おまけ:実施項目
最後に実施した項目について紹介します。
第0部 メールシステムの概要
- RFC入門
- メールシステムの概要
- RFC 5598 Internet Mail Architecture
- 送信ドメイン認証の概要
- 迷惑メール対策の概要
第1部 メールプロトコル 基礎編
メッセージフォーマット
- メッセージフォーマット
- RFC 5322 Internet Message Format
- RFC 6854 Update to Internet Message Format to Allow Group Syntax in the "From:" and "Sender:" Header Fields
- RFC 2919 List-Id: A Structured Field and Namespace for the Identification of Mailing Lists
- RFC 2369 The Use of URLs as Meta-Syntax for Core Mail List Commands and their Transport through Message Header Fields
- ボディーとマルチパート
- RFC 2045 Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies
- RFC 2046 Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types
- RFC 2049 Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria and Examples
- RFC 3676 The Text/Plain Format and DelSp Parameters
- RFC 6657 Update to MIME regarding "charset" Parameter Handling in Textual Media Types
- 非ASCIIテキストのヘッダー拡張
- RFC 2047 MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text
- RFC 2183 Communicating Presentation Information in Internet Messages: The Content-Disposition Header Field
- RFC 2231 MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages, and Continuations
SMTP
- SMTP
- RFC 5321 Simple Mail Transfer Protocol
- RFC 1846 SMTP 521 Reply Code
- RFC 7504 SMTP 521 and 556 Reply Codes
- RFC 7505 A "Null MX" No Service Resource Record for Domains That Accept No Mail
- 投稿
- RFC 6409 Message Submission for Mail
- RFC 4954 SMTP Service Extension for Authentication
- RFC 3848 ESMTP and LMTP Transmission Types Registration
- RFC 5068 Email Submission Operations: Access and Accountability Requirements
LMTP
- LMTP
- RFC 2033 Local Mail Transfer Protocol
POP3
- POP3
- RFC 1939 Post Office Protocol - Version 3
- RFC 2449 POP3 Extension Mechanism
- RFC 5034 The Post Office Protocol (POP3) Simple Authentication and Security Layer (SASL) Authentication Mechanism
- RFC 3206 The SYS and AUTH POP Response Codes
IMAP
- IMAP
- RFC 9051 Internet Message Access Protocol (IMAP) - Version 4rev2
TLS
- TLS
- RFC 3207 SMTP Service Extension for Secure SMTP over Transport Layer Security
- RFC 2595 Using TLS with IMAP, POP3 and ACAP
- RFC 7817 Updated Transport Layer Security (TLS) Server Identity Check Procedure for Email-Related Protocols
- RFC 8314 Cleartext Considered Obsolete: Use of Transport Layer Security (TLS) for Email Submission and Access
- RFC 8997 Deprecation of TLS 1.1 for Email Submission and Access
認証
- PLAIN認証機構
- RFC 4616 The PLAIN Simple Authentication and Security Layer (SASL) Mechanism
- LOGIN認証機構
- The LOGIN SASL Mechanism (draft-murchison-sasl-login-00)
第2部 メールプロトコル 拡張編
メッセージフォーマット
- HTMLメール
- RFC 2557 MIME Encapsulation of Aggregate Documents, such as HTML (MHTML)
- RFC 2392 Content-ID and Message-ID Uniform Resource Locators
- RFC 2387 The MIME Multipart/Related Content-type
- 日本語対応
- RFC 1468 Japanese Character Encoding for Internet Messages (『MIME Considerations』のセクションのみ)
- 不正なメッセージの処理
- RFC 7103 Advice for Safe Handling of Malformed Messages
SMTP Service Extension
- SIZE
- RFC 1870 SMTP Service Extension for Message Size Declaration
- ETRN
- RFC 1985 SMTP Service Extension for Remote Message Queue Starting
- DSNとMDN
- RFC 3461 Simple Mail Transfer Protocol (SMTP) Service Extension for Delivery Status Notifications (DSNs)
- RFC 6522 The Multipart/Report Media Type for the Reporting of Mail System Administrative Messages
- RFC 3464 An Extensible Message Format for Delivery Status Notifications
- RFC 8098 Message Disposition Notification
- ENHANCEDSTATUSCODES
- RFC 2034 SMTP Service Extension for Returning Enhanced Error Codes
- RFC 3463 Enhanced Mail System Status Codes
- PIPELINING
- RFC 2920 SMTP Service Extension for Command Pipelining
- CHUNKING, BINARYMIME
- RFC 3030 SMTP Service Extensions for Transmission of Large and Binary MIME Messages
- 8BITMIME
- RFC 6152 SMTP Service Extension for 8-bit MIME Transport
IMAP Extension
- IMAP Extension
- RFC 2221 IMAP4 Login Referrals
- RFC 2971 IMAP4 ID extension
- RFC 3502 Internet Message Access Protocol (IMAP) - MULTIAPPEND Extension
- RFC 4314 IMAP4 Access Control List (ACL) Extension
- RFC 4467 Internet Message Access Protocol (IMAP) - URLAUTH Extension
- RFC 4469 Internet Message Access Protocol (IMAP) CATENATE Extension
- RFC 4978 The IMAP COMPRESS Extension
- RFC 5032 WITHIN Search Extension to the IMAP Protocol
- RFC 5255 Internet Message Access Protocol Internationalization
- RFC 5256 Internet Message Access Protocol - SORT and THREAD Extensions
- RFC 5267 Contexts for IMAP4
- RFC 5464 The IMAP METADATA Extension
- RFC 5465 The IMAP NOTIFY Extension
- RFC 5524 Extended URLFETCH for Binary and Converted Parts
- RFC 5957 Display-Based Address Sorting for the IMAP4 SORT Extension
- RFC 6203 IMAP4 Extension for Fuzzy Search
- RFC 7162 IMAP Extensions: Quick Flag Changes Resynchronization (CONDSTORE) and Quick Mailbox Resynchronization (QRESYNC)
- RFC 8457 IMAP "$Important" Keyword and "\Important" Special-Use Attribute
- RFC 8474 IMAP Extension for Object Identifiers
- RFC 8514 Internet Message Access Protocol (IMAP) - SAVEDATE Extension
- RFC 9208 IMAP QUOTA Extension
国際化
- 概要
- RFC 6530 Overview and Framework for Internationalized Email
- SMTP
- RFC 6531 SMTP Extension for Internationalized Email
- ヘッダ
- RFC 6532 Internationalized Email Headers
- DSN
- RFC 6533 Internationalized Delivery Status and Disposition Notifications
認証
- 認証
- RFC 4422 Simple Authentication and Security Layer (SASL)
- RFC 4505 Anonymous Simple Authentication and Security Layer (SASL) Mechanism
- RFC 5802 Salted Challenge Response Authentication Mechanism (SCRAM) SASL and GSS-API Mechanisms
- RFC 7677 SCRAM-SHA-256 and SCRAM-SHA-256-PLUS Simple Authentication and Security Layer (SASL) Mechanisms
- RFC 7628 A Set of Simple Authentication and Security Layer (SASL) Mechanisms for OAuth
URI
- URI
- RFC 6068 The 'mailto' URI Scheme
- RFC 2384 POP URL Scheme
- RFC 5092 IMAP URL Scheme
メールボックス名
- メールボックス名
- RFC 2142 MAILBOX NAMES FOR COMMON SERVICES, ROLES AND FUNCTIONS
第3部 メールプロトコル セキュリティー編
送信ドメイン認証
- SPF
- RFC 7208 Sender Policy Framework (SPF) for Authorizing Use of Domains in Email, Version 1
- DKIM
- RFC 5585 DomainKeys Identified Mail (DKIM) Service Overview
- RFC 6376 DomainKeys Identified Mail (DKIM) Signatures
- RFC 6377 DomainKeys Identified Mail (DKIM) and Mailing Lists
- RFC 8301 Cryptographic Algorithm and Key Usage Update to DomainKeys Identified Mail (DKIM)
- RFC 8463 A New Cryptographic Signature Method for DomainKeys Identified Mail (DKIM)
- Authentication Status
- RFC 7372 Email Authentication Status Codes
- RFC 8601 Message Header Field for Indicating Message Authentication Status
- DMARC
- RFC 7489 Domain-based Message Authentication, Reporting, and Conformance (DMARC)
- RFC 7960 Interoperability Issues between Domain-based Message Authentication, Reporting, and Conformance (DMARC) and Indirect Email Flows
- RFC 8616 Email Authentication for Internationalized Mail
- ARC
- RFC 8617 The Authenticated Received Chain (ARC) Protocol
- BIMI
- Brand Indicators for Message Identification (BIMI) (draft-brand-indicators-for-message-identification-00)
- https://bimigroup.org/
Anti-Abuse
- Greylisting
- RFC 6647 Email Greylisting: An Applicability Statement for SMTP
- SMTP Tarpitting
- https://en.wikipedia.org/wiki/Tarpit_(networking)
- DNSBL
- RFC 5782 DNS Blacklists and Whitelists
- RFC 6471 Overview of Best Email DNS-Based List (DNSBL) Operational Practices
- 協調フィルタリング
- ルールベースフィルタリング
- ベイジアンフィルタリング
TLS
- Oppotunistic Security
- RFC 7435 Opportunistic Security: Some Protection Most of the Time
- DANE TLSA
- RFC 7672 SMTP Security via Opportunistic DNS-Based Authentication of Named Entities (DANE) Transport Layer Security (TLS)
- MTA-STS
- RFC 8461 SMTP MTA Strict Transport Security (MTA-STS)
- SMTP TLS Reporting
- RFC 8460 SMTP TLS Reporting
メールの暗号化・デジタル署名
- S/MIME
- RFC 8550 Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 Certificate Handling
- RFC 8551 Secure/Multipurpose Internet Mail Extensions (S/MIME) Version 4.0 Message Specification
- OpenPGP
- RFC 3156 MIME Security with OpenPGP
第4部 ベストプラクティス
- M3AAWG Sending Domains Best Common Practices
- M3AAWG Email Authentication Recommended Best Practices
- M3AAWG DKIM Key Rotation Best Common Practices
- M3AAWG Compromised User ID Best Practices
- M3AAWG Help - I'm On A Blocklist (ヘルプ ─ ブロックリストに登録された)
- M3AAWG Recommendations for Senders Handling of Complaints
- M3AAWG Best Practices for Managing SPF Records
- M3AAWG Best Practices for Implementing DKIM To Avoid Key Length Vulnerability
- M3AAWG Initial Recommendations for Addressing a Potential Man-in-the-Middle Threat
- Anti-Phishing Best Practices for ISPs and Mailbox Providers, Version 2.01, June 2015 (ISP およびメールボックスプロバイダー向けフィッシング対策 のベストプラクティス)
- M3AAWG Sender Best Common Practices, Version 3.0 (M3AAWG 送信者のベストコモンプラクティス)
- TLS for Mail: M3AAWG Initial Recommendations (Mail のための TLS: M3AAWG Initial Recommendations)