Postfix

Postfix + SpamAssassin:收到的郵件標題更改

  • February 18, 2016

我按照大多數網站推薦的此類作業系統設置的說明進行了 Postfix + SpamAssassin 設置。基本上我編輯了我master.cf的添加:

smtp      inet  n       -       -       -       -       smtpd -o content_filter=spamassassin

spamassassin unix -     n       n       -       -       pipe
       user=debian-spamd argv=/usr/bin/spamc -f -e  
       /usr/sbin/sendmail -oi -f ${sender} ${recipient}

SpamAssassin 實際上執行良好,並且我的電子郵件被過濾了,但是我注意到以下內容。過去,在 SpamAssassin 之前,當一封電子郵件被發送到我的伺服器時,標題會顯示如下內容:

Return-path: <sender@sender-server.dev>
Envelope-to: <destination@my-server.dev>
Delivery-date: Wed, 02 Dec 2015 12:37:13 +0100
Received: from mail.sender-server.dev ...
   by mail.my-server.dev

在 SpamAssassin 之後,他們顯示:

Return-path: <sender@sender-server.dev>
Envelope-to: <destination@my-server.dev>
Delivery-date: Wed, 02 Dec 2015 12:37:13 +0100
Received: from mail.my-server.dev ...
   by mail.my-server.dev

看起來啟用 SpamAssassinReceived: from是從電子郵件真正到達我自己的伺服器的原始伺服器更改…為什麼會發生這種情況?不能通過顯示正確標題過濾我的電子郵件的方式來解決此問題嗎?謝謝你。

這是我在@tarleb 研究和幫助後的最終解決方案

我的郵件傳遞是通過sendmail程序進行的,該程序在我的電子郵件中添加了一些額外的標題。我可以使用mitter(郵件過濾器)來過濾傳入的電子郵件並放棄sendmail使用,但是我決定更改為 Dovecot LDA 進行傳遞。

我原來的過濾器是,在 Postfix 的開頭master.cf

smtp      inet  n       -       -       -       -       smtpd -o content_filter=spamassassin

在文件末尾:

spamassassin unix -     n       n       -       -       pipe
       user=debian-spamd argv=/usr/bin/spamc -f -e  
       /usr/sbin/sendmail -oi -f ${sender} ${recipient}

我通過以下方式更改了文件的末尾以使用 Dovecot 本地傳遞:

spamassassin unix -     n   n   -   -   pipe
   flags=DROhu user=vmail:vmail argv=/usr/bin/spamc -f -e 
   /usr/lib/dovecot/deliver -f ${sender} -d ${user}@${nexthop} 

現在編輯 Postfixmain.cf並添加(可選,檢查 (3) 波紋管):

spamassassin_destination_recipient_limit = 1

現在您的電子郵件將通過 Dovecot LDA 發送,無需更改標題。對於好奇的人,這裡有一些關於我的配置的細節:

  1. 配置可與加地址/子地址/收件人分隔符一起使用(發往收件箱的電子郵件user+nospam@example.com將被發送到user@example.com收件箱) - 這就是為什麼我添加-d ${user}@${nexthop}這將刪除+域之前的所有內容。要啟用此功能,請務必添加recipient_delimiter = +main.cf;
  2. 我的標誌flags=DROhu,它們沒有添加任何異常但可以在這裡理解:http ://www.postfix.org/pipe.8.html ;
  3. spamassassin_destination_recipient_limit = 1需要確保每個收件人都被 spamassassin 單獨處理。由於D上面的標誌(包括X-Original-To標題),這是必需的。**如果您有D標誌並且您沒有設置spamassassin_destination_recipient_limit = 1具有多個目的地的電子郵件,則不會送達!**如果您不關心此標頭,則可以刪除該標誌,這不是必需的。

編輯:獎勵內容 - 將您的垃圾郵件移動到Junk文件夾中!

您還可以將 Dovecot 配置為將檢測為垃圾郵件的電子郵件移動到JunkIMAP 文件夾。這肯定會讓你的生活更輕鬆。請按照以下說明操作:

  1. 編輯/etc/dovecot/conf.d/15-mailboxes.conf並取消註釋/添加Junk文件夾(應該在namespace inbox附近的部分mailbox Trash):
mailbox Junk {
  special_use = \Junk
}
  1. 安裝;dovecot-sieve_apt-get install dovecot-sieve
  2. 編輯/etc/dovecot/conf.d/90-sieve.conf並註釋該行:#sieve = ~/.dovecot.sieve
  3. 編輯/etc/dovecot/conf.d/90-plugin.conf為:
plugin {
   sieve = /etc/dovecot/sieve/default.sieve
}
  1. 編輯/etc/dovecot/conf.d/15-lda.conf/etc/dovecot/conf.d/20-lmtp.conf匹配:
protocol lda/lmtp { # do not copy/paste this line!
 mail_plugins = $mail_plugins sieve
}

警告:您可能在protocol選擇項下還有其他設置,請保留它們。文件中的行protocol lda/lmtp更改,保留原件。 6. 創建文件夾/etc/dovecot/sieve/ 7. 使用以下內容創建文件/etc/dovecot/sieve/default.sieve

require "fileinto";
if header :contains "X-Spam-Flag" "YES" {
   fileinto "Junk";
}
  1. 將文件夾權限更改為您的虛擬電子郵件使用者和組,例如:chown vmail:vmail /etc/dovecot/sieve/ -R. 如果你錯過了這個鴿舍會抱怨!
  2. 重啟一切:service postfix restart; service dovecot restart; service spamassassin restart
  3. 嘗試向伺服器上的某些電子郵件(從外部伺服器)發送電子郵件,首先是普通電子郵件,然後是另一個具有以下主題的電子郵件:XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X. 第二封電子郵件應該進入Junk文件夾,第一封電子郵件應該進入您的收件箱。

如果這在您第一次嘗試時不起作用,請查看日誌:tail -f /var/log/mail.log並在tail執行時發送電子郵件。一個好的工作設置應該報告stored mail into mailbox 'INBOX'stored mail into mailbox 'Junk'.

引用自:https://unix.stackexchange.com/questions/247433