このドキュメントは典型的な Postfix 設定をいくつか示しています。 BASIC_CONFIGURATION_README ドキュメントに書かれている基本的な設定のステップに従った後でこの ドキュメントを見直すべきです。特に Postfix でローカルメールの投函や ローカルメール配送をやったことがなければ、読み進めないでください。
このドキュメントの最初の部分では、ある特定の問題をそれぞれ1つずつ 解決する標準設定を示します。
このドキュメントの2番目の部分では、特定環境のホストでの追加設定を 示します。
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 クライアントというのは、メールの送信だけができるマシンのことです。 ネットワークからはメールを受け取らず、ローカルへのメール配送もしません。 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
翻訳:
2行目: ("user@nullclient.example.com" ではなく) "user@example.com" としてメールを送り、"user@nullclient.example.com" にメールが送られないように します。
3行目: メールをすべて "example.com" ドメインを担当している メールサーバに転送します。これによりリモートの配送先に到達できない間に null サーバの電源が切られても、メールが null サーバに止まったままに ならないようにします。
4行目: ネットワークからのメールを受け付けません。
5-8行目: ローカルメール配送を無効にします。メールはすべて3行目で 指定されたメールサーバに行きます。
このセクションには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
翻訳:
2行目: "user@example.com" としてメールを送ります。
3行目: 信頼するネットワークを指定します。
4行目: このホストは信頼しないネットワークからのメールをリレー しません。
6行目: これは直接インターネットにアクセスできない場合に必要です。 以下の "ファイアウォールの背後で動く Postfix" も 参照してください。
次に 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]
翻訳:
2行目: ドメイン "example.com" 宛のメールを mailhost.example.com に 送ります。行末の "." を忘れずに付けてください。
5行目: "user@example.com" としてメールを送ります。
6行目: このホストは マシン自身の名前に加えて "example.com" ドメイン宛の最終配送先となります。
7行目: 信頼するネットワークを指定します。
8行目: このホストは信頼しないネットワークからのメールをリレー しません。
10行目: これは mailhost が非ローカルメールをファイアウォール上の メールサーバを使って転送しなければならない場合に必要です。 [] によって Postfix が MX レコード検索するのを禁止します。
このような環境では、ユーザはメールボックスに以下の1つ以上の方法で アクセスします:
NFS もしくはそれに相当するものを使ってのメールボックスアクセス。
POP や IMAP を使ってのメールボックスアクセス。
ユーザの好みのマシン上のメールボックス。
最後の場合、ユーザにはそれぞれ mailhost 上に好みのマシンにメールを 転送するエイリアスを持たせます:
/etc/aliases: joe: joe@joes.preferred.machine jane: jane@janes.preferred.machine
エイリアスデータベースが /etc/aliases にないシステムもあります。 あなたのシステム上での場所を知るには、"postconf alias_maps" コマンドを実行して ください。
aliases ファイルを変更するたびにマンド "newaliases" を実行してください。
考え方は "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
翻訳:
2行目: このマシンからはメールを "user@example.com" として送り、 "user@firewall.example.com" 宛にメールを送る理由をなくします。
3-8行目: ファイアウォールマシン上でのローカルメール配送を無効に します。
技術的に正しくするため、ファイアウォールは 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
翻訳:
mydestination が 空なので (前の例を参照)、$inet_interfaces または $proxy_interfaces にマッチしたアドレス文字列のみがローカルとみなされます。そのため、 "localpart@[a.d.d.r]" は単に canonical(5) および virtual(5) の "localpart" として マッチします。これにより Postfix 設定ファイルにファイアウォールの IP アドレスを指定する必要がなくなります。
解法の最後の部分で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]
翻訳:
1-7行目: $mynetworks に 書かれたローカルシステムからのメールを受け取り、また外部から "user@example.com" 宛のメールを受け取りますが、"user@anything.example.com" 宛のメールは受け取りません。この魔法は4-5行目にあります。
9, 12-14行目: インターネットからメールを受け取れる "example.com" ドメインのアドレスで有効なもののリストを定義します。これによりメール キューが配送できない MAILER-DAEMON メッセージで埋め尽くされないように します。有効なアドレスのリストを管理できないのであれば、 "relay_recipient_maps =" (つまり空の値) を指定するか、"@example.com x" ワイルドカードを relay_recipients テーブルに指定しなければいけません。
10, 17-18行目: "example.com" 宛のメールを内部ゲートウェイマシンに 向けます。[] によって Postfix が MX 検索をしないようにします。
あなたのシステムが db の代わりに dbm ファイルを使うのであれば、hash ではなく dbm を指定してください。Postfix がサポートしている検索テーブルの 種類を知るには、コマンド "postconf -m" を使います。
relay_recipients テーブルを変更した後は "postmap /etc/postfix/relay_recipients" を必ず実行してください。
transport テーブルを変更した後は "postmap /etc/postfix/transport" を 必ず実行してください。
("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 . . .
翻訳:
5行目: virtual(5) マニュアルページに 書かれているように、裸の "root" という名前は "site" が $myorigin と同じ場合や "site" が $mydestination に挙げられて いる場合、$inet_interfaces または $proxy_interfaces に マッチする場合には "root@site" にマッチします。
インストール方法によっては、マルチホームのファイアウォール上で内行きと 外行きのメールを処理する別のPostfixインスタンスがあるかもしれません。 内行きのPostfixインスタンスにはファイアウォールの外部インターフェースで 待つSMTPサーバがあり、外行きのPostfixインスタンスには内部インターフェースで 待つSMTPサーバがあります。そのような設定では、それぞれのインターフェースに 対応するインターフェースアドレスのみを $inet_interfaces に設定したくなるかも しれません。
$inet_interfaces のリファレンスマニュアルにも書かれているように、 smtp(8) 配送エージェントは指定されたインターフェース アドレスを外行き接続のソースアドレスとして使い、ファイアウォールの "もう一方" のホストに到達することができないため、ほとんどの場合、このように inet_interfaces を使ってもうまく 動きません。その症状は、実際には起きているホストに接続できないというものです。 推奨される回避方法は inet_interfaces パラメータのドキュメントを参照して ください。ファイアウォールで守られたネットワークの背後にある 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]
翻訳:
2, 7-12行目: イントラネットメールを直接配送し、外部メールを ゲートウェイに渡すように要求します。明らかにこの例は組織が DNS MX レコードを 内部で使っていることを想定しています。[] によって Postfix に MX 検索をさせません。
3行目: 重要: main.cf に relayhost を 指定してはいけません。
5行目: これによりマシンの電源が切られているときにメールがキューに 残ったままにならないようにします。Postfix はメールを直接配送しようとし、 配送できないメールをゲートウェイに渡します。
あなたのシステムが db の代わりに dbm ファイルを使うのであれば、hash ではなく dbm を指定してください。Postfix がサポートしている検索テーブルの 種類を知るには、コマンド "postconf -m" を使います。
transport テーブルを編集した後は "postmap /etc/postfix/transport" を 必ず実行してください。
このセクションでは設定の追加部分を示します。この設定をこの ドキュメントの前半で議論した基本的な設定情報と組み合わせる必要が あります。
あなたのシステムがリモートサイトの「セカンダリ」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]
重要な注意:
mydestination に the.backed-up.domain.tld をリストアップしてはいけません。
virtual_alias_domains に the.backed-up.domain.tld をリストアップしてはいけません。
virtual_mailbox_domains に the.backed-up.domain.tld をリストアップしてはいけません。
1-7行目: インターネットから "the.backed-up.domain.tld" 宛のメールを そのドメインのプライマリ MX ホストに転送します。
10行目: これはローカルマシンの IP アドレスと異なるアドレスを 世界中に示している NAT リレーやプロキシを通して Postfix がメールを 受け取る場合に必須です。
12-16行目: "the.backed-up.domain.tld" ドメインのアドレスで有効な もののリストを定義します。これによりメールキューが配送できない MAILER-DAEMON メッセージで埋め尽くされないようにします。有効なアドレスのリストを管理 できないのであれば、"relay_recipient_maps =" (つまり空の値) を指定するか、"@example.com x" ワイルドカードを relay_recipients テーブルに指定しなければいけません。
22行目: [] があると Postfix は MX 検索をしません。
あなたのシステムが db の代わりに dbm ファイルを使うのであれば、hash ではなく dbm を指定してください。Postfix がサポートしている検索テーブルの 種類を知るには、コマンド "postconf -m" を使います。
transport テーブルを編集した後は "postmap /etc/postfix/transport" を 必ず実行してください。
注意: バックアップまたはプライマリMXドメインへのメールの中継時に fallback_relay 機能を使わないで ください。最終的な配送先に到達できないときに、メールがPostfix MXホストと fallback_relay ホストの間で ループしてしまいます。
これらはPostfixバージョン2.2以降ではデフォルトの設定です。
このセクションでは、ほとんどの時間ダウンしているダイアルアップ接続に 応用します。24x7 で接続しているダイアルアップ接続については、上の ローカルエリアネットワーク セクションを参照して ください。
このセクションでは設定の追加部分を示します。この設定をこのドキュメントの 前半で議論した基本的な設定情報と組み合わせる必要があります。
自分自身のホスト名やIPアドレスを持っていない場合 (たいていはダイアルアップや ケーブルTV、DSL接続)、"実際のインターネットホスト名を 持たないホストでの Postfix" のセクションも学習するべきです。
マシンがほとんどの時間切断されているのであれば、到達が困難な インターネットの片隅に Postfix がメールを配送できる機会はあまりありません。 常に接続しているマシンにメールを渡してしまうのがよいでしょう。以下の 例では、[] によって Postfix が DNS MX レコードを検索しないように しています。
/etc/postfix/main.cf: relayhost = [smtprelay.someprovider.com]
自発的な SMTP メール配送を無効にします (オンデマンドダイアルアップ IP を使っている場合のみ)。
通常、Postfix は都合がよいときに外行きのメールを配送しようとします。 マシンがオンデマンドダイアルアップ IP を使っていると、新しいメールを 投函するたび、Postfix が遅延メールを配送しようとするたびに、システムが 電話をかけようとしてしまうことになります。そのような電話をかけないように するために、自発的な SMTP メール配送を無効にします。
/etc/postfix/main.cf: defer_transports = smtp (オンデマンドダイアルアップ IP ホストのみ)
SMTP クライアント の DNS lookups を無効にします (ダイアルアップ LAN のみ).
/etc/postfix/main.cf: disable_dns_lookups = yes (オンデマンドダイアルアップ IP ホストのみ)
以下のコマンドを PPP または SLIP ダイアルアップスクリプトに入れて ください:
/usr/sbin/sendmail -q (インターネットリンクが上がるたびに)
Postfix sendmail コマンドの正確な場所はシステムによります。Postfix sendmail コマンドがシステムのどこにあるかを知るには、コマンド"postconf sendmail_path" を使って ください。
メールキューが flush されたかどうかを知るには、次のようなものを使って ください:
#!/bin/sh # メール配送を始めます。 /usr/sbin/sendmail -q # 配送を始めさせます。 sleep 10 # メッセージがすべて1度は配送が試されるまでループします。 while mailq | grep '^[^ ]*\*' >/dev/null do sleep 10 done
自発的な SMTP メール配送を無効に している場合、ダイアルアップリンクが上がっている間は時々 "sendmail -q" コマンドも実行する必要があります。これにより新しく投函されたメールが キューから flush されます。
このセクションは自分自身のインターネットホスト名を持たないホスト向けです。 これらはたいてい DHCP やダイアルアップで動的 IP アドレスを取得する システムです。Postfix はマシン上のアカウントに空想の名前があれば問題なく メールを送受信します。しかしインターネットにメールを送る際にはEメール アドレスに空想ホスト名を使うことはできません。使ってしまうと誰もその メールに返事を返せないからです。実際、存在しないドメイン名のメールアドレスを 拒否するサイトは増えてきています。
注意: 以下の情報はPostfixのバージョンに依存します。使っているPostfixの バージョンを知るには、コマンド "postconf mail_version" を実行します。
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でメールを送る場合:
5行目で his@localdomain.local を his のISPメールアドレスで 置き換え、
6行目で her@localdomain.local を her のISPメールアドレスで 置き換え、そして
7行目で他のローカルアドレスを +local という拡張アドレスが付いた his のISPアカウントで置き換えます (この例ではISPが "+" 形式の拡張アドレスを サポートしていると想定しています)。
あなたのシステムが db の代わりに dbm ファイルを使うのであれば、 hash ではなく dbm を指定してください。Postfixがサポートしている 検索テーブルの種類を知るには、コマンド "postconf -m" を使います。
generic テーブルを編集した後は "postmap /etc/postfix/generic" を 必ず実行してください。
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/virtual: 13 your-account@your-isp.com your-login-name
翻訳:
2-3行目: ここでは空想ホスト名を置き換えます。インターネット上に 実在する組織がすでに使っているドメイン名を使ってはいけません。誰も所有 しないことが保証されているドメイン名の例は RFC 2606 を参照して ください。
5, 9, 10行目: これは "your-login-name@hostname.localdomain" から "your-account@your-isp.com" へのマッピングを与えます。この部分は必須です。
7, 12, 13行目: "your-account@your-isp.com" 宛のメールを ISP に ではなくローカルに配送します。この部分は必須ではありませんが便利です。
あなたのシステムが db の代わりに dbm ファイルを使うのであれば、hash ではなく dbm を指定してください。Postfix がサポートしている検索テーブルの 種類を知るには、コマンド "postconf -m" を使います。
canonical テーブルを編集した後は "postmap /etc/postfix/canonical" を 必ず実行してください。
virtual テーブルを編集した後は "postmap /etc/postfix/virtual" を必ず実行 してください。