How it works
メールが着く仕組みをまとめてみました。
誰が何をするのか
電子メールが複雑なのは、様々な立場が存在することです。
例えば、hoge.netというプロバイダでsmtp.hoge.netというサーバを使っている人が
kei@fuga.netにメールを送る時、出てくる立場を列記してみます。
- 送信者のメーラー(Outlookとか)
- 最初のSMTPサーバ(smtp4.hoge.netとか)のsendmail
- 中継サーバ(mail.fuga.netとか)のsendmail
- 目的のサーバ(pop.fuga.net)のsendmail
- 目的のサーバ(pop.fuga.net)のpop
- 受信者のメーラー
送信者のメーラー(Outlookとか)は、まずプロバイダなどのSMTPサーバに接続し、
メールの配送を依頼します。プロバイダのSMTPサーバは、このメッセージを
一度受け取り、次のSMTPサーバ(中継サーバ)に転送します。
それぞれの中継サーバは一度メッセージを受け取り、そのメールが
自分宛てでなけでば次のサーバに転送します。
こうしてSMTP間のリレーでメールは中継されていきます。
SMTPサーバが受け取ったメールがもし自分宛てであれば、そのサーバは
メールを自分のハードディスクの決められた場所に保存します。
これでSMTPの役目は終わりです。
この後、同じサーバで動いているPOPサーバに受信者のメーラが接続し、
メッセージをダウンロードします。この時、POPサーバはパスワード管理を行います。
こうして、ようやくメッセージを読み出せるわけです。
以下では、それぞれの立場をもう少し詳しく見てみます。
主役はSMTP(sendamil, MTA)
上で見たように、電子メールの中継はSMTPです。この挙動をもう少し細かく見てみます。
そもそもSMTPとはメールをやりとりするための規格で、基本的には以下の三つの機能しかありません。
- メールを渡すこと(中継)を要求する
- メールの中継を受け着ける
- メールの中継を拒否する
メールを受け取ったSMTPサーバは何らかの方法で次に接続するサーバを決め、
中継を要求します。要求されたサーバは自分宛てのメールであればこれを受け着けます。
自分宛てでなくても、場合によっては受け着けます。(詳しいことは後述します)
SMTPが接続するサーバは、現在では基本的にDNSのMXレコードというのを用いて決められます。
これは「このアドレスのメールはここに転送する」というデータベースで、
例えば*@hoge.comはpop.hoge.comに、といったことが書かれています。
(参考までに、通常のDNSはドメインとIPの対応が書かれています。
例えば、pop.hoge.comは123.45.67.89のような感じです)
これを知った上で、上のメールが転送される様子を詳しく見たのが下です。
- メーラー(Outlookとか)がsmtp.hoge.comに中継を要求、smtp.hoge.comは受け着ける
- smtp.hoge.comはDNSのMXレコードを引き、fuga.comを検索する。
その結果、fuga.comを受け取るサーバは12.34.56.78(pop.fuga.com)とわかった
- smtp.hoge.comはpop.fuga.comに中継を要求、pop.fuga.comは受け着ける
また、SMTPの設定によっては、DNSを引かず直接どこかのサーバに転送する場合もあります。
小さなメールサーバが一々DNSを引くよりは、一度基幹のサーバに集めた方が
効率的だからです。ともあれ、ポイントはSMTPはどこのサーバにメールを転送してもよい、
ということです。このため、経路上に故障があっても比較的柔軟に経路を設定することができます。
これを知った上で、僕がsmtp4.hoge.comからkei@fuga.comにメールを送る時の手順(の例)を記述してみます。
- メーラーがsmtp4.hoge.comに中継を要求、smtp4.hoge.comは受け着ける
- smtp4.hoge.comはどんなメールでもmail.hoge.comに中継することになっている
- smtp4.hoge.comはmail.hoge.comに中継を要求、mail.hoge.comは受け着ける
mail.hoge.comはDNSのMXレコードを引き、fuga.comを検索する。
その結果、fuga.comを受け取るサーバは12.34.56.78(pop.fuga.com)とわかった
- pop.hoge.comはmail.fuga.comに中継を要求、pop.fuga.comは受け着ける
MXレコードには、そのメールの最終目的地ではなく、「とりあえず中継する場所」が書かれています。
このため、例えば以下のようになることもあります。次はkei@sub.fuga.comに送る例を見てみます
- メーラーがsmtp4.hoge.comに中継を要求、smtp4.hoge.comは受け着ける
- smtp4.hoge.comはどんなメールでもmail.hoge.comに中継することになっている
- smtp4.hoge.comはmail.hoge.comに中継を要求、mail.hoge.comは受け着ける
mail.hoge.comはDNSのMXレコードを引き、sub.fuga.comを検索する。
その結果、sub.fuga.comを受け取るサーバは12.34.56.78(mail.fuga.com)とわかった
- mail.hoge.comはmail.fuga.comに中継を要求、mail.fuga.comは受け着ける
mail.fuga.comは自分のネットワークの設定を参照し、pop.sub.fuga.comが転送先と知る
- mail.fuga.comはpop.sub.fuga.comに中継を要求、pop.sub.fuga.comは受け着ける
このように中継された経路は、メールのReceived:ヘッダに書かれています。
ちょっと見てみると、メールのネットワークの構成が分かって面白いです。
どういう時に中継を拒否するか
上の仕組みを見ればわかるように、SMTPサーバは場合によっては「メールが自分宛てでなくてもメールを受け取る」
ことがあります。かつては、ほとんどのSMTPは自分宛てではないどんなメールも受け取り、
次のホストに転送していました。しかし、今ではSPAMの問題によりそのようなサーバは少なくなりました。
ただし、多くのサーバが中継に参加した方が、メールシステムの耐故障性は高まります。
このため、一般的には以下のような設定がされるようです。
- SPAM送信者として登録されているSMTPからのメールは(自分宛てであっても)拒否
- 通常のホストからは、自分宛てのメールのみを受け取り、その他は拒否する
- 信頼できるサーバからのメールは、全て受け着ける
- 末端の、ユーザーのメーラーから直接メールを受け取るSMTPサーバでは、ユーザ認証を通過すれば
あらゆるメールを受け着ける(後述)
「信頼できるサーバ」ですが、単にSPAMを送信しないだけでは信頼できるサーバとは言えません。
管理がしっかりされていないと、自分が拒否したはずのSPAMを受け着けて転送してくるかもしれません。
末端のホストでは、中継を一切拒否しても問題はないと思います。
POP / IMAPの仕組み
こうして目指すサーバに付いたメールですが、このままではサーバにログインしなければ読めず不便です。
これを各自のPCで読めるようにするのがPOP / IMAPです。
POPとIMAPの違いは、メールをダウンロードしてサーバ上に残さないか、メールはサーバ上に置いておき、必要に応じてダウンロードするかです。どちらを用いるかは好みですが、IMAPが出来ればPOPは出来ます。昔はサーバにログインアカウントとメールアカウントは名前、パスワードとも共通だったようですが、今は設定することでアカウントが無い人でもpop/imapのサービスを提供することができます。
POP,IMAPとも基本は平文パスワードが流れてしまうので、今ではパスワードを動的に生成するAPOPや、パスワードを暗号化するPOP-SSL、IMAP-SSLの使用が推奨されています。
プロバイダが提供するSMTPサーバについて
先にメールの中継は信頼できるサーバからのみと設定される、と書きましたが、
ユーザーからのメールを一番初めに送信するSMTPサーバはそうも言っていられません。
プロバイダで取られる一つの解決方は、接続可能なIPを自分のネットワークに
限定することです。例えば僕が使っているso-netのsmtpサーバには、so-net
経由でしか(家のADSLでつないでいる時しか)接続できません。
しかし、これでは移動先でメールが送信できないし、プロバイダ以外が
提供しているメールサービスは利用できません。
この解決は簡単で、SMTPに接続できる人をパスワードで制限すればよいのです。
SMTP自体にパスワードを設けたのをSMTP Authと言います。これは今後主流になると
思われ、新しいメーラーでは対応しているようですが、まだまだ普及していません。
これに対し、現在最もよく使われているのはPOP before SMTPと言われる方式です。
これは後述するPOPの認証を用いてSMTPの接続を制限するものです。
POPはメールを読み出すためのプロトコルで、パスワード認証が絶対必要です。
なので、メーラーと言われるソフトは少なくともPOPの認証には対応しています。
POP認証が成功した場合、その相手のIPアドレスと接続した時刻をサーバが
保存しておきます。
そして、SMTPサーバはこの記録を参照し、もし接続してきたメーラーのIPが
リストに有れば中継を許可します。
まとめ
メールサーバは昔から広く使われていて、根本の仕組みは
決して難しくありません。
しかし、現代ではSPAMやクラッキングに対応するため、
各環境に合わせた様々な設定が必要になります。
管理者の皆さんはがんばりましょう。