arcanum_jp’s blog

おっさんの日記

メールサーバー勉強

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 SMTPSMTP-AUTHの2つ。この2つも暗号化により、いくつかに分けることができる。

POP before SMTP


 SMTPサーバ自体には認証機能が無いので、メール転送の依頼が来ると普通に素通り(リレー)させてしまう。そうなると、誰でも何でもドコへでも送信できてしまうので、それを制限する。ということで認証させる。但しあくまでこれは、MUA〜MRA間の認証。MTA〜MTA間では認証が無いので、別の対策を行う必要がある。


 それでできたのがPOP before SMTPという仕組み。この仕組みについては検索すれば出てくるけど、概要はSMTPサーバには認証機能が無いが、POP3サーバのメールの受信には認証が必要なことを利用して、受信してからSMTPサーバにメール送信を依頼する方法。順番としては以下のような感じ。


 

  1. MUAPOP3に認証を依頼
  2. MRAは認証を行い、そのIPを記憶し、認証OKとする
  3. MUAは認証OKのレスポンスをもらったら、一旦メールを受信する。
  4. メールを受信したのち、SMTPサーバに対して、メールの送信要求を出す。
  5. SMTPサーバは送信要求の来たMURのIPと、MRAの記憶したIPが同じだったら、メールを送信する。
  6. MRAの記憶したIPは一定時間有効期間を持つ。
  7. 一定期間を過ぎると、再度MRAと認証しなければならない。
  8. この概要は、後に記載する、APOP before SMTPもPOPS before SMTPSも同じ。




 この方式には以下のような欠点がある。

  1. ローカルネットワーク内での話
    1. MUAが一度認証に成功すると、そのユーザがログアウトして、スグに次の人がマシンにログインすると認証をしなくともメールを送信できてしまう。()
  2. WAN側との話
    1. ISPの提供する動的IPのリース期間が切れてしまい、他のマシンに同じIPが割り振られたときも同様に認証無しでメールを送信できてしまう。
  3. 認証自体の話
    1. POP3との認証でユーザーID、パスワードなどが平文(ただの文字列)で送られるために、通信経路を盗聴されるという問題。
APOP before SMTP
  1. APOPは、Authenticated Post Office Protocolの略
  2. 前述のPOP before SMTPのうち、パスワードを暗号化して送るのがこの方式。
  3. 但し、暗号化のMD5ハッシュ方式自体の脆弱性のために、パスワードがもれる危険が報告されている。IPAでも、この方式をやめるよう勧告。

 独立行政法人 情報処理推進機構(略称:IPA、理事長:藤原武平太)は、メールの受信に利用される認証方式の一つであるAPOP(エーポップ)方式におけるセキュリティ上の弱点(脆弱性)に関する注意喚起を2007年4月19日に公表しました。

脆弱性関連情報取扱い:APOP方式におけるセキュリティ上の弱点(脆弱性)の注意喚起について:IPA 独立行政法人 情報処理推進機構
POPS before SMTPS
  1. POP over SSL before SMTP over SSLの略
  2. over SSLとあるように、MUA〜MRA間、認証後のMUA〜MTA間の通信をSSL通信にする。
  3. ここにきて、メールのすべてを暗号化する仕組み
  4. 但し、MTAに送信を依頼した後は、暗号化はされない。(それをするには、世界中のすべてのMTAがSMTPSに対応していなければならないので、現実的には無理)
SMTP-AUTH

 今までのが認証をPOPサーバーに責任を負わせていたのに対し、こちらは、SMTPサーバ(MTA)自身が認証を行う仕組み。MUAが直接MTAに対して認証を行って、メールの送信を依頼する。POP before SMTPに比べ、シンプルになったのが分かる。



認証にはいくつか種類があるが、代表的なものを記載する。

  1. AUTH PLAIN
  2. AUTH LOGIN
  3. AUTH CRAM-MD5

 AUTH PLAINとAUTH LOGINはPOP before SMTPなどと同じように、認証の通信経路は平文で行われる。AUTH CRAM-MD5はパスワードは暗号化が施される。

SMTPS-AUTH


 SMTP-AUTHが平文通信(CRAM-MD5は別)に対して、SMTPにSが付いたことで分かるように、こちらはSSL認証が施されたもの。MUA〜MTA間の通信経路を暗号化するというもの。但し、POPS before SMTPSと同じく、MTAに送信を依頼した後は、暗号化はされない。

各まとめと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が必要とのことなので、そちらを用意するのが先か・・・