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つの主なアドレスクラスを
区別します。
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
とよばれるファイルで配送先を指定することで制御できます。
これらのファイルの文法は検索キーとコロンがないことを除いて、
システムエイリアスと同じです。
存在しないユーザ
ローカル配送エージェントがメッセージの受信者が存在しないことを
みつけると、メッセージはローカルで送信者にバウンスされます
("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
制御 | 速度制御 | リソース制御 | アドレス操作