メールサーバー勉強

 メールアプリケーションを作りたいということで、まずは今更ながら基本的なメールの仕組みを勉強してみた。ネット上でもJamesの資料が少ない(メールサーバーの各ポイントを説明するサイトは多いが、そのポイント同士をつなげるサイトが少ないという意味で)ので、唯一のJames本を買って教本にしています。



メールサーバの役割

 メールサーバーには、大きく以下の役割がある。

MTA Mail Transfer Agent メールクライアント(Outlook Expressなど)から受け取ったメールを転送する
MDA Mail Delivery Agent 届いたメールを適切なユーザーのメールボックスへ格納する
MRA Mail Retrieval Agent メールクライアントへメールの取り出しを行う

 これに、Outlook ExpressなどのMUA(Mail User Agent)が加わって4つでメールシステムを表現する。しかし、実際にはMTA、MDA、MRAは1つのサーバーでまとめて設置されることもある。Jameseは、config.xmlsmtpサーバと、popサーバーを兼ねることもできるけど、これを言っているのね。合点の承知の助。もちろん、JamesをMTA用とMRA用に分けて運用するのもconfig.xml次第。MUA、MTA、MRA間では、以下のプロトコルを通して通信が行われる。
 



ケース1:プロバイダと契約しているメールのパターン




ケース2:MTAが社内用、社外用に別れているケース


 これらのメールサーバーは上記で書いたように通常1つのサーバにMTA、MDA、MRAが配置されるが、社内用のメールサーバーと社外用のメールサーバーに分けて配置されることもあるがポイントは以下

  1. 社外向けメールサーバーがクラックされても、社内向けサーバーは無事になるように
  2. クラックされても無事なように、社外メールサーバーにはユーザのメールボックスは置かない
  3. 社外向けメールサーバーは、インターネット上へ向けやり取りされる。
  4. 社外向けメールサーバーは、MXサーバーと呼ばれることもある。(後述するMXレコード)

用語解説

SMTP
  1. Simple Transfer Protocolの略
  2. 送受信にはテキストベースのコマンドが使用される
  3. コマンドやレスポンスはCRLFで文字列終端を表現
  4. 通信ポートは25番ポート
  5. コマンドは4桁の文字列から成る
  6. レスポンスは3桁の数値である
  7. RFC821で定義
  8. 拡張仕様はRFC1651〜RFC1653

 これらのSMTPを実装したSMTPサーバは、いわゆるMTA、MDAの機能を処理する。但し、SMTPサーバには認証の機能が無いため、転送の依頼があると、素直に転送してしまう。これがリレーと呼ばれるもので、スパムに利用される。

POP
  1. Post Office Protocolの略
  2. POP1,POP2とPOP3では互換性がない。現状よく使われるPOPはあえてPOP3と表記して区別することが多い
  3. RFC1725、RFC1734、RFC1939(RFC1725)で定義される
  4. SMTPと同じくテキストベースのコマンドが使用される
  5. 通信ポートは110番ポート


 MUAから見た場合に、メールを送信する場合は、SMTP自体は認証の機能が無いことから、セキュリティ上問題がある。そのため、POP3自体は認証が必要なことを利用して、POP3で認証をしてからSMTPサーバーにメールの転送を依頼するという方法が取られる。(POP before SMTPと言う)

DNS
  1. MTAからMTAにメールを転送する場合に、相手方のMTAのIPアドレスを知るために使用される。
  2. 次のような順番で、DNSから相手方のIPを取得し、メールの転送依頼を行う
    1. ① 転送先のメールのドメインDNSに送り、MXレコードをもらう
    2. ② もらったMXレコードを基に、DNSからMXレコードに対応するAレコード(IPアドレス)をもらう
    3. ③ もらったAレコード(IPアドレス)が指し示すSMTPサーバーの25番ポートにメールを転送