Postfix 標準設定の例


このドキュメントの目的

このドキュメントは典型的な Postfix 設定をいくつか示しています。 BASIC_CONFIGURATION_README ドキュメントに書かれている基本的な設定のステップに従った後でこの ドキュメントを見直すべきです。特に Postfix でローカルメールの投函や ローカルメール配送をやったことがなければ、読み進めないでください。

このドキュメントの最初の部分では、ある特定の問題をそれぞれ1つずつ 解決する標準設定を示します。

このドキュメントの2番目の部分では、特定環境のホストでの追加設定を 示します。

スタンドアロンインターネットホストの Postfix

Postfix は直接インターネットにアクセスするスタンドアロンマシンでは、 変更なしにそのまま動くはずです。少なくとも、 http://www.postfix.org/ から ソースコードをダウンロードしてきた場合の Postfix のインストールは そのままで動くはずです。

main.cf で上書きされた設定を知るには、"postconf -n" コマンドが使えます。 スタンドアロンボックスではいくつかのパス名の設定を除き、 BASIC_CONFIGURATION_README ドキュメントでカバーしているものに加えてさらにいくつかの設定が必要です:

/etc/postfix/main.cf:
    # オプション: user@hostname ではなく user@domainname としてメールを
    # 送ります。
    #myorigin = $mydomain

    # オプション: NAT/プロキシ外部アドレスを指定します。
    #proxy_interfaces = 1.2.3.4

    # 他のホストからのメールを中継しません。
    mynetworks_style = host
    relay_domains =

設定が "実際のインターネットホスト名を持たないホストでの Postfix" セクションに当てはまるのであれば、そのセクションも参照して ください。

Null クライアントの Postfix

Null クライアントというのは、メールの送信だけができるマシンのことです。 ネットワークからはメールを受け取らず、ローカルへのメール配送もしません。 null クライアントはメールボックスへのアクセスにはたいてい POP や IMAP、 NFS を使います。

この例では、インターネットドメイン名は "example.com"、マシン名は "nullclient.example.com" であるとします。いつも通り、例にはデフォルトから 変更するパラメータのみを示します。

1 /etc/postfix/main.cf:
2     myorigin = $mydomain
3     relayhost = $mydomain
4     inet_interfaces = 127.0.0.1
5     local_transport = error:local delivery is disabled
6 
7 /etc/postfix/master.cf:
8     Comment out the local delivery agent entry

翻訳:

ローカルネットワークの Postfix

このセクションには1つのメールサーバとメールを送受信する複数の他の システムがあるローカルエリアネットワーク環境について書かれています。 いつも通りインターネットドメイン名は "example.com" とします。システムは すべて "user@example.com" としてメールを送るように設定され、 "user@hostname.example.com" 宛のメールを受け取ります。メインサーバは "user@example.com" 宛のメールも受け取ります。このマシンを mailhost.example.com という名前で呼ぶことにします。

"user@example.com" としてメールを送ることの問題点は、"root" や他の システムアカウント宛のメールも中心となる mailhost に送られてしまう ことです。これを解決するには、以下の "すべてではなく 一部のアカウントをローカルに配送する" セクションを参照してください。

いつも通り、例にはデフォルトから変更するパラメータのみを示します。

まずは mailhost 以外の設定を示しますが、それはその設定の方がシンプル だからです。このマシンは "user@example.com" としてメールを送り、 "user@hostname.example.com" 宛の最終配送先となります。

1 /etc/postfix/main.cf:
2     myorigin = $mydomain
3     mynetworks = 127.0.0.0/8 10.0.0.0/24
4     relay_domains =
5     # Optional: forward all non-local mail to mailhost
6     #relayhost = $mydomain

翻訳:

次に mailhost の設定を示します。このマシンはメールを "user@example.com" として送り、"user@example.com" に加えて "user@hostname.example.com" 宛の 最終配送先となります。

 1 DNS:
 2     example.com    IN    MX  10 mailhost.example.com.
 3 
 4 /etc/postfix/main.cf:
 5     myorigin = $mydomain
 6     mydestination = $myhostname localhost.$mydomain localhost $mydomain
 7     mynetworks = 127.0.0.0/8 10.0.0.0/24
 8     relay_domains =
 9     # Optional: forward all non-local mail to firewall
10     #relayhost = [firewall.example.com]

翻訳:

このような環境では、ユーザはメールボックスに以下の1つ以上の方法で アクセスします:

最後の場合、ユーザにはそれぞれ mailhost 上に好みのマシンにメールを 転送するエイリアスを持たせます:

/etc/aliases:
    joe:    joe@joes.preferred.machine
    jane:   jane@janes.preferred.machine

エイリアスデータベースが /etc/aliases にないシステムもあります。 あなたのシステム上での場所を知るには、"postconf alias_maps" コマンドを実行して ください。

aliases ファイルを変更するたびにマンド "newaliases" を実行してください。

Eメールファイアウォール/ゲートウェイの Postfix

考え方は "example.com" 宛のメールを内部のゲートウェイマシンに転送 するが、"anything.example.com" 宛のメールを拒否する Postfix Eメール ファイアウォール/ゲートウェイを構築するというものです。1つ問題があります。 "relay_domains = example.com" とすると、ファイアウォールは通常 "anything.example.com" 宛のメールも 受け取ってしまいます。これは正しくありません。

注意: この例には Postfix バージョン 2.0 以降が必要です。使っている Postfix のバージョンを知るには、コマンド "postconf mail_version" を実行します。

解法はいくつかの部分に分けて示されます。この最初の部分ではファイア ウォール上でのローカルメール配送を取り除き、ファイアウォールを壊れにくく します。

1 /etc/postfix/main.cf:
2     myorigin = example.com
3     mydestination =
4     local_recipient_maps =
5     local_transport = error:local mail delivery is disabled
6 
7 /etc/postfix/master.cf:
8     Comment out the local delivery agent

翻訳:

技術的に正しくするため、ファイアウォールは postmaster@[firewall ip address] 宛のメールを受け取れるようにしなければいけません。報告によると、 この機能が存在することを想定しているものがあります。そのため解法の 2番目の部分では、 postmaster@[firewall ip address] のサポートを加え、 おまけに abuse@[firewall ip address] も同様に加えます。これら2つの アカウント宛のメールは内部アドレスに転送されます。

1 /etc/postfix/main.cf:
2     virtual_alias_maps = hash:/etc/postfix/virtual
3 
4 /etc/postfix/virtual:
5     postmaster      postmaster@example.com
6     abuse           abuse@example.com

翻訳:

解法の最後の部分でEメールの転送をおこないますが、これがファイア ウォールEメール機能の本来の目的です。

 1 /etc/postfix/main.cf:
 2     mynetworks = 127.0.0.0/8 12.34.56.0/24
 3     relay_domains = example.com
 4     parent_domain_matches_subdomains = 
 5         debug_peer_list smtpd_access_maps
 6     smtpd_recipient_restrictions =
 7         permit_mynetworks reject_unauth_destination
 8 
 9     relay_recipient_maps = hash:/etc/postfix/relay_recipients
10     transport_maps = hash:/etc/postfix/transport
11 
12 /etc/postfix/relay_recipients:
13     user1@example.com   x
14     user2@example.com   x
15      . . .
16 
17 /etc/postfix/transport:
18     example.com   smtp:[inside-gateway.example.com]

翻訳:

あなたのシステムが db の代わりに dbm ファイルを使うのであれば、hash ではなく dbm を指定してください。Postfix がサポートしている検索テーブルの 種類を知るには、コマンド "postconf -m" を使います。

relay_recipients テーブルを変更した後は "postmap /etc/postfix/relay_recipients" を必ず実行してください。

transport テーブルを変更した後は "postmap /etc/postfix/transport" を 必ず実行してください。

インストール方法によっては、マルチホームのファイアウォール上で内行きと 外行きのメールを処理する別のPostfixインスタンスがあるかもしれません。 内行きのPostfixインスタンスにはファイアウォールの外部インターフェースで 待つSMTPサーバがあり、外行きのPostfixインスタンスには内部インターフェースで 待つSMTPサーバがあります。そのような設定では、それぞれのインターフェースに 対応するインターフェースアドレスのみを $inet_interfaces に設定したくなるかも しれません。

$inet_interfaces のリファレンスマニュアルにも書かれているように、 smtp(8) 配送エージェントは指定されたインターフェース アドレスを外行き接続のソースアドレスとして使い、ファイアウォールの "もう一方" のホストに到達することができないため、ほとんどの場合、このように inet_interfaces を使ってもうまく 動きません。その症状は、実際には起きているホストに接続できないというものです。 推奨される回避方法は inet_interfaces パラメータのドキュメントを参照して ください。

すべてではなく一部のアカウントをローカルに 配送する

("user@hostname.example.com" ではなく) "user@example.com" として メールを送ることの問題は、"root" やその他のシステムアカウント宛の メールも中心となる mailhost に送られてしまうことです。そのような アカウントをローカルに配送するには、次のように virtual エイリアスを 設定することができます:

1 /etc/postfix/main.cf:
2     virtual_alias_maps = hash:/etc/postfix/virtual
3 
4 /etc/postfix/virtual:
5     root     root@localhost
6     . . .

翻訳:

ファイアウォールの背後で動く Postfix

ファイアウォールで守られたネットワークの背後にある Postfix を設定する 最もシンプルな方法は、メールをすべてゲートウェイホストに送ってしまい、 そのメールホストに内部および外部への転送の面倒を見させることです。 その例は上の ローカルエリアネットワーク セクションで示しました。より洗練されたアプローチは、外部メールのみを ゲートウェイホストに送り、イントラネットメールは直接送ることです。 これは Wietse が仕事で使っている方法です。

注意: この例には Postfix バージョン 2.0 以降が必要です。使っている Postfix のバージョンを知るには、コマンド "postconf mail_version" を実行します。

以下の例には設定の追加部分を示します。この設定をこのドキュメントの前半で 議論した基本的な設定情報と組み合わせる必要があります。

 1 /etc/postfix/main.cf:
 2     transport_maps = hash:/etc/postfix/transport
 3     relayhost =
 4     # Optional for a machine that isn't "always on"
 5     #fallback_relay = [gateway.example.com]
 6 
 7 /etc/postfix/transport:
 8     # Internal delivery.
 9     example.com      :
10     .example.com     :
11     # External delivery.
12     *                smtp:[gateway.example.com]

翻訳:

あなたのシステムが db の代わりに dbm ファイルを使うのであれば、hash ではなく dbm を指定してください。Postfix がサポートしている検索テーブルの 種類を知るには、コマンド "postconf -m" を使います。

transport テーブルを編集した後は "postmap /etc/postfix/transport" を 必ず実行してください。

リモートサイトのプライマリまたはバックアップMXホスト としてのPostfixの設定

このセクションでは設定の追加部分を示します。この設定をこの ドキュメントの前半で議論した基本的な設定情報と組み合わせる必要が あります。

あなたのシステムがリモートサイトの「セカンダリ」MX ホストの場合に やらなければいけないのは以下のことだけです:

 1 DNS:
 2     the.backed-up.domain.tld        IN      MX 100 your.machine.tld.
 3 
 4 /etc/postfix/main.cf:
 5     relay_domains = . . . the.backed-up.domain.tld
 6     smtpd_recipient_restrictions = 
 7         permit_mynetworks reject_unauth_destination
 8 
 9     # NAT/プロキシ外部アドレスを指定する必要があります。
10     #proxy_interfaces = 1.2.3.4
11 
12     relay_recipient_maps = hash:/etc/postfix/relay_recipients
13 
14 /etc/postfix/relay_recipients:
15     user1@the.backed-up.domain.tld   x
16     user2@the.backed-up.domain.tld   x
17      . . .

あなたのシステムがリモートサイトの「プライマリ」MX ホストの場合には、 上に加えて以下もおこないます:

18 /etc/postfix/main.cf:
19     transport_maps = hash:/etc/postfix/transport
20 
21 /etc/postfix/transport:
22     the.backed-up.domain.tld       relay:[their.mail.host.tld]

重要な注意:

あなたのシステムが db の代わりに dbm ファイルを使うのであれば、hash ではなく dbm を指定してください。Postfix がサポートしている検索テーブルの 種類を知るには、コマンド "postconf -m" を使います。

transport テーブルを編集した後は "postmap /etc/postfix/transport" を 必ず実行してください。

Postfix < 2.2への注意: バックアップまたはプライマリMXドメインへのメールの中継時に fallback_relay 機能を使わないで ください。最終的な配送先に到達できないときに、メールがPostfix MXホストと fallback_relay ホストの間で ループしてしまいます。

これらはPostfixバージョン2.2以降ではデフォルトの設定です。

ダイアルアップマシン上の Postfix

このセクションでは、ほとんどの時間ダウンしているダイアルアップ接続に 応用します。24x7 で接続しているダイアルアップ接続については、上の ローカルエリアネットワーク セクションを参照して ください。

このセクションでは設定の追加部分を示します。この設定をこのドキュメントの 前半で議論した基本的な設定情報と組み合わせる必要があります。

自分自身のホスト名やIPアドレスを持っていない場合 (たいていはダイアルアップや ケーブルTV、DSL接続)、"実際のインターネットホスト名を 持たないホストでの Postfix" のセクションも学習するべきです。

実際のホスト名を持たないホストでのPostfix

このセクションは自分自身のインターネットホスト名を持たないホスト向けです。 これらはたいてい DHCP やダイアルアップで動的 IP アドレスを取得する システムです。Postfix はマシン上のアカウントに空想の名前があれば問題なく メールを送受信します。しかしインターネットにメールを送る際にはEメール アドレスに空想ホスト名を使うことはできません。使ってしまうと誰もその メールに返事を返せないからです。実際、存在しないドメイン名のメールアドレスを 拒否するサイトは増えてきています。

注意: 以下の情報はPostfixのバージョンに依存します。使っているPostfixの バージョンを知るには、コマンド "postconf mail_version" を実行します。

解法1: Postfix version 2.2以降

Postfix 2.2はローカルの空想Eメールアドレスを有効なインターネットアドレスで 置き換えるのに generic(5) アドレスマッピングを使います。このマッピングは メールがマシンを出て行くとき「のみ」実行されます; 同じマシン上のユーザ間で メールを送るときには使われません。

以下の例は追加する設定を示しています。これをこのドキュメントの前半で議論した 基本的な設定情報と合わせる必要があります。

1 /etc/postfix/main.cf:
2     smtp_generic_maps = hash:/etc/postfix/generic
3
4 /etc/postfix/generic:
5     his@localdomain.local             hisaccount@hisisp.example
6     her@localdomain.local             heraccount@herisp.example
7     @localdomain.local                hisaccount+local@hisisp.example

リモートホストにSMTPでメールを送る場合:

あなたのシステムが db の代わりに dbm ファイルを使うのであれば、 hash ではなく dbm を指定してください。Postfixがサポートしている 検索テーブルの種類を知るには、コマンド "postconf -m" を使います。

generic テーブルを編集した後は "postmap /etc/postfix/generic" を 必ず実行してください。

解法2: Postfix version 2.1以前

Postfixにとっての完璧な解は、メールがマシンを離れるときに、ローカルの 空想 Eメールアドレスを有効なインターネットアドレスにマッピングすることに なるでしょう (Sendmail の generics テーブルのように)。これは近い将来計画 されています。

しばらくの間は、Postfix での解はできるだけ有効なインターネットアドレスを 使い、 Postfix に有効なインターネットアドレスからローカルの空想アドレスに マッピングさせることです。こうすると、メールをインターネットに送ったり、 自分の有効なインターネットアドレスを持たないローカル空想アドレスへの メールを含めて、ローカルの空想アドレスにメールを送れるようになります。

このセクションでは設定の追加部分を示します。この設定をこのドキュメントの 前半で議論した基本的な設定情報と組み合わせる必要があります。

 1 /etc/postfix/main.cf:
 2     myhostname = hostname.localdomain
 3     mydomain = localdomain
 4 
 5     canonical_maps = hash:/etc/postfix/canonical
 6 
 7     virtual_alias_maps = hash:/etc/postfix/virtual
 8 
 9 /etc/postfix/canonical:
10     your-login-name    your-account@your-isp.com
11 
12 /etc/postfix/rtual.5.html">virtualeirtual:
13     your-account@your-isp.com       your-login-name

翻訳:

あなたのシステムが db の代わりに dbm ファイルを使うのであれば、hash ではなく dbm を指定してください。Postfix がサポートしている検索テーブルの 種類を知るには、コマンド "postconf -m" を使います。

canonical テーブルを編集した後は "postmap /etc/postfix/canonical" を 必ず実行してください。

virtual テーブルを編集した後は "postmap /etc/postfix/virtual" を必ず実行 してください。