我想將傳入的郵件傳遞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 sendmail(1) 和 postdrop(1) 重新註入掃描郵件的「簡單」內容過濾器。
在我目前的 sendmail 呼叫中/usr/sbin/sendmail -f ${sender} ${recipient}
,郵件會循環傳回佇列,然後回到 spamassassin 等。
根據我對 postfix 文件的理解,使用 postfix 傳遞的郵件sendmail
被放入maildrop
目錄中,然後使用pickup
.我嘗試-o virtual_transport=dovecot
在接送運輸中附加 a 以避免排隊,但這沒有幫助。 (我想這些選項只能附加到 smtp 傳輸中)。
如何將使用 spamassassin 掃描的郵件重新註入佇列以進行最終投遞而不導致循環?
答案1
如何將使用 spamassassin 掃描的郵件重新註入佇列以進行最終投遞而不導致循環?
不,你不能
解釋
virtual_transport
我了解您使用管道將電子郵件輸入垃圾郵件刺客的原因。您只想掃描發送給您的電子郵件virtual_mailbox_domain
。不幸的是它沒有遵循受到推崇的 簡單內容過濾器的設置使用content_filter
參數代替virtual_transport
。
為什麼我無法傳遞virtual_transport
到 Pickup 或 smtpd?
一般來說,這裡是跨後綴代碼的電子郵件旅程
Input --> cleanup --> qmgr --> Output
*smtpd *local
*pickup *virtual
*qmqpd *smtp
*lmtp
*pipe
在cleanup
守護程式中,postfix 將「路由」您的電子郵件,無論它們屬於虛擬、本地、smtp 或其他傳輸。例外是非空content_filter
參數傳遞到輸入服務 ( smtpd
、pickup
、qmqpd
) 時。發生這種情況時,postfix 將覆蓋訊息路由並將電子郵件傳送到其中content_filter
。
另請注意,預設情況下所有 postfix 服務都會從中取得參數值,main.cf
除非您使用下列命令覆寫它-o 參數=值 在master.cf
。但並非man 5 postconf
服務使用的每個參數。例如,內容過濾器只被使用pickup
,smtpd
所以qmqpd
你可以把-o content_filter=amavis:[127.0.0.1:10025在他們。另一個例子,把-o smtp_bind_address因為smtpd
該參數僅在smtp
服務中使用。
同樣的論點可以應用在你的問題,「為什麼我可以透過-o 虛擬傳輸在pickup
?
因此,這裡有幾種可供您選擇的設置
content_filter
按照 postfix 文件中的說明使用。缺點是您也會掃描在您的網域之外轉發的電子郵件。使用
content_filter
透過 ACCESS 表和 FILTER 操作。透過這種方式,您可以選擇性地掃描傳入的電子郵件。不幸的是,您必須再次在該表中登記。 。您可以透過小心地將 ACCESS 表放置在virtual domain
permit_mynetworks
,之後來避免這種情況permit_sasl_authenticated
。透過這種方式,已允許發送電子郵件,並且您只需掃描傳入電子郵件。 (歸功於OP評論:) )使用Postfix 多實例。透過這種方式,您可以保留
virtual_transport
參數,並且 spamc 會將電子郵件注入到您的第二個實例。然後你可以virtual_transport
在不同的實例中定義不同的。但如果您想保持設定簡單,這就有點矯枉過正了。