これを行うようにPostfix(2.11.4)構成をセットアップしようとしています:
これが部分的なmain.cfです:
mydomain = example.com
inet_interfaces = all
inet_protocols = all
mydestination = $myhostname, localhost.$mydomain, localhost
alias_maps = hash:/etc/postfix/aliases
alias_database = hash:/etc/postfix/aliases
relayhost = outbound.example.com
allow_mail_to_commands = alias,forward,include
allow_mail_to_files = alias,forward,include
luser_relay = [email protected]
#1の場合、someone @ example.comのサーバーで生成されたメールは、処理のために自動的に「outbound.example.com」に送信されます。そして#2の場合、これは/ etc/postfix/aliasesにあるので、「[email protected]」へのメッセージはPerlスクリプトで処理できます。
robot: | "/usr/local/bin/robomail.pl"
ここまでは順調ですね。私を悩ませているのは#3です。
このサーバーは、ドメインマスカレードをオンにしてSendmailを実行するために使用されていました。そして、このサーバーには、(たとえば)「george」だけに電子メールを送信し、サーバーがそれを自動的に「george @ example」に変換することを期待するアプリがまだいくつかあります(私はしない制御します)。 .com」は、配信のために「outbound.example.com」にルーティングされます。
luser_relay
ディレクティブを設定して、これを修正しようとしました。
luser_relay = [email protected]
この種の作業-「george」へのローカル配信が失敗すると、Postfixはそれを[email protected]に書き換えます。
ただし、「george」が実際にサーバー上で有効なアカウントである場合(つまり、/ etc/passwdにリストされている場合)、Postfixはメッセージを受け入れて、アドレスを書き換えて転送する代わりに、ローカルメールディレクトリに配信します。
別の/ etc/postfix/aliasesエントリを作成することで、これを回避できます。
george: [email protected]
ただし、サーバーに数十のローカルユーザーアカウントがあり、常に追加されている場合、これは明らかにスケーラブルではありません。そして、ドキュメントからわかるように、/ etc/postfix/aliasesに相当するワイルドカードはありません。そうでなければ、私はこのようなことをしたいと思います:
robot: | "/usr/local/bin/robomail.pl"
*: *@example.com
これを行う方法はPostfixにありますか? 「robot」のメールを受け入れますが、それ以外はすべて「outbound.example.com」に転送して配信します(必要に応じて@ example.comを追加します)。
PDATE: postconfの詳細と、ローカルサーバーの「root」から「george」に送信されるメッセージのログ:
myhostname = myserver.example.com
myorigin = $myhostname
masquerade_domains =
Mar 23 14:07:26 myserver postfix/pickup[12851]: D2B4A4763D: uid=0 from=<root>
Mar 23 14:07:26 myserver postfix/cleanup[19630]: D2B4A4763D: message-id=<[email protected]>
Mar 23 14:07:26 myserver postfix/qmgr[29583]: D2B4A4763D: from=<[email protected]>, size=323, nrcpt=1 (queue active)
Mar 23 14:07:26 myserver postfix/local[19632]: D2B4A4763D: to=<[email protected]>, orig_to=<george>, relay=local, delay=0.04, delays=0.02/0/0/0.02, dsn=2.0.0, status=sent (delivered to mailbox)
Mar 23 14:07:26 myserver postfix/qmgr[29583]: D2B4A4763D: removed
ログから、ドメインマスカレードプロセスは、送信者と受信者の両方をsomething
から[email protected]
に書き換えます。この書き換えの背後にある原因は、パラメータmyorigin
とappend_at_myorigin
です。接尾辞のドキュメントが言ったように
append_at_myorigin(デフォルト:yes)
ローカルに送信されたメールでは、ドメイン情報のないメールアドレスに文字列「@ $ myorigin」を追加します。リモートで送信されたメールでは、代わりに文字列「@ $ remote_header_rewrite_domain」を追加します。
注1:この機能はデフォルトで有効になっているため、オフにしないでください。 Postfixはドメインレスアドレスをサポートしていません。
注2:Postfixバージョン2.2では、メッセージヘッダーアドレスの書き換えは、次の条件のいずれかが当てはまる場合にのみ発生します。
- メッセージはPostfixsendmail(1)コマンドで受信されます。
- メッセージは、$ local_header_rewrite_clientsに一致するネットワーククライアントから受信されます。
- メッセージはネットワークから受信され、remote_header_rewrite_domainパラメーターは空でない値を指定します。
Postfixバージョン2.2より前の動作を取得するには、「local_header_rewrite_clients = static:all」を指定します。
構成では、接尾辞は$myorigin
= $myhostname
= myserver.example.comをgeorge
に追加します。
$ myhostname(myserver.example.com)が `mydestinationにリストされているため、postfixは次の方法でユーザーの存在チェックを実行しようとします。
alias_maps
で定義されたユーザー(ジョージ)かどうかを確認しますユーザーが両方のチェックに一致しない場合、電子メールは返送されます。それ以外の場合、電子メールはローカルメールボックスに配信されます。
質問から、george-> [email protected]の代わりにgeorge-> [email protected]を書き直したいようです。次に、パラメータmyorigin
を$mydomain
に変更できます。 main.cf
で
myorigin = $mydomain