MTAとしてのPostfixの概要

難しいことがいろいろといわれていますが、ネットワークとは基本的に

  • ファイルの新規作成と保存
  • コピーや移動
  • 削除
  • 読み込みと条件制御

で行われているといわれていますが、実にその通りでこれ以外のことは行われていないといっても過言ではありません。であるにもかかわらず何故にネットワークの解説を読んでいると頭がいたくなるのか?というとこれらの4つの動作の微妙な違いをこれまた微妙なニュアンスの言葉でもって定義しているからです。例えば「転送」などという言葉がありますが、あれはただ単にディレクトリ間をコピーしているか移動しているか、またはネットワーク間をコピーまたは移動しているか...というだけであって、この「ネットワーク間」でもってコピーなり移動なりされると「転送」という言葉になります。またファイルを移動する側から見れば「送信」になり、移動してくる側から見れば「受信」という具合になるわけです。コピーなり移動のその先を見つけて働きかければ「アクセス」とかになるのであろうし、何らかのファイル(文字列)を読み込んで制御すれば「認証」とかなんとかいろんな言葉になってしまいます。
 そんなわけでメールサーバーの設定もただ単にネットワーク間をファイルがコピーされたり移動したりしているだけです。書いて送信し、誰かが受信しているという...まるで手紙の運送方法を比喩的にネットワークのファイル転送の仕組みに用いているだけであって、書いてコピーして、そのコピー先で誰かがファイルを開いて読んでいるだけです。
 コピー&移動(cp & mv)には、コピー元とコピー先があります。ローカルでのこの作業はパスで指定しますが、メールというシステムではネットワーク間のホストをコピー&移動します。要するにそういうことです。どうしてコピーなのかというと送信履歴は内容もそのまま自分のメーラーに残りっているからです。単純にいってしまえばそんな構造をしています。

MTA = Postfix

postfix_mtaMTA(Mail Transfer Agent)といわれるシステムは、そのコピー&移動のもうちょっと進化したシステムです。上記の通りホスト間でファイル(文字列)をコピーしているだけです。ですが、これまた上記の通り微妙なことがいろいろとできるのであって、このいろいろできるところがメールサーバーの肝でもあるわけです。どんな複雑なコピーをするかというと、

  • 一斉に同じ内容のファイルを複数のホストに向けてコピーするとか、
  • あるホストから送られてきた(コピーされてきた)ファイルを拒否する(拒否して即座に削除するとか...)
  • 指定時間にコピーするとか、
  • そもそものコピーをいろいろと制限するとか、
  • LAN内のホストだけにコピーするとか、
  • SSHみたいに暗号化してコピーするとか、
  • ...

もう数えただけで様々な方法があります。こういう様々な微妙な操作をするコピーのシステム、すなわちメールの送信システムをMTAといいます。
 どこのサイトでももうお馴染みの解説なので軽く触れる程度にしますが、このMTAという便利なシステムは、歴史的に長らくSendmailというソフトが担ってきました。しかしSendmailは感覚的に古い、設定が面倒(オライリー社のSendmailの分厚さを見れば一目瞭然でしょう!)、セキュリティー関係の設定が複雑などの欠点もあって、いずれにしろいわゆる「普通に使えればいい」という感覚で設定したい怠惰な連中にとっては違うシステムが必要だったわけです。そこで登場したのがqmailではなく、Postfixです。様々なMTAの折衝の結果というぐらい安定していて、セキュリティーに強く、複雑奇っ怪なことはできないとしても普通に使えて、設定がそれなりに楽というわけです。僕自身の経験からいうとqmailはちょっと癖があるのであんまりおすすめできません。Postfixは古来のsendmailとも相性がいいので混乱することも少ないと思います。そんなわけでここではPostfixの設定を例にいろいろと解説します。

 MTAとはいったい何なのかというと、メールサーバーあるいはメールの送受信の全体的なシステムという視座からみればたった一部の機能でしかありません。つまりメールを転送(送信)する、先の平たい言葉でいえばコピー&移動するだけです。そのコピー&移動されたファイルを開いて読むという作業はまた別のソフトが担っています。
 しかし考えてみれば不思議なことですが、先の「ファイルの新規作成と保存」とありますが、もしかしたら新規で作成したファイルである必要が必ずしもない筈です。そうなんです。別のところからコピーされてきたものを再度コピーしているということだってありうるわけですよ。それをまた別のところにコピーする...。そんなことをやっている可能性だってあります。MTAも同様に他のMTAから送信されてくるファイル(メール)を受け取り、それをまた違うMTAに送信したりするのです。あっちゃこっちゃでコピーして最終的にどこかに落ち着くというのがメールの配信のシステムです。
 MTAは無数にあります。あなたの事務所に数個、本社のものを合わせると数百個あるかもしれません。そしてある人がメールを書きます。そのメールはMTAに送信されます。MTAはアドレスにしたがって次のMTAに送信します。そのMTAはまたアドレスと規則にしたがって送信し、また次のMTAに送られるかもしれないし、最終的にどこかのメールボックスに落ち着くかもしれません。こんな風な経路をたどるのは、一つはDNSサーバーのシステムと同様にある意味では負荷分散のシステムそのものです。一つのMTAが日本人全員のメールを捌くには過酷すぎます。それぞれどのアドレスにいけばきちんと処理をしてくれるかを規則にしたがって配信されるので非常に賢いシステムとなっているわけです。
 しかし、あなたが扱うMTAは一つ乃至数個ぐらいなものです。そして、そのMTAは入り口と出口があります。入り口からは、新規で送信されてきたメールかもしくはどこか別のMTAからやってきたメールを受け付けるのみです。出口は他のMTAに送信するか、または指定のメールボックスに送信するかのどちらかです。新規のメール→あなたのMTA→メールボックスという経路はいわゆるローカルということになります。例としてrootが自動的にメールを書いたりします。それを同じサーバー機が受け取りメールボックスに格納します。他のMTA→あなたのMTA→他のMTAという経路はネットワーク上をメールが行き来していることになります。これはどのMTAからくるかわかりません。あなたにアクセスする人は自由ですし、あなたはそのメールにある情報を手がかりに次のMTAに送信するだけです。しかし、ここが肝でして、これがいわゆる不正中継というメールサーバーの穴になる可能性もあります。ここらの設定が非常に微妙なのです。

 不正中継を防止するためにいわゆる認証という機能を使います。どこからやってきたメールなのかをいちいち確かめて「これはいい、これはダメ」というフィルターをかける作業をします。これが非常に面倒くさい。しかし面倒くさがっているとスパムメールが世の中に飛び交います。これはいけない。適当にコピーしたり移動したりしてはいけないのです。
 ここでは、「普通に使う」を目的にMTAとしてPostfixを設定する方法を紹介します。