sendmail を使用してスキャンしたメールをキューに再挿入する方法

sendmail を使用してスキャンしたメールをキューに再挿入する方法

virtual_transportを使用して受信メールをトランスポートspamassassin(main.cf: virtual_transport=spamassassin) に渡し、スキャンしたメールを sendmail を使用して postfix に再挿入したいと思います。

トランスポートは次のようになります。

spamassassin unix   -    n     n   -   -    pipe
    flags=hu user=vmail:mail argv=/usr/bin/spamc -u ${recipient} -e /usr/sbin/sendmail -f ${sender} ${recipient}

これは、postfix ドキュメント:

大量のメールを扱うサイトでは、Postfix sendmail(1) および postdrop(1) 経由でスキャンされたメールを再挿入する「単純な」コンテンツ フィルタの使用を避ける必要があります。

現在の sendmail 呼び出しでは/usr/sbin/sendmail -f ${sender} ${recipient}、メールはキューに戻され、その後 spamassassin に戻されるなどしてループします。

postfix のドキュメントから私が理解したところによると、postfix を使用して配信されたメールはディレクトリsendmailにドロップされmaildrop、 を使用してピックアップされますpickup。キューを回避するためにピックアップ トランスポートに を追加しようとしました-o virtual_transport=dovecotが、効果はありませんでした。(これらのオプションは、おそらく SMTP トランスポートにのみ追加できます)。

ループを起こさずに、spamassassin でスキャンされたメールを最終配信のキューに再度挿入するにはどうすればよいでしょうか?

答え1

ループを起こさずに、spamassassin でスキャンされたメールを最終配信のキューに再度挿入するにはどうすればよいでしょうか?

いいえ、できません

説明

メールをSpam Assassinにパイプする理由は理解できますvirtual_transport。 宛てのメールだけをスキャンしたいのですvirtual_mailbox_domain。残念ながら、推奨 シンプルなコンテンツフィルターの設定content_filter代わりにパラメータを使用しますvirtual_transport

virtual_transportpickup または smtpd に渡せないのはなぜですか?

一般的に、ここではPostfixコードを介して電子メールの旅

Input  --> cleanup --> qmgr --> Output 
*smtpd                          *local     
*pickup                         *virtual
*qmqpd                          *smtp
                                *lmtp
                                *pipe

デーモンではcleanup、仮想、ローカル、SMTP、またはその他のトランスポートに属しているかどうかに関係なく、Postfix が電子メールを「ルーティング」します。 1 つの例外は、非空白content_filterパラメータが入力サービス ( smtpdpickupqmqpd) に渡された場合です。 この場合、Postfix はメッセージ ルートを上書きし、代わりに電子メールを に送信しますcontent_filter

もう一つの注意点は、デフォルトではすべてのPostfixサービスは、main.cf以下を使用して上書きしない限り、パラメータ値を取得します。-o パラメータ=値 オンmaster.cf。ただし、すべてのパラメータがman 5 postconfサービスで使用されるわけではありません。たとえば、コンテンツフィルターのみで使用されるためpickupsmtpdqmqpd-o コンテンツフィルター=amavis:[127.0.0.1:10025もう一つの例としては、-o SMTP バインドアドレスこのパラメータはサービスsmtpdでのみ使用されますsmtp

同じ議論は、「なぜ私は合格できるのか」という質問にも当てはまります。-o 仮想トランスポートpickup?"

セットアップにはいくつかの選択肢があります

  • postfix のドキュメントの説明に従って使用してくださいcontent_filter。欠点は、ドメイン外に中継された電子メールもスキャンされることです。

  • 使用content_filter ACCESSテーブルとFILTERアクション経由. この方法では、受信メールを選択的にスキャンできます。残念ながら、virtual domainそのテーブルに を再度登録する必要があります。permit_mynetworks . の後に ACCESS テーブルを慎重に配置することで、これを回避できますpermit_sasl_authenticated。 この方法では、送信メールは既に許可されており、受信メールのみがスキャンされます。(OPコメントのクレジット:) )

  • 使用Postfix 複数インスタンスこの方法を使用すると、パラメータを保持できvirtual_transport、spamc は 2 番目のインスタンスに電子メールを挿入します。その後、virtual_transport異なるインスタンスで異なるものを定義できます。ただし、セットアップをシンプルに保ちたい場合は、少しやりすぎです。

関連情報