Postfix

防止垃圾郵件被 Postfix 轉發(在本地發送到垃圾文件夾時)

  • December 28, 2014

我們有一個非常標準的 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.com

relayhost = [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 中的舊配置。

後綴多個實例

狀態:有效

這個想法是設置一個預設實例來處理傳入的電子郵件,另一個來處理傳出的電子郵件,如上述設置。我沒有給你詳細資訊,但你應該調整一些參數來讓第二個實例執行。然後添加額外的配置,如空relayhostheader_checks.

引用自:https://serverfault.com/questions/561283