10.4. 基本的な SMTP サーバーの設定

Postfix の設定ファイルは /etc/postfix/ ディレクトリに格納されています。その中で Postfix の動作を定義する最も重要な設定ファイルは、/etc/postfix/main.cf です。Turbolinux 10 Server では、 ローカルでのメール配送のみが許可されるように設定されています。リモートからの SMTP 接続には応答しないように初期設定されているため、外部からのメールを受信することはできません。また、クライアントはこの SMTP サーバーを経由してメールを送信することもできません。したがって外部の SMTP サーバーとメールの配送を行うには、/etc/postfix/main.cf の編集が必要です。

ここでは、最初に最も基本的なメールサーバーの設定について解説します。ここで解説するメールサーバーとは、1 台のサーバー上で SMTP と POP3/IMAP4 サーバーを運用する場合を想定したメールサーバーです。つまり、外部から配送されたメールを受信して自ホストのメールスプールに格納し、クライアントは、このサーバーから POP3/IMAP4 でメールを引き取ります。また、クライアントは、このサーバーを SMTP サーバーに指定することで外部へのメールを送信します。しかし、ファイアウォールが存在するネットワーク環境では、DMZ(非武装地帯)に設置した 外部 SMTP サーバー(メールエクスチェンジャ、メールゲートウェイなどと呼ばれます)が受信したメールを LAN 上に設置した内部 SMTP サーバーへそのまま転送し、このホストがメールスプールを持つといった構成もよくとられます。このような構成では、ローカル宛てのメールは LAN 内の SMTP サーバーが処理し、外部宛てのメールは外部 SMTP サーバーへ転送して処理することになります。メールスプールが外部 SMTP サーバーに存在しないため、万が一クラッキングされてもユーザーの大切なメールに影響が及ぶことも少なく、被害を最小限に抑えることができるセキュリティ上のメリットがあります。

10.4.1. MX レコードの確認

Postfix の設定を行う前に、DNS サーバーの MX レコードが適切に指定されていることを確認してください。環境によっては、契約しているインターネットサービスプロバイダが提供している DNS サーバーに MX レコードを設定してもらう必要があります。SMTP サーバーはメールを送信する際、DNS サーバーの MX レコードを参照し、メールを送信すべき SMTP サーバーを判断します。例えば、FQDN が mailgw.turbolinux.co.jp の SMTP サーバーの場合、この SMTP サーバー上の電子メールアドレスは、username@mailgw.turbolinux.co.jp となります。しかし、多くの SMTP サーバーは、username@turbolinux.co.jp という電子メールアドレスを使用したいため、ユーザーが送信する電子メールアドレスのドメイン名を mailgw.turbolinux.co.jp から turbolinux.co.jp に強制的に書き換える設定を行います。したがって、ユーザーが送信する電子メールのアドレスにホスト名はありません(この例では mailgw)。しかし、ドメイン名の書き換えを行った場合、 他の SMTP サーバーは、username@turbolinux.co.jp 宛てのメールを送信する SMTP サーバーが mailgw.turbolinux.co.jp であることを知ることができません。このような宛先ドメイン名 turbolinux.co.jp から、実際にメールを送信する SMTP サーバー mailgw.turbolinux.co.jp を解決するために参照されるのが MX レコードです。例えば、DNS サーバーのゾーンファイルには、実際にメールを送信する SMTP サーバーを定義する MX レコードとその SMTP サーバーの IP アドレスを示す A レコードが以下のように定義されています。

turbolinux.co.jp.              IN  MX   10  mailgw.turbolinux.co.jp.
turbolinux.co.jp.              IN  MX   20  mailgwbak.turbolinux.co.jp.

mailgw.turbolinux.co.jp.       IN  A        192.168.0.3

この場合、SMTP サーバーは、taro@turbolinux.co.jp 宛てのメールを送信するときに DNS サーバーの MX レコードを参照し、メールを送信すべき SMTPサーバーが mailgw.turbolinux.co.jp であることを知ります。また、MX レコードの数字は、SMTP サーバーの優先順位を意味します。通常は、プライマリメールサーバーである mailgw.turbolinux.co.jp へメールは送信されますが、障害が発生しメールサーバーとして機能していない場合は、mailgwbak.turbolinux.co.jp. がセカンダリメールサーバーとしてメールを受け取ります。(項10.4.3 を参照)。

10.4.2. 設定ファイル(/etc/postfix/main.cf)の編集

Postfix の 設定ファイルである /etc/postfix/main.cf の記述方法は非常に単純です。/etc/postfix/main.cf には、以下の書式で設定を記述します。# から始まる行はコメントと見なされます。

parameter = value

このように、Postfix の設定は、parameter に適切な value を代入するだけです。value が複数存在する場合は、,(カンマ)で区切り続けて指定します。また、value が 代入された parameter は、他の場所で $parameter と指定することで参照することができます。/etc/postfix/main.cf を参照すると数多くのパラメータが記述されていますが、基本的な SMTP サーバーを動作させるために設定が必要なパラメータはほんの僅かです。

単純な SMTP サーバーを稼動させるために最低限設定が必要となる代表的なパラメータは以下のものです。これらのパラメータの値を確認、修正するだけで SMTP サーバーとして動作させることができます。

myhostname = mailgw.turbolinux.co.jp
#mydomain = domain.tld
#myorigin = $myhostname
inet_interfaces = 127.0.0.1
mydestination = $myhostname, localhost.$mydomain
#mynetworks_style = subnet
#mynetworks =
#relay_domain = $mydestination

各パラメータの意味を以下に示します。

myhostname

SMTP サーバーの FQDN を指定します。このパラメータは他の多くのパラメータから参照されます。

mydomain

ドメイン名を指定します。デフォルトではコメントアウトされています。デフォルトの設定は、myhostname で指定したホスト名から最初のピリオドまでを引いたものになります。つまり、上記の例では、mydomain = turbolinux.co.jp となります。このパラメータは他の多くのパラメータから参照されます。

myorigin

サーバー上から直接メールをローカル配信した場合に、自動的に補われるドメイン名を指定します。デフォルトでは、コメントアウトされています。デフォルトの設定は、$myhostname です。つまり、myorigin = mailgw.turbolinux.co.jp となります。

inet_interfaces

リモートからの SMTP 接続要求に応答するネットワークインターフェースのアドレスを指定します。Turbolinux 10 Server のデフォルトでは、localhost が指定されています。つまり、ローカルホストからの要求にのみ応答するように初期設定されていますので、デフォルトでは、この SMTPサーバー宛てのメールを受信することはできません。よって、他のホストからのメールを受信するには、この SMTP サーバーがメールを受信するネットワークインターフェースを指定する必要があります。通常は、全てのインターフェースを対象とするため ALL を指定します。

inet_interfaces = ALL

mydestination

この SMTP サーバーが受信するドメイン名をリストします。デフォルトでは、$myhostname, localhost.$mydomain が指定されています。よって、この SMTP サーバーが turbolinux.co.jp ドメインを持つ username@turbolinux.co.jp のようなメールを受信するためには、$mydomain もしくは turbolinux.co.jp を指定する必要があります。

mydestination = $myhostname, localhost.$mydomain, $mydomain
mynetworks_style、mynetworks、relay_domain

これらのパラメータはリレー制限に関する設定を行うパラメータです。信頼されたホストからのリレーを Postfix に任せることもできますし、手動で入力することもできます。デフォルトでは、mynetworks_style = subnet が有効とされています。この場合、Postfix は同じ IP サブネット上に存在するクライアントを信頼し、リレーを許可します。手動で指定する場合は、mynetworks へ networkaddress/subnet のパターンのリストを明記します。mynetworks パラメータを指定した場合、mynetworks_style パラメータは無視されます。

relay_domain には、リレーを許可するドメインを指定します。デフォルトではコメントアウトされています。通常は信頼しない第三者によるメールの中継は拒否すべきなので、デフォルトの $mydestination のままで問題ありません。このように、Postfix のデフォルト設定では、同じサブネット上に存在するクライアントからのリレー以外は拒否し、SPAM などで不正に利用されることを防いでいます。逆に、リレーを許可する場合は、relay_domain パラメータで許可するホストを指定する必要があります。

したかって、SMTP サーバーを稼動させるために修正が必要となるパラメータは、myhostname、inet_interfaces、mydestination だけです。これらのパラメータの値を修正し、Postfix を再起動すれば、最も基本的な SMTP サーバーとして動作します。

/etc/init.d/postfix restart

POP3/IMAP4 サーバーの起動については、項10.8 を参照してください。

10.4.3. セカンダリメールサーバーの設定

メールサーバーは 24 時間稼動することが要求されるサーバーの 1 つです。障害発生時に備えてセカンダリメールサーバーを用意しておけば、メール配送のトラブルを減らすことができます。 セカンダリメールサーバーは、プライマリメールサーバーの代わりにメールをキューへ溜めておき、プライマリメールサーバーの復旧後、一時的に受け取ったメールをプライマリメールサーバーへ向けて配信する働きをします。

セカンダリメールサーバーとして機能させるために必要となる要件を以下に示します。

ここでは、プライマリメールサーバーを mailgw.turbolinux.co.jp 、セカンダリメールサーバーを mailgwbak.turbolinux.co.jp として、セカンダリメールサーバーを設定するための /etc/postfix/main.cf のパラメータについて解説します。

最初に mydestination パラメータを確認します。$mydomain が指定されているとプライマリメールサーバーの停止中に受信したメールを取り込んでしまうため、プライマリメールサーバーが復活しても転送されません。したがって、$mydomain が指定されている場合は削除します。

次に、turbolinux.co.jp ドメイン宛のメールを受け取ることができるように、relay_domains パラメータにドメイン名を指定します。

relay_domains = turbolinux.co.jp

MX レコードを参照せずにプライマリメールサーバーへメールを転送するには、/etc/postfix/transport ファイルにプライマリメールサーバーを指定しておきます。

turbolinux.co.jp   smtp:mailgw.turbolinux.co.jp

設定完了後は、以下のコマンドを実行し /etc/postfix/transport.db ファイルを更新する必要があります。

# postmap /etc/postfix/transport

10.4.4. メールゲートウェイの設置

メールサーバーの構築においては、DMZ(非武装地帯)に設置した外部 SMTP サーバー(メールエクスチェンジャ、メールゲートウェイ)が受信したメールを LAN 内に設置した内部 SMTP サーバーへそのまま転送し、そのホストがメールスプールを持つといった 2 段構成もよくとられます。ここでは、メールゲートウェイとなる外部 SMTP サーバーを mailgw.turbolinux.co.jp 、内部 SMTP サーバーを mail.turbolinux.co.jp として各SMTPサーバーの /etc/postfix/mail.cf のパラメータ定義について解説します。

mail.turbolinux.co.jp の設定

内部の SMTPサーバーを設定するために、先に解説した最も基本的なメールサーバーと異なる点は、クライアントからのメールをメールゲートウェイである mailgw.turbolinux.co.jp へそのまま転送することです。そのためには、relayhost パラメータを指定します。

relayhost = mailgw.turbolinux.co.jp

これだけで、クライアントからのメールは、メールゲートウェイへ配送され、送信メールアドレスのドメイン名を処理する SMTPサーバーへ mailgw.turbolinux.co.jp により配送されます。

mailgw.turbolinux.co.jp の設定

メールゲートウェイを設定するために最低限必要な要件は、

  • 外部からのメールを mail.turbolinux.co.jp へ転送

することです。そのためには、transport_maps パラメータを使用します。デフォルトの transport_maps パラメータは以下のように指定されています。

transport_maps = hash:/etc/postfix/transport

ここで指定されている /etc/postfix/transport は、配送方法を指定するための設定ファイルです。つまり、このファイルにメールを転送する SMTPサーバーとドメイン名とのマップを指定します。この例では、turbolinux.co.jp や .turbolinux.co.jp ドメイン宛てのメールを mail.turbolinux.co.jp へ転送するために以下のように指定します

turbolinux.co.jp         smtp:mail.turbolinux.co.jp
.turbolinux.co.jp        smtp:mail.turbolinux.co.jp

設定完了後は、以下のコマンドを実行し /etc/postfix/transport.db ファイルを更新する必要があります。

# postmap /etc/postfix/transport

これで、メールゲートウェイへ届いた turboliux.gr.jp ドメイン宛てのメールは、mail.turbolinux.co.jp へ転送されるようになります。

10.4.5. メールエイリアス(/etc/postfix/aliases)

Postfix のエイリアス機能を使用すると、メールを特定のユーザーに転送したり、複数のユーザーに配信するメーリングリストの機能などを簡単に実現できます。エイリアスの設定は、/etc/postfix/aliases ファイルで行います。各項目は、以下の書式で記述されています。コロン : のあとには、スペースかタブが必要です。

name: addr_1, addr_2, addr_3, . . .

例えば、user1 というユーザーのメールアドレスに foo という別名を指定するには、以下のように記述します。

foo: user1

これにより、foo 宛のメールはユーザー user1 へ転送されます。複数のユーザーに配信するには、以下のようにカンマで , で区切って記述します。

turbo: taro, jiro

これにより、turbo 宛てのメールはユーザー taro と jiro へ転送されるようになります。このように、簡単なメーリングリストとしても利用できます。

/etc/aliases の変更後は以下のコマンドを実行し、データベースファイルである、/etc/aliases.db を更新する必要があります。

# newaliases

10.4.6. メールの転送(~/.forward)

自分宛てに配送されたメールを他のアドレスへ転送したい場合などに利用されます。利用するには、各ユーザーのホームディレクトリに .forward というファイルを作成します。例えば、ユーザー foo@turbolinux.co.jp 宛てのメールをすべて boy@turbolinux.com へ転送したいときは、/home/foo/.forward というファイルを作成し、そのファイルに転送先のアドレスを記述します。

boy@turbolinux.com

これで foo@turbolinux.co.jp 宛てのメールは foo のメールスプールには配信されず、boy@turbolinux.com に転送されます。