Postfix

標準的な設定例 - Postfix解説文書

原文(英語)はこちら


この文書の目的

この文書では一般的なPostfixの設定方法を多数示しています。この文書は、基本的な設定の文書で説明している基本的な設定手順にしたがった後に読むべきものです。特に、Postfixがまだローカルメール送信とローカルメール配送ができる状態になっていないときは、この文書の内容に進んではいけません。

この文書の最初の部分では、各問題を解決するための標準的な設定方法を示します。

この文書の2番目の部分では、特定の環境にあるホストで行う追加設定について示します。

インターネットに接続されたスタンドアロンホスト上でPostfixを運用する

インターネットに直接接続できるスタンドアロンマシンであれば、Postfix はそのままで問題なく動作するはずです。少なくとも、http://www.postfix.org/ から Postfix のソースコードをダウンロードした場合は、そのようにインストールされます。

コマンド「postconf -n」を使って、main.cf により上書きされる設定を確認できます。いくつかのパス名の設定に加えて、BASIC_CONFIGURATION_README文書では説明されていないいくつかの設定をスタンドアロン ボックスに行う必要があります。

/etc/postfix/main.cf:
    # これを指定するかどうかは任意: メールを user@hostname ではなく user@domainname で送る
    myorigin = $mydomain

    # これを指定するかどうかは任意: NAT/プロキシの外部アドレスを指定する
    proxy_interfaces = 1.2.3.4

    # 選択肢1: 他のホストからのメールを転送しない
    mynetworks_style = host
    relay_domains

    # 選択肢2: ローカルクライアントからのメールだけを転送する
    mynetworks = 192.168.1.0/28
    relay_domains

該当する場合は、「インターネット上で有効はホスト名を持たないホスト上でPostfixを運用する」の設定も参照してください。

ヌルクライアント上でPostfixを運用する

ヌルクライアントとはメールの送信だけを行うマシンのことをいいます。ネットワークからのメールを受け取ることもなく、ローカルにいかなるメールも配信しません。通常、ヌルクライアントはPOP、IMAP、NFSを使ってメールボックスにアクセスします。

以下の例ではインターネットドメイン名が「example.com」で、マシン名が「hostname.example.com」であることを想定しています。例によって、初期設定のままではないパラメータだけを示しています。

1: /etc/postfix/main.cf:
2:    myhostname = hostname.example.com
3:    myorigin = $mydomain
4:    relayhost = $mydomain
5:    inet_interfaces = loopback-only
6:    mydestination = 

解説

ローカルネットワークでPostfixを運用する

この節では1つのメインサーバとメールを送受信するその他複数のシステムがあるローカルエリア・ネットワークについて記します。例によって、インターネットドメイン名は「example.com」であることを想定しています。すべてのシステムはメールを「user@example.com」のメールアドレスでメールを送り、「user@hostname.example.com」のアドレスでメールを受信するよう設定されています。またメインサーバは「user@example.com」宛てのメールも受け取ります。このメインサーバはmailhost.example.comと呼ぶことにします。

「user@example.com」のアドレスでメールを送る場合の欠点は、「root」およびその他システムアカウント用のメールも中央のメールホストに送られてしまう点です。これに対する可能な解決策は以下に記す「一部アカウント宛てメールだけをローカル配信する」を参照してください。

例によって、ここに示しているのは初期設定のままではないパラメータだけです。

まず、メールホストではない、より単純なマシンの設定を示します。 このマシンは「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:    #  設定するかどうかは任意: ローカル宛て以外のメールはすべてファイアウォールに転送する
10:    relayhost = [firewall.example.com]

解説

このような環境の場合、ユーザは以下のような方法で自分のメールボックスにアクセスします。

3つ目の方法を使う場合、メールホスト上にある各ユーザには希望するマシンに転送するエイリアスを設定します。

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

いくつかのシステムでは /etc/aliases とは別の場所にエイリアスデータベースが置かれています。それがどこにあるのかを調べるには、「postconf alias_maps」コマンドを実行してください。

エイリアスファイルを変更したら「newaliases」コマンドを実行するようにしてください。

ここでは「example.com」 宛のメールを内部のゲートウェイマシンに転送し、「anything.example.com」 宛のメールを拒否する Postfix メールファイアウォール/ゲートウェイを設定する方法を説明します。ここでただ一つ問題があります。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:ローカルへのメール配信は無効化されています
6:
7: /etc/postfix/master.cf:
8:    ローカルの配信エージェント(メールサーバ)をコメントアウトしてください。

説明:

技術的な正確性のために、ファイアウォールは postmaster@[ファイアウォールのIPアドレス] 宛のメールを受信できる必要があります。報告されているところでは、実際にこの能力があることを期待しているものもあるようです。そこで、設定方法の説明第二部では postmaster@[ファイアウォールのIPアドレス] 宛てのメールをを受信できるようにし、さらに abuse@[ファイアウォールのIPアドレス] も受信できるようにしています。この二つのアカウントへのメールはすべて内部のアドレスに転送されます。

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

説明:

この設定方法説明の最後の部分では、ファイアウォールにおけるメール機能の本当の目的である、メールの転送の設定を行います。

 1: /etc/postfix/main.cf:
 2:    mynetworks = 127.0.0.0/8 12.34.56.0/24
 3:    relay_domains = example.com
 4:    relay_domains =
 5:        debug_peer_list smtpd_access_maps

 6a:    # 条件により異なった中継とスパム対応の制御設定ができるPostfix 2.10以降
 7a:    smtpd_relay_restrictions =
 8a:        permit_mynetworks reject_unauth_destination
 9a:    smtpd_recipient_restrictions = ...スパムブロックルール...

 6b:    # 中継とスパムの制御設定を組み合わせた旧バージョン用の設定
 7b:    # Postfix 2.10以上ではsmtpd_relay_restrictionsを設定してください。
 8a:    smtpd_recipient_restrictions =
 9a:        permit_mynetworks reject_unauth_destination
10a:        ...スパムブロックルール...

11:     relay_recipient_maps = hash:/etc/postfix/relay_recipients
12:     transport_maps = hash:/etc/postfix/transport
13:
14: /etc/postfix/relay_recipients:
15:     user1@example.com   x
16:     user2@example.com   x
17:     ...
18:
19: /etc/postfix/transport:
20:     example.com   relay:[inside-gateway.example.com]

解説


トップページに戻る