MTA、MDA、MRA(MUR)の動きが分かったところで、今度はメールを出す側(MUR)から見た場合のユーザー認証をちょっと勉強してみた。まず、冒頭で言ったMTAとかってなんだっけ・・・ということでおさらい。
略語 | スペル | 種別 | 例 | ||||
---|---|---|---|---|---|---|---|
MTA | Mail Transport Agent | SMTPサーバ | James、sendmail | ||||
MDA | Mail Delivery Agent | − | Mail.local、James | ||||
MRA | Mail Retreave Agent | POP3サーバ | QPopper、James | ||||
MUR | Mail User Agent | メーラー | Outlook Express |
メール送信時の認証について
メールを出す場合の認証については、大きく分けて2つあることが分かった。POP before SMTPとSMTP-AUTHの2つ。この2つも暗号化により、いくつかに分けることができる。
- POP before SMTP:SMTPに送信する前にPOPサーバーで認証する。
- POP before SMTP
- APOP before SMTP
- POPS before SMTPS
- SMTP-AUTH:SMTPサーバ自身で認証する。
- SMTP-AUTH
- SMTPS-AUTH
POP before SMTP
SMTPサーバ自体には認証機能が無いので、メール転送の依頼が来ると普通に素通り(リレー)させてしまう。そうなると、誰でも何でもドコへでも送信できてしまうので、それを制限する。ということで認証させる。但しあくまでこれは、MUA〜MRA間の認証。MTA〜MTA間では認証が無いので、別の対策を行う必要がある。
それでできたのがPOP before SMTPという仕組み。この仕組みについては検索すれば出てくるけど、概要はSMTPサーバには認証機能が無いが、POP3サーバのメールの受信には認証が必要なことを利用して、受信してからSMTPサーバにメール送信を依頼する方法。順番としては以下のような感じ。
- MUAがPOP3に認証を依頼
- MRAは認証を行い、そのIPを記憶し、認証OKとする
- MUAは認証OKのレスポンスをもらったら、一旦メールを受信する。
- メールを受信したのち、SMTPサーバに対して、メールの送信要求を出す。
- SMTPサーバは送信要求の来たMURのIPと、MRAの記憶したIPが同じだったら、メールを送信する。
- MRAの記憶したIPは一定時間有効期間を持つ。
- 一定期間を過ぎると、再度MRAと認証しなければならない。
- この概要は、後に記載する、APOP before SMTPもPOPS before SMTPSも同じ。
この方式には以下のような欠点がある。
APOP before SMTP
- APOPは、Authenticated Post Office Protocolの略
- 前述のPOP before SMTPのうち、パスワードを暗号化して送るのがこの方式。
- 但し、暗号化のMD5ハッシュ方式自体の脆弱性のために、パスワードがもれる危険が報告されている。IPAでも、この方式をやめるよう勧告。
独立行政法人 情報処理推進機構(略称:IPA、理事長:藤原武平太)は、メールの受信に利用される認証方式の一つであるAPOP(エーポップ)方式におけるセキュリティ上の弱点(脆弱性)に関する注意喚起を2007年4月19日に公表しました。
脆弱性関連情報取扱い:APOP方式におけるセキュリティ上の弱点(脆弱性)の注意喚起について:IPA 独立行政法人 情報処理推進機構
POPS before SMTPS
SMTP-AUTH
今までのが認証をPOPサーバーに責任を負わせていたのに対し、こちらは、SMTPサーバ(MTA)自身が認証を行う仕組み。MUAが直接MTAに対して認証を行って、メールの送信を依頼する。POP before SMTPに比べ、シンプルになったのが分かる。
認証にはいくつか種類があるが、代表的なものを記載する。
- AUTH PLAIN
- AUTH LOGIN
- AUTH CRAM-MD5
AUTH PLAINとAUTH LOGINはPOP before SMTPなどと同じように、認証の通信経路は平文で行われる。AUTH CRAM-MD5はパスワードは暗号化が施される。
各まとめとJamesでの対応
上記で書いた認証方式でのJamesでの対応をまとめてみた。
方式 | 認証先 | ID | PASS | メール本文 | 認証 | James | |||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
POP before SMTP | POPサーバ(MRA) | 平文 | 平文 | 平文 | なし | 対応 | |||||||
APOP before SMTP | POPサーバ(MRA) | 平文 | 暗号化 | 平文 | なし | 対応 | |||||||
POPS before SMTPS | POPサーバ(MRA) | 暗号化 | 暗号化 | 暗号化 | SSL認証 | 対応 | |||||||
SMTP-AUTH(PLAIN) | SMTPサーバ(MTA) | 平文 | 平文 | 平文 | なし | 対応 | |||||||
SMTP-AUTH(LOGIN) | SMTPサーバ(MTA) | 平文 | 平文 | 平文 | なし | ? | |||||||
SMTP-AUTH(CRAM-MD5) | SMTPサーバ(MTA) | 平文 | 暗号化 | 平文 | ? | ? | |||||||
SMTPS-AUTH | SMTPサーバ(MTA) | 暗号化 | 暗号化 | 暗号化 | SSL認証 | ? |
さて、認証方式も分かったことだし、次は実際にJamesに設定して動かしてみたいと思う。しかし外とつなげるには固定IPが必要とのことなので、そちらを用意するのが先か・・・