web-dev-qa-db-ja.com

Postfixで(ほとんどの)ローカル配信を停止する

これを行うようにPostfix(2.11.4)構成をセットアップしようとしています:

  1. ローカルサーバーから発信されたメールを送信します
  2. 実際にはスクリプトを指す単一のエイリアスの受信メールを受け入れます
  3. 何もありません

これが部分的な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
2
George Adams

ログから、ドメインマスカレードプロセスは、送信者と受信者の両方をsomethingから[email protected]に書き換えます。この書き換えの背後にある原因は、パラメータmyoriginappend_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は次の方法でユーザーの存在チェックを実行しようとします。

  1. ユーザー(george)がmyserver.example.comにローカルユーザーとしてリストされているかどうかを確認します
  2. alias_mapsで定義されたユーザー(ジョージ)かどうかを確認します

ユーザーが両方のチェックに一致しない場合、電子メールは返送されます。それ以外の場合、電子メールはローカルメールボックスに配信されます。

提案された解決策

質問から、george-> [email protected]の代わりにgeorge-> [email protected]を書き直したいようです。次に、パラメータmyorigin$mydomainに変更できます。 main.cf

myorigin = $mydomain
2
masegaloeh