防止垃圾郵件被 Postfix 轉發(在本地發送到垃圾文件夾時)
我們有一個非常標準的 Postfix/Amavis 設置,我們使用 Dovecot LDA 在本地傳遞郵件。Amavis 傳遞了垃圾郵件,我們使用 Sieve 將其放入使用者的垃圾文件夾中。
問題是被我們的 Amavis 標記為垃圾郵件的郵件不應該被轉發到外部地址。我不知道如何實現這一目標。
我確實找到了一些對 Postfix header_checks 的引用,但這些是由 Amavis 開始檢查之前的清理過程處理的。轉發是這樣的:
Dec 13 23:13:32 mail postfix/smtpd[14405]: connect from ... Dec 13 23:13:32 mail postfix/smtpd[14405]: Anonymous TLS connection established from ... SSLv3 with cipher AES128-SHA (128/128 bits) Dec 13 23:13:32 mail postfix/smtpd[14405]: 5659141F35: client=..., sasl_method=PLAIN, sasl_username=test.piet@... Dec 13 23:13:32 mail postfix/cleanup[14251]: 5659141F35: message-id=<etPan.52ab868c.74b0dc51.355@Rajka.local> Dec 13 23:13:32 mail postfix/qmgr[13623]: 5659141F35: from=<test.piet@...>, size=1701, nrcpt=1 (queue active) Dec 13 23:13:32 mail postfix/smtpd[14405]: disconnect from ... Dec 13 23:13:37 mail postfix/smtpd[14358]: connect from localhost[127.0.0.1] Dec 13 23:13:37 mail postfix/smtpd[14358]: ACF4F42260: client=localhost[127.0.0.1] Dec 13 23:13:37 mail postfix/cleanup[14251]: ACF4F42260: message-id=<etPan.52ab868c.74b0dc51.355@Rajka.local> Dec 13 23:13:37 mail postfix/smtpd[14358]: disconnect from localhost[127.0.0.1] Dec 13 23:13:37 mail postfix/qmgr[13623]: ACF4F42260: from=<test.piet@...>, size=2408, nrcpt=1 (queue active) Dec 13 23:13:37 mail amavis[11530]: (11530-14) Passed SPAM, [188.142.56.16] [188.142.56.16] <test.piet@...> -> <mark.ruys@...>, Message-ID: <etPan.52ab868c.74b0dc51.355@Rajka.local>, mail_id: iTVFrnGF7RaS, Hits: 999.001, size: 1701, queued_as: ACF4F42260, 5305 ms Dec 13 23:13:37 mail postfix/smtp[14253]: 5659141F35: to=<mark.ruys@...>, orig_to=<mark@...>, relay=127.0.0.1[127.0.0.1]:10024, delay=5.4, delays=0.11/0/0/5.3, dsn=2.0.0, status=sent (250 2.0.0 from MTA([127.0.0.1]:10025): 250 2.0.0 Ok: queued as ACF4F42260) Dec 13 23:13:37 mail postfix/qmgr[13623]: 5659141F35: removed Dec 13 23:13:37 mail postfix/smtp[14414]: Trusted TLS connection established to gmail-smtp-in.l.google.com[173.194.65.26]:25: TLSv1.1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits) Dec 13 23:13:38 mail postfix/smtp[14414]: ACF4F42260: to=<mark.ruys@...>, relay=gmail-smtp-in.l.google.com[173.194.65.26]:25, delay=0.84, delays=0/0.02/0.08/0.73, dsn=2.0.0, status=sent (250 2.0.0 OK 1386972818 f8si3542819eep.162 - gsmtp) Dec 13 23:13:38 mail postfix/qmgr[13623]: ACF4F42260: removed
一般解決方案
如果您有另一台伺服器,那麼解決方案是微不足道的。據說,另一個盒子叫做 second.example.com。在您原來的盒子上,將中繼主機設置
main.cf
為 second.example.comrelayhost = [second.example.com]:25
在 second.example.com 中,設置
header_checks
為檢查電子郵件是否可能是垃圾郵件,方法是檢查主題中的SPAM詞或檢查標題中的垃圾郵件分數。對於這個例子,我將使用主題檢查方法。header_checks 語法是/^Subject: \[SPAM\]/ DISCARD
完畢。現在,別名電子郵件將流經 second.example.com,並在成為垃圾郵件時被丟棄。
如果您沒有另一台伺服器,那麼您可能的選擇是
smtpd
在 master.cf 或Postfix Multiple Instances中設置額外的守護程序。附加 smtpd 守護程序
狀態:沒用
這個想法是添加新的 smtpd 監聽另一個埠並覆蓋 header_checks 和 relayhost 的配置。
main.cf
將配置添加到relayhost
另一個 smtpd 守護程序。relayhost = [127.0.0.1]:12225
定義
master.cf
並覆蓋header_checks
以檢查帶有垃圾郵件標籤的電子郵件並清空relayhost
,這樣它就不會循環到自身。[127.0.0.1]:12225 inet n - n - - smtpd -o header_checks=pcre:/etc/postfix/killspam -o relayhost=
不幸的是,這不起作用。根據man 8 smtpd,smtpd 會默默拒絕此手冊頁中未列出的參數。因此,它仍然使用 main.cf 中的舊配置。
後綴多個實例
狀態:有效
這個想法是設置一個預設實例來處理傳入的電子郵件,另一個來處理傳出的電子郵件,如上述設置。我沒有給你詳細資訊,但你應該調整一些參數來讓第二個實例執行。然後添加額外的配置,如空
relayhost
和header_checks
.