メールサーバ研究所


はじめに

 ここはWizard98の研究場所です。
 公開コンテンツ&閲覧用ではありません。
 *しかし、メール関連の技術者には数万円の価値があるかも。


ダウンロード

SMTP AUTH

  1. http://www.gcd.org/sengoku/docs/NikkeiLinux02-02.pdf
  2. http://pittari-mail.net/smtp_auth/about_smtp_auth.html

APOP認証

  1. http://x68000.startshop.co.jp/~68user/net/pop3-3.html
  2. http://www.ipa.go.jp/security/awareness/administrator/remote/capter4/1.html

リモートメッセージング

  1. IMAP4規格(RFC 2060)

配信ステータス通知 

  1. インターネットの標準規格(RFC 1891〜1894)

DNS

  1. ネットワーク・コマンドでトラブル解決

nslookupコマンド

  1. nslookupの起動の仕組み
  2. nslookup 〜DNSサーバに名前解決の問い合わせを行う

名前解決

  1. DNSの仕組みと運用
  2. SMTP(Simple Mail Transfer Protocol)〜

名前解決(名前解決&MXレコード)

  1. メールサーバの仕組み
  2. DNSサーバでインターネットの風を呼ぼう!の巻

名前解決(MXレコード&sendmail)

  1. Sendmail/POPの設定と運用

名前解決(JavaMail&名前解決)

名前解決手順

  1. CNAME
  2. MXレコード、優先度の転送先のドメイン(ア)
  3. (ア)のAレコード{(ア)のMXレコードは検索しない}
  4. 成功?(成功→完了 失敗→2へ

応答コード(SMTP)

  1. SMTP応答コード一覧
  2. SMTPコマンド
  3. いつか役に立つテクニカルTips

知識

http://isweb5.infoseek.co.jp/diary/sanaki/tcpip/
電子メールサーバの管理と設定

メール 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 3030 大きなバイナリのMIMEメッセージを送信するためのSMTPサービスの拡張
RFC 3251 Electricity over IP
RFC 3092 「foo」の語源
RFC 2919 List-Id: メーリングリストを識別するための構築された(Structured)フィールドと名前空間
RFC 2822 インターネットメッセージのフォーマット
RFC 2821(1〜3章) 単純なメール転送プロトコル、1〜3章
RFC 2821(4,5章) 単純なメール転送プロトコル、4、5章
RFC 2821(6章〜) 単純なメール転送プロトコル、6章〜
RFC 2554 認証のためのSMTPサービス拡張
RFC 2476 メッセージの提出(Message submission)
RFC 2119 RFC中で使われる要求レベル表示のキーワード
RFC 1893 拡張されたメールシステムステータスコード

日本語化RFC情報

メール関係 - 日本語化RFC http://www02.so-net.ne.jp/~hat/mailer/rfc.ja.html
http://www.puni.net/~mimori/rfc/menu.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使用技術

  1. 時間の取得
    →long値で使用可能であれば、問題なし
  2.  →long値のlogを取れる必要がある
  3. ダイジェスト値の算出
    →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)などで定義されているが、実装は少ない







メールボックス使用状態検出の高速化対応

 メールボックスの使用状況の情報取得は時間がかかり、本来行わなければならない箇所で単純に行うことはできない。そこで、単純な取得処理ではなく同様の効果を得られる代替方法を採用することによりこの問題を解決する。

増加検出

減少検出

問題


IMAP4対応

ポート番号:143