メールサーバ研究所
はじめに
ここはWizard98の研究場所です。
公開コンテンツ&閲覧用ではありません。
*しかし、メール関連の技術者には数万円の価値があるかも。
ダウンロード
SMTP AUTH
- http://www.gcd.org/sengoku/docs/NikkeiLinux02-02.pdf
- http://pittari-mail.net/smtp_auth/about_smtp_auth.html
APOP認証
- http://x68000.startshop.co.jp/~68user/net/pop3-3.html
- http://www.ipa.go.jp/security/awareness/administrator/remote/capter4/1.html
リモートメッセージング
- IMAP4規格(RFC 2060)
配信ステータス通知
- インターネットの標準規格(RFC 1891〜1894)
DNS
- ネットワーク・コマンドでトラブル解決
nslookupコマンド
- nslookupの起動の仕組み
- nslookup 〜DNSサーバに名前解決の問い合わせを行う
名前解決
- DNSの仕組みと運用
- SMTP(Simple Mail Transfer Protocol)〜
名前解決(名前解決&MXレコード)
- メールサーバの仕組み
- DNSサーバでインターネットの風を呼ぼう!の巻
名前解決(MXレコード&sendmail)
- Sendmail/POPの設定と運用
名前解決(JavaMail&名前解決)
名前解決手順
- CNAME
- MXレコード、優先度の転送先のドメイン(ア)
- (ア)のAレコード{(ア)のMXレコードは検索しない}
- 成功?(成功→完了 失敗→2へ
応答コード(SMTP)
- SMTP応答コード一覧
- SMTPコマンド
- いつか役に立つテクニカルTips
知識
メール RFC
RFC |
タイトル |
内容 |
和訳 |
原文 |
974 |
MAIL ROUTING AND THE DOMAIN SYSTEM |
MTAのMX検索手順 |
○ |
○ |
1854 |
SMTP Service Extension for Command Pipelining |
PIPELININGコマンド |
|
○ |
1891 |
SMTP Service Extension for Delivery Status Notifications |
配信状態通知 |
|
○ |
2449 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- RFC821
古い !!!
- SIMPLE MAIL TRANSFER PROTOCOL
(この文書はRFC974,
1869と供に破棄され、代わりににRFC2821が出ています)
- RFC822
古い !!!
- STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT
MESSAGES
(この文書は破棄され、代わりにRFC2822が出ています)
- RFC934
- Proposed Standard for Message Encapsulation
- RFC974
古い !!!
- MAIL ROUTING AND THE DOMAIN SYSTEM
(この文書はRFC821,
1869と供に破棄され、かわりにRFC2821が出ています)
- RFC976
- UUCP Mail Interchange Format Standard
- RFC1036
- Standard for Interchange of USENET
Messages
(これはメールでなくニュースに関するものだが参考までに紹介)
- RFC1047
- DUPLICATE MESSAGES AND SMTP
- RFC1049
- A CONTENT-TYPE HEADER FIELD FOR INTERNET MESSAGES
- RFC1082
- Post Office Protocol - Version 3 Extended Service Offerings
- RFC1090
- SMTP on X.25
- RFC1123
- Requirements for Internet Hosts -- Application and
Support
(この文書の第5章はメールに関する内容なのでRFC821,822,974と併せて読む必要がありましたが、RFC2821,2822が出たので読む必要がなくなりました。他の章にはメール以外の事が書かれていて現在も有効なので破棄はされていません)
- RFC1137
- Mapping Between Full RFC 822 and RFC 822 with Restricted Encoding
- RFC1211
- Problems with the Maintenance of Large Mailing Lists
- RFC1343
- A User Agent Configuration Mechanism For Multimedia Mail Format Information
- RFC1344
- Implications of MIME for Internet Mail Gateways
- RFC1421
- Privacy Enhancement for Internet Electronic Mail: Part I: Message Encryption
and Authentication Procedures
- RFC1422
- Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based
Key Management
- RFC1423
- Privacy Enhancement for Internet Electronic Mail: Part III: Algorithms,
Modes, and Identifiers
- RFC1424
- Privacy Enhancement for Internet Electronic Mail: Part IV: Key Certification
and Related Services
- RFC1428
- Transition of Internet Mail from Just-Send-8 to 8bit-SMTP/MIME
- RFC1437
- The Extension of MIME Content-Types to a New Medium
- RFC1468
重要 !!!
- Japanese Character Encoding for Internet Messages
- RFC1494
- Equivalences between 1988 X.400 and RFC-822 Message Bodies
- RFC1496
- Rules for Downgrading Messages from X.400/88 to X.400/84 When MIME
Content-Types are Present in the Messages
- RFC1505
- Encoding Header Field for Internet Messages
- RFC1524
- A User Agent Configuration Mechanism For Multimedia Mail Format Information
- RFC1554
- ISO-2022-JP-2: Multilingual Extension of ISO-2022-JP
- RFC1641
- Using Unicode with MIME
- RFC1652
- SMTP Service Extension for 8bit-MIMEtransport
- RFC1711
- Classifications in E-mail Routing
- RFC1731
- IMAP4 Authentication Mechanisms
- RFC1732
- IMAP4 COMPATIBILITY WITH IMAP2 AND IMAP2BIS
- RFC1733
- DISTRIBUTED ELECTRONIC MAIL MODELS IN IMAP4
- RFC1734
- POP3 AUTHentication command
- RFC1740
- MIME Encapsulation of Macintosh files - MacMIME
- RFC1741
- MIME Content Type for BinHex Encoded Files
- RFC1767
- MIME Encapsulation of EDI Objects
- RFC1844
- Multimedia E-mail (MIME) User Agent checklist
- RFC1845
- SMTP Service Extension for Checkpoint/Restart
- RFC1846
- SMTP 521 Reply Code
- RFC1847
- Security Multiparts for MIME: Multipart/Signed and Multipart/Encrypted
- RFC1848
- MIME Object Security Services
- RFC1864
- The Content-MD5 Header Field
- RFC1869
古い !!!
- SMTP Service Extensions
(この文書はRFC821, 974と供に破棄され、かわりにRFC2821が出ています)
- RFC1870
- SMTP Service Extension for Message Size Declaration
- RFC1873
- Message/External-Body Content-ID Access Type
- RFC1891
- SMTP Service Extension for Delivery Status Notifications
- RFC1896
- The text/enriched MIME Content-type
- RFC1939
重要 !!!
- Post Office Protocol - Version 3
- RFC1957
- Some Observations on Implementations of the Post Office Protocol (POP3)
- RFC1985
- SMTP Service Extension for Remote Message Queue Starting
- RFC2015
- MIME Security with Pretty Good Privacy (PGP)
- RFC2033
- Local Mail Transfer Protocol
- RFC2034
- SMTP Service Extension for Returning Enhanced Error Codes
- RFC2045
重要 !!!
- Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet
Message Bodies
- RFC2046
重要 !!!
- Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types
- RFC2047
重要 !!!
- MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header
Extensions for Non-ASCII Text
- RFC2048
重要 !!!
- Multipurpose Internet Mail Extensions (MIME) Part Four: Registration
Procedures
- RFC2049
重要 !!!
- Multipurpose Internet Mail Extensions (MIME) Part Five: Conformance Criteria
and Examples
- RFC2060
- INTERNET MESSAGE ACCESS PROTOCOL - VERSION 4rev1
- RFC2061
- IMAP4 COMPATIBILITY WITH IMAP2BIS
- RFC2062
- Internet Message Access Protocol - Obsolete Syntax
- RFC2076
便利 !!!
- Common Internet Message Headers
- RFC2086
- IMAP4 ACL extension
- RFC2087
- IMAP4 QUOTA extension
- RFC2088
- IMAP4 non-synchronizing literals
- RFC2110
- MIME E-mail Encapsulation of Aggregate Documents, such as HTML (MHTML)
- RFC2130
- The Report of the IAB Character Set Workshop held 29 February - 1 March,
1996
- RFC2142
- MAILBOX NAMES FOR COMMON SERVICES, ROLES AND FUNCTIONS
- RFC2152
- UTF-7 A Mail-Safe Transformation Format of Unicode
- RFC2156
- MIXER (Mime Internet X.400 Enhanced Relay): Mapping between X.400 and RFC
822/MIME
- RFC2157
- Mapping between X.400 and RFC-822/MIME Message Bodies
- RFC2160
- Carrying PostScript in X.400 and MIME
- RFC2162
- MaXIM-11 - Mapping between X.400 / Internet mail and Mail-11 mail
- RFC2177
- IMAP4 IDLE command
- RFC2180
- IMAP4 Multi-Accessed Mailbox Practice
- RFC2183
- Communicating Presentation Information in Internet Messages: The
Content-Disposition Header Field
- RFC2193
- IMAP4 Mailbox Referrals
- RFC2195
- IMAP/POP AUTHorize Extension for Simple Challenge/Response
- RFC2221
- IMAP4 Login Referrals
- RFC2231
- MIME Parameter Value and Encoded Word Extensions: Character Sets, Languages,
and Continuations
- RFC2237
- Japanese Character Encoding for Internet Messages
(RFC1468と同じタイトルですが別物です)
- RFC2277
- IETF Policy on Character Sets and Languages
- RFC2279
- UTF-8, a transformation format of ISO 10646
- RFC2298
- An Extensible Message Format for Message Disposition Notifications
- RFC2342
- IMAP4 Namespace
- RFC2359
- IMAP4 UIDPLUS extension
- RFC2369
- The Use of URLs as Meta-Syntax for Core Mail List Commands and their
Transport through Message Header Fields
- RFC2387
- The MIME Multipart/Related Content-type
- RFC2388
- Returning Values from Forms: multipart/form-data
- RFC2449
- POP3 Extension Mechanism
- RFC2476
- Message Submission
- RFC2505
- Anti-Spam Recommendations for SMTP MTAs
- RFC2524
- Neda's Efficient Mail Submission and Delivery (EMSD) Protocol Specification
Version 1.3
- RFC2554
- SMTP Service Extension for Authentication
- RFC2595
- Using TLS with IMAP, POP3 and ACAP
- RFC2632
- S/MIME Version 3 Certificate Handling
- RFC2633
- S/MIME Version 3 Message Specification
- RFC2634
- Enhanced Security Services for S/MIME
- RFC2635
- DON'T SPEW A Set of Guidelines for Mass Unsolicited Mailings and Postings
(spam*)
- RFC2645
- ON-DEMAND MAIL RELAY (ODMR) SMTP with Dynamic IP Addresses
- RFC2646
- The Text/Plain Format Parameter
- RFC2683
- IMAP4 Implementation Recommendations
- RFC2789
- Mail Monitoring MIB
- RFC2821
重要 !!!
- Simple Mail Transfer Protocol
(20年近くも標準的に使われてきたRFC821が破棄され、新しく発行されたRFCです)
- RFC2822
重要 !!!
- Internet Message Format
(20年近くも標準的に使われてきたRFC822が破棄され、新しく発行されたRFCです)
- RFC2828
- Internet Security Glossary
(セキュリティに関する文書だが、メール関連の用語も沢山紹介されている)
- RFC2852
- Deliver By SMTP Service Extension
- RFC2912
- Indicating Media Features for MIME Content
- RFC2913
- MIME Content Types in Media Feature Expressions
- RFC2919
- List-Id: A Structured Field and Namespace for the Identification of Mailing
Lists
- RFC2920
- SMTP Service Extension for Command Pipelining
- RFC2971
- IMAP4 ID extension
- RFC2978
- IANA Charset Registration Procedures
- RFC3028
- Sieve: A Mail Filtering Language
- RFC3030
- SMTP Service Extensions for Transmission of Large and Binary MIME Messages
- RFC3098
- How to Advertise Responsibly Using E-Mail and Newsgroups or - how NOT to
$$$$$ MAKE ENEMIES FAST! $$$$$
- RFC3156
- MIME Security with OpenPGP
- RFC3206
- The SYS and AUTH POP Response Codes
- RFC3207
- SMTP Service Extension for Secure SMTP over Transport Layer Security
- RFC3282
- Content Language Headers
- RFC3348
NEW!!!
- The Internet Message Action Protocol (IMAP4) Child Mailbox Extension
|
日本語化RFC情報
リンク
- http://www02.so-net.ne.jp/~hat/imail/xlinks.html
メモ
SMTP AUTH
SMTP
Authenticationは、送信時に、アカウントとパスワードの認証を行い、メールの送信を許可する仕組みです。OutLook
Express4以上、Netscape4.0以上などが、SMTP AUTHに対応しています。 認証方式はLOGINです。
POP before
SMTPは、メール受信でパスワード認証に成功したユーザからのメール送信を、一時的に通す仕組みです。メール送信する前に、必ず、受信を行う必要があります。
Windows |
Outlook Express4以上 |
Outlook98、2000 |
Netscape4.x以上 |
Eudora4.x以上 |
その他、SMTP
AUTH対応と記載されているメールソフト |
SMTP AUTH対応メールソフト
SASL機構
【認証方式】
PLAIN |
「認可識別子<NULL>認証識別子<NULL>パスワード」形式の平文によるユーザー認証方式です。BASE64でエンコードする場合もあります。 |
LOGIN |
LOGINも PLAIN同様、平文を用いた認証形式です。標準仕様が存在していないので、各社製品間の互換性もあまり考慮されていません。 |
CRAM-MD5 |
クライアントは、接続先のMTAからあらかじめ示された任意の文字列(Challenge)にパスワードを含め
MD5アルゴリズムで「メッセージダイジェスト」作成して
MTAへ送信します。MTA側でも同様の方法で「メッセージダイジェスト」作成し、クライアントから送られてきたメッセージダイジェストと比較します。それで等しければログインを許可します。この方法では、パスワード自身がネットワークに流れることがないので
PLAINや LOGIN より安全性が高くなります。(CRAM:Challenge-Response Authentication
Mechanism) |
DIGEST-MD5 |
CRAM-MD5の欠点である辞書攻撃や総当たり攻撃に対する対処、Realm(ドメイン名)やURLの指定、および
HMAC(keyed-Hashing for Message Authentication Code)による暗号化をサポートしています。 |
その他 |
Kerberos、GSSAPI、S/Key |
APOP
APOPは、メール受信時、ユーザ認証の際のパスワードを暗号化します。通常の認証方式は、平文のパスワードがネットワーク上を流れますが、APOPでは暗号化されて流れます。メールの内容については、暗号化されません。
APOPを使用するには、APOP対応メールソフト(Eudoraなど)が必要です。
適用される標準規約
SMTP/ESMTP
| RFC 821, RFC 1869, RFC 1652, RFC 1870, RFC 1983, RFC 1985
|
メール
| RFC 822, RFC 1892, RFC 1894
|
POP2
| RFC 937
|
POP3
| RFC 1081, RFC 1225, RFC 1460, RFC 1725, RFC 1939, RFC 2449
|
APOP
| RFC 1460, RFC 1725, RFC 1939
|
RPOP
| RFC 1081, RFC 1225
|
IMAP2/IMAP2BIS
| RFC 1176, RFC 1732
|
IMAP4
| RFC 1730, RFC 1731, RFC 1732, RFC 2060, RFC 2061, RFC 2195
|
ETRN
| RFC 1985
|
OTP
| RFC 1938
|
LMTP
| RFC 2033
|
SMTP AUTH実現方法
SMTP AUTHの実現方法について検討する。
@規約
SMTP AUTHはRFC2554にて規約されている。
ASMTP AUTH の仕組み
A−1 EHLOコマンドへ"AUTH"キーワードを追加する
A−2 MAIL FROMコマンドの行の長さを500文字まで拡張する
A−3 AUTHコマンドの作成
AUTH mechanism [initial-response]
Arguments:
a string identifying a SASL authentication mechanism.
an optional base64-encoded response
|
*2度以上AUTHコマンドが発行された場合には、否定応答を返す。
→503
*AUTH コマンドは mail transaction においては許可されない。
A−3−1 サポートされている認証機構であれば肯定応答を返す。
334 + BASE64でエンコードされた文字列を含むテキストパートとともに、334 が返される。
*クライアントが認証交換をキャンセルしたいなら、1つの*だけの行を返す。
→もしサーバがその答を受けとったなら、501を返してAUTH コマンドを拒否しなければならない。
B例
Examples:
S: 220 smtp.example.com ESMTP server ready
C: EHLO jgm.example.com
S: 250-smtp.example.com
S: 250 AUTH CRAM-MD5 DIGEST-MD5
C: AUTH FOOBAR
S: 504 Unrecognized authentication type.
C: AUTH CRAM-MD5
S: 334
PENCeUxFREJoU0NnbmhNWitOMjNGNndAZWx3b29kLmlubm9zb2Z0LmNvbT4=
C: ZnJlZCA5ZTk1YWVlMDljNDBhZjJiODRhMGMyYjNiYmFlNzg2ZQ==
S: 235 Authentication successful.
|
APOP認証 実現方式
APOP認証の実現方法について検討する。
問題がなければ、期間を取り早期実現を図る。
@接続直後の肯定応答にタイムスタンプを付加する
<POPクライアントクラスのインスタンスオブジェクトのアドレス.システム時間(long)@POPホスト名> |
+OK POP3 server ready タイムスタンプ
*このとき情報をPOPクラスのメンバ変数に情報を保持する。
AAPOPコマンドの受信
Issue:USERコマンドとPASSコマンドで行っていた処理を結合する必要がある。
→状態管理には問題ないか?
→認証処理について複数ルートを作成してしまわないか?
認証に使用するダイジェスト値は以下の文字列をMD5して取得する。
<POPクライアントクラスのインスタンスオブジェクトのアドレス.システム時間(long)@POPホスト名>パスワード
*ダイジェスト値は小文字として扱う
B肯定/否定応答を返却する
応答は以下の2種類が考えられる
肯定 |
+OK maildrop locked and ready |
否定 |
-ERR permission denied |
C使用技術
- 時間の取得
→long値で使用可能であれば、問題なし
- →long値のlogを取れる必要がある
- ダイジェスト値の算出
→UIDLコマンドを流用することが可能であれば、問題なし
D結言
工数は約0.3Kstep、実装上特に問題なし、期間はテストを含め1日と予想される。
E開発後の是正
調査時間および検討時間は1時間、工数は約0.1Kstepであり、コーディングからシステムテストに要した時間は2時間であった。
また、上記検討漏れ(赤書き個所)があった。
サーバーが送信したチャレンジで,「P D Q 4 N z Q u M T A w N z I 3Njc3N0Bhc2FvLmdjZC5vcmc+」をB
A S E 6 4 でデコードすると「< 4 8 7 4 .1007276777@asao.gcd.org>」になります。
このチャレンジと,パスワード「secret phrase」からクライアントが送信すべきレスポンスを算出する方法は,かぎ付きメッセージ・ダイジェストと呼ばれている
方法で,RFC 2104 で規定されています。
@
まずパスワードとipad(0x36を64回繰り返した文字列)を1文字づつXORを計算した64バイトのデータ列を作成します。
A
パスワードとopad(0x5cを64回繰り返した文字列)を1文字づつXORを計算した64バイトのデータ列を16進数で表現すると図14のようになります。
B
次に,@の文字列にチャレンジ「<4874.1007276777@asao.gcd.org>」をつなげて,メッセージ・ダイジェスト5(MD5,
詳しくはRFC 1321を参照してください)と呼ばれるハッシュ関数に入力して,その値であるハッシュ値を計算すると,図15に示す16バイトのデータ列が得られます。
C
そして,AとBのデータ列をつなげて,MD5ハッシュ関数に入力すると,図16に示す16バイトのデータ列が得られます。
D
これを16進数で表現し,その前にユーザー名と空白文字をつなげた文字列,「sengoku
562eaeacde6c4233d63c66b1d268f586」がレスポンスとなります。
コマンド |
意味 |
必須 |
USER ユーザー名 |
認証するユーザー名を指定する |
○
|
PASS パスワード |
認証するユーザーのパスワードを指定する |
○
|
APOP ユーザー名 ダイジェスト |
USER、PASSコマンドの認証の代わりに使用する。グリーティング・メッセージのチャレンジとパスワードから導いたダイジェストで、ユーザー認証を行う |
△
|
STAT |
メールメッセージの数とサイズを応答する |
○
|
LIST [メッセージ番号] |
メールメッセージ番号とそれぞれのサイズを応答する。メッセージ番号が指定された場合には、該当メッセージ分のみが対象 |
○
|
RETR メッセージ番号 |
指定されたメッセージ番号のメッセージ全体を表示する |
○
|
DELE メッセージ番号 |
指定されたメッセージ番号のメッセージを削除する |
○
|
NOOP |
何もしない |
○
|
RSET |
認証確立後発生した削除処理を全て取り消す |
○
|
TOP メッセージ番号 Line数 |
指定されたメッセージ番号のメッセージの指定されたLine分だけボディを表示する。Line数が0の場合は、ヘッダーのみの表示となる |
△
|
UIDL [メッセージ番号] |
UIDLの一覧を表示する。メッセージ番号が指定された場合は、該当メッセージ分のみ |
△
|
QUIT |
ログアウトする |
○
|
LAST |
最後にアクセスしたメッセージ番号を表示する |
×
|
XTND 拡張命令 [引数] |
RFC1082で定義されている。引数として他の拡張命令を伴うことで、その拡張命令を実行する。拡張命令としては、bboards、x-bboards、archive(電子掲示板やネットニュースの一覧表示や購読)がある |
|
CAPA |
オプションや拡張機能のコマンドなどの「能力」一覧の表示 |
|
AUTH |
CRAM-MD5、LOGIN形式など、IMAP4などとも共通する認証を行う |
|
PIPELINING |
ESMTPのPipeliningのような、非同期通信の開始の宣言 |
|
○……実装は必須 △……実装はオプション ×……最新仕様(RFC1939)では削除されている
無印……拡張仕様(RFC2449)などで定義されているが、実装は少ない |
メールボックス使用状態検出の高速化対応
メールボックスの使用状況の情報取得は時間がかかり、本来行わなければならない箇所で単純に行うことはできない。そこで、単純な取得処理ではなく同様の効果を得られる代替方法を採用することによりこの問題を解決する。
増加検出
- SMTPでのメール受信時に使用状態ファイルを加算する。
- prtmailboxコマンド発行時
減少検出
- メール削除時(送信時に被る恐れがある)
- メールボックスが空のとき
問題
- メールが手で消された場合は?
→異常発生時に、不要メールを手で消すことはかなり考えられるケースであり、対処が必要
IMAP4対応
- http://www.atmarkit.co.jp/fnetwork/rensai/netpro08/netpro01.html
ポート番号:143