ATM私は通常の方法を使用してすべてのメッセージをHOLDに置き、 http://www.mailscanner.info/postfix.html で説明されているようにpostfixからMailScannerにメッセージを渡します。
Postfix構成ファイル/etc/postfix/main.cfに次の行を追加します。
header_checks = regexp:/etc/postfix/header_checks
ファイル/ etc/postfix/header_checksに、次の行を追加します。
/^Received:/ HOLD
これの効果は、すべてのメッセージをHOLDキューに移動するようにPostfixに指示することです。
しかし、カスタムヘッダーで識別されるメッセージであるMailScannerを介して渡す必要のないSMTPメッセージがいくつかあります。これらのメッセージに対してMailScannerをバイパスする方法を見つける必要がありますが、From:またはTo:アドレスではなく、カスタムヘッダーの存在を確認する必要があるため、見つけることができません。
/ etc/postfix/header_checksを変更しようとしました:
/^X-Custom-Header:/ FILTER smtp:[ip.addr.next.hop]:10025
mail.logに、フィルタリングされたメッセージが表示されます。
Aug 19 17:52:17 servername postfix/cleanup[19423]: AFB842E33A: filter: header X-Custom-Header: from relay.sender.foo[xx.yy.zz.kk]; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<mail.sender.foo>: smtp:[ip.addr.next.hop]:10025
上記のルールがheader_checksの唯一のルールである場合、SMTP経由でネクストホップに配信されます。
ここで、Mailscanner(Postfix HOLDキュー)で他のすべてをキャッチする必要があるので、header_checksにそれを行うように指示するにはどうすればよいですか?/^ Received:/を離れると、AFB842E33AもHOLDキューに保持されていることを確認してください。
たぶんばかげた質問ですが...何か考えはありますか?
はい、解決策さえあります。これはheader_checks
と呼ばれ、*_restrictions
の一部です。形式(必要なものによって異なります)は、それ自体で説明されています ドキュメント 。
しかし、MailscannerやSpamassassinのようなアフターキューフィルターの使用はお勧めできません。スパムを減らして送信者に通知するためのより良い方法は、組み込みのpostscreen
、client_restrictions
、sender_restrictions
、recipient_restrictions
、before-queuemiltersのようなbefore-queue-filtersです。およびpolicyd-weight
などの外部ツール。
Before-queue-filtersのみがサーバーの負荷とリソースを削減し、サーバーに到達する前にすべてのスパムの80%をブロックできます。特にMailscannerは、Postfixに統合されていないだけで、Postfixの組み込みインターフェースをスパム対策フィルターや一般的なフィルターに使用できないため、私の個人的な「嫌いなリスト」に載っています。
編集:編集された質問のため、今すぐ回答します。
FILTER
は、Postfixがheader_checks
-ファイルで動作するのを停止するアクションではありません。 「フィルタリングするチェックが終了したら」とだけ表示されます。したがって、次の行が一致し、メールが保留になります。
解決策は(たとえそれが不自由に見えても)次のheader_checks
-ファイルです:
/^X-Custom-Header:/ FILTER smtp:[ip.addr.next.hop]:10025
/^X-Custom-Header:/ OK
/^Received:/ HOLD