Postfix の設定 - アドレス操作


上のレベルへ | 基本設定 | UCE 制御 | 速度制御 | リソース制御 | アドレス操作

イントロダクション

初期の Postfix リリースにはアドレス書き換え言語がありませんが、 テーブル検索を通してほんの少しだけアドレス書き換えが可能です。 メッセージが Postfix システムを流れる間、そのアドレスは このドキュメントに記述された順に圧搾ローラーにかけられていきます。

別に指示されていなくても、ここで記述される全てのパラメータは main.cf ファイルに書きます。動いている Postfix システムの パラメータを変更したら、忘れずに postfix reload を実行してください。

全てのメール:

ローカル配送:

標準形式へのアドレスの書き換え

cleanup デーモンが検索テーブルに アドレスを通す前に、まずアドレスを trivial-rewrite デーモンに 送ることによって、標準的な user@fully.qualified.domain 形式に書き換えます。 標準形式への書き換えの目的は、検索テーブルで必要なエントリの数を 減らすことにあります。Postfix trivial-rewrite プログラムは次のハードコードされたアドレス操作を実装しています:
@hosta,@hostb:user@site から user@site への書き換え
ソースルート機能は非難されています。Postfix はソースルートを 切り捨てる以外に、そのようなアドレスを扱う能力はありません。

site!user から user@site への書き換え
この機能はブールパラメータの swap_bangpath によって 制御されます (default: yes)。目的は UUCP 形式の アドレスをドメイン形式に書き換えることです。これは UUCP を通してメールを受け取る場合にのみ便利ですが、それ以外の場合も おそらく害はないでしょう。

user%domain から user@domain への書き換え
この機能はブールパラメータの allow_percent_hack によって 制御されます (default: yes)。典型的には、これは user%domain@otherdomain のような怪物を扱うために使われます。

user から user@$myorigin への書き換え
この機能はブールパラメータの append_at_myorigin によって 制御されます (default: yes)。目的は $myorigin にある 全てのマシンの user を一貫して取り扱うことです。

全てのアドレスが user@domain 形式であると、多くの Postfix コンポーネントが期待しているため、おそらくこの機能を切るべきでは ないでしょう。

マシンが $myorigin のメインマシンではなく、一部のユーザに メインマシンを通さずにローカルで配送したいのであれば、 virtual テーブルに user@$myorigin から user@$myhostname へ向け直すエントリを作ってください。

user@host から user@host.$mydomain への書き換え
この機能はブールパラメータの append_dot_mydomain によって 制御されます (default: yes)。目的は同じホスト名の違う 形式を一貫して取り扱うことです。

host から host.$mydomain への書き換えはよくないと 主張する人もいるでしょう。そのため off にすることができるように なっています。ローカルドメイン部分が自動的に付けられる便利さを 好む人もいます。

user@site. から user@site (最後のドットが ない) への書き換え

カノニカルアドレスマッピング

cleanup デーモンが内向きのメールを incoming キューに保存する前に、メッセージエンベロープや メッセージヘッダの全てのアドレスを書き換えるために、canonical テーブルを使います。 マッピングはログイン名を Firstname.Lastname 形式のアドレスで 置き換えるときや、遺物のメールシステムが生成したメールアドレスの 不正なドメインをきれいにするのに便利です。

カノニカルマッピングはデフォルトでは使えません。 これを使うには、main.cf ファイル内の canonical_maps パラメータを編集して一つもしくはそれ以上の検索テーブルを空白 またはカンマで区切って指定してください。 例:

canonical_maps = hash:/etc/postfix/canonical

送信者と受信者の両方に適用されるカノニカルマップに加えて、 送信者だけや受信者だけに適用されるカノニカルマップを指定することが できます。例:

sender_canonical_maps = hash:/etc/postfix/sender_canonical

recipient_canonical_maps = hash:/etc/postfix/recipient_canonical

送信者および受信者カノニカルマップは共通のカノニカルマップの 前に適用されます。

送信者指定の書き換えは、汚い送信者アドレスをきれいなものに 書き換えたいが、メーラループさせることなく汚いアドレスへの メール送信も可能にしたいときに便利です。

アドレスのマスカレード

アドレスのマスカレードはあるドメインのメールゲートウェイの中に ある全てのホストを隠したり、メールがそれぞれのマシンからではなく ゲートウェイ自身から来たように見せかけるための手法です。

アドレスのマスカレードはデフォルトでは使えません。 これを使うには、main.cf ファイルの masquerade_domains パラメータを編集して、一つもしくはそれ以上のドメイン名を 空白またはカンマで区切って指定してください。リストは左から右へと 処理され、最初にマッチしたところで処理を止めます。つまり、

masquerade_domains = foo.example.com example.com
を指定すると、any.thing.foo.example.com を foo.example.com へと 削りますが、any.thing.else.example.com を example.com にはしません。

ドメイン名の前に ! がつけられると、そのドメイン、またはその サブドメインはマスカレードされません。つまり、

masquerade_domains = !foo.example.com example.com
は any.thing.foo.example.com と foo.example.com を変更しませんが、 any.thing.else.example.com を example.com へと削ります。

masquerade_exceptions 設定パラメータにはアドレスの マスカレードを受けないユーザ名を指定します。一つもしくは それ以上のユーザ名を空白またはカンマで区切って指定してください。 例:

masquerade_exceptions = root

デフォルトでは、Postfix は例外を持ちません。

微妙な点: デフォルトではアドレスのマスカレーディングはメッセージ ヘッダとエンベロープ送信者アドレスにのみ適用され、エンベロープ 受信者には適用されません。これにより外部から個々のマシンのユーザへ メールを転送する一方で、ゲートウェイマシン上でアドレス マスカレーディングを使うことができるようになります。

エンベロープ受信者アドレスもマスカレードされるようにするには、 次のように指定してください (Postfix 20010802 以降でのみ使えます):

masquerade_classes = envelope_sender, envelope_recipient, header_sender, header_recipient

こうするのであれば、Postfix は個々のマシンにメールを送ることは できません。

バーチャルアドレスエイリアシング

カノニカルとマスカレードマッピングを適用した後、cleanup デーモンはローカルもリモートも 関係なく、全てのメールを向けなおすために、virtual エイリアス テーブルを使います。 マッピングはエンベロープ受信者のみに影響を及ぼします; メッセージ ヘッダやエンベロープ送信者には効果がありません。 virtual エイリアス検索はバーチャルエイリアスドメイン宛の メールを実在するユーザのメールボックスに向けなおしたり、 存在しないドメイン宛のメールを向けなおすのに便利です。 virtual エイリアス検索は Firstname.Lastname を UNIX ログイン名に変形するのにも使うことができますが、ローカルの aliases の方が適切かもしれません。

virtual マッピングはデフォルトでは使えません。これを使うには、 main.cf ファイル内の virtual_alias_maps パラメータを 編集し、一つもしくはそれ以上の検索テーブルを空白またはカンマで区切って 指定してください。例:

virtual_alias_maps = hash:/etc/postfix/virtual

virtual エイリアスマップに見つかったアドレスは、他のバーチャル エイリアシングを繰り返し受けますが、ループを避けるために canonical マッピングは受けません。

メール配送方法の変更

いったんキューマネージャがメッセージの配送先を確立すると、 その配送先に対するデフォルトの配送方法が決定されます。Postfix は それぞれ固有のデフォルトの配送方法を持つ、4つの主なアドレスクラスを 区別します。
マッチした配送先デフォルトの配送エージェント制御パラメータ
$mydestination または $inet_interfaces local $local_transport
$virtual_mailbox_domains virtual $virtual_transport
$relay_domains relay (smtp のクローン) $relay_transport
none smtp $default_transport
transport テーブルはオプションで デフォルトのメッセージ配送方法を上書きします (このテーブルは アドレス書き換え・解決デーモンによって使われます)。 transport テーブルは特定のサイトに UUCP を使ってメールを 送ったり、同時に一つの SMTP 接続しか扱えない壊れたメールシステム (そう、こんなシステムが存在して、しかもこんなのに実際にお金を 払っている人もいるのです) にメールを送るのにも使えます。

Transport テーブル検索はデフォルトでは使えません。これを使うには、 main.cf ファイル内の transport_maps パラメータを編集し、 一つまたはそれ以上の検索テーブルを空白またはカンマで区切って 指定します。例:

transport_maps = hash:/etc/postfix/transport

再配置ユーザテーブル

次に、キューマネージャはそれぞれの受信者名を
relocated データベースに通します。 このテーブルはアカウントを持たなくなったユーザに到達する方法や、 存在しないドメイン宛のメールの扱い方に関する情報を提供します。 このテーブルにリストされたアドレスにメールが送られると、 有益なメッセージとともにメッセージはバウンスされます。

再配置ユーザの検索はデフォルトでは使えません。これを使うには、 main.cf ファイル内の relocated_maps パラメータを編集し、 一つまたはそれ以上の検索テーブルを空白またはカンマで区切って 指定します。例:

relocated_maps = hash:/etc/postfix/relocated

エイリアスデータベース

メールがローカルに配送される際、
local 配送エージェントはそれぞれのローカル受信者名を aliases データベースに通します。 マッピングはメッセージヘッダのアドレスには影響を及ぼしません。 ローカルの aliases は典型的には配送リストを実装したり、 postmaster のような標準的なエイリアスを実在の人に 向けるために使われます。テーブルは Firstname.Lastname アドレスをログイン名にマップするためにも使われます。

エイリアス検索はデフォルトで使えます。デフォルトの設定は システム環境に依存しますが、典型的にはつぎのどれかです:

alias_maps = hash:/etc/aliases
alias_maps = dbm:/etc/aliases, nis:mail.aliases

エイリアスデータベースファイルのパスは alias_database 設定パラメータを通して制御されます。値はシステムに依存します。 普通は次のどれかです:

alias_database = hash:/etc/aliases (4.4BSD, LINUX)
alias_database = dbm:/etc/aliases (4.3BSD, SYSV<4)
alias_database = dbm:/etc/mail/aliases (SYSV4)

セキュリティ上の理由で、配送先がコマンドやファイルの場合の 配送はエイリアスデータベースのオーナーの権限で実行されます。 root が所有するエイリアス内のコマンドやファイルへの 配送には、デフォルトユーザ ID、default_privs が使われます。

ユーザ毎の .forward ファイル

ユーザは自身へのメール配送をホームディレクトリにある .forward とよばれるファイルで配送先を指定することで制御できます。 これらのファイルの文法は検索キーとコロンがないことを除いて、 システムエイリアスと同じです。

存在しないユーザ

ローカル配送エージェントがメッセージの受信者が存在しないことを みつけると、メッセージはローカルで送信者にバウンスされます ("user unknown")。存在しない受信者宛のメールを他のマシンに 転送するのが望ましいときもあります。この目的のために、 luser_relay 設定パラメータを使って代わりの配送先を指定できます。

代わりに、存在しない受信者宛のメールは fallback_transport 設定パラメータに指定される、完全に異なるメッセージ配送に委任する こともできます。詳細は local 配送エージェントを参照してください。

注意: 非 UNIX アカウント宛のメールを受け取るために luser_relay 機能を使うのであれば、

local_recipient_maps =
(つまり空) のように main.cf ファイルで指定する必要があります。 そうしないと、Postfix SMTP サーバは非 UNIX アカウント宛のメールを "User unknown in local recipient table" として拒否してしまいます。

luser_relay には一つのアドレスを指定できます。 $name の展開を使うことができます。最も便利な例:

$user@other.host
拡張アドレスなしの生のユーザ名が @other.host の前に 付けられます。例えば、username+foo 宛のメールは username@other.host に送られます。

$mailbox@other.host
拡張アドレスを含む、元の受信者ローカル部分全体が @other.host の前に付けられます。例えば username+foo 宛のメールは username+foo@other.host に送られます。

sysadmin+$user
拡張アドレスなしの生のユーザ名が sysadmin に追加されます。 例えば、username+foo 宛のメールは sysadmin+username に送られます。
sysadmin+$mailbox
拡張アドレスを含む、元の受信者ローカル部分全体が sysadmin に追加されます。例えば、username+foo 宛のメールは sysadmin+username+foo に送られます。

上のレベルへ | 基本設定 | UCE 制御 | 速度制御 | リソース制御 | アドレス操作