Exchange

儘管 SCL 標頭值,但 Exchange 未將郵件放入垃圾郵件

  • May 28, 2019

問題

我正在通過基於 Exchange 的規則設置 SCL 值。當所需條件匹配並且正確設置 SCL 值時,規則會正確應用,如郵件標頭所示。此外,SCL 值集 (6) 與垃圾 SCL 門檻值(預設值,5)匹配。

但是,Exchange 伺服器不會將郵件放入垃圾文件夾。

我正在尋找可能出現問題的提示,可能會破壞正確工作流程的提示,等等。或有關要執行的其他診斷步驟的任何提示。

設想

我目前正在以下場景(範例值)中進行到 Exchange 2016 的遷移:

在此處輸入圖像描述

  1. DNS MX 記錄將發件人定向到舊伺服器,
  2. 舊伺服器通過 SpamAssassin 執行垃圾郵件分析,並在郵件中添加相應的標頭,包括X-Spam-Score
  3. 發送給舊伺服器不知道的收件人的郵件(即遷移的郵箱)被轉發到 Exchange,
  4. Exchange 對X-Spam-Score標頭值、匹配模式[+]{4}(四個或更多+字元,相當於4.0+分數)應用規則,將 SCL 級別設置為6.

規則的確切配置(基於Get-TransportRule顯示):

HeaderMatchesMessageHeader                    : X-Spam-Score
HeaderMatchesPatterns                         : {[+]{4}}
SetSCL                                        : 6

我知道這到目前為止有效,因為收到的與X-Spam-Score模式匹配的消息確實會獲得X-MS-Exchange-Organization-SCL: 6標題。

然而,郵件最終在收件箱中,而不是被轉發到垃圾文件夾:(

已傳遞消息中的範例結果標頭集:

X-Spam-Score: 8.0 (++++++++)
X-MS-Exchange-Organization-SCL: 6
X-MS-Exchange-Organization-AuthSource: mbx-a.example.com
X-MS-Exchange-Organization-AuthAs: Anonymous
X-MS-Exchange-Transport-EndToEndLatency: 00:00:01.0250276
X-MS-Exchange-Processed-By-BccFoldering: 15.01.1531.003

附加資訊

上述配置基本上是標準 Exchange Online Protection 配置的類似物,其中 EOP 伺服器可以被視為具有 SpamAssassin 的舊伺服器的等價物。在這方面,EOP 文件建議了一個非常相似的配置,不同之處僅在於用於確定消息狀態的源標頭。進一步的部署計劃假定在舊伺服器之前部署 EOP,然後刪除具有垃圾郵件保護角色的舊伺服器。

到目前為止,有關垃圾/刪除/拒絕 SCL 門檻值的伺服器配置幾乎是預設的,詳細資訊:

獲取組織配置:

SCLJunkThreshold                                          : 4

獲取內容過濾器配置:

SCLRejectThreshold                    : 7
SCLRejectEnabled                      : True
SCLDeleteThreshold                    : 9
SCLDeleteEnabled                      : False
SCLQuarantineThreshold                : 9
SCLQuarantineEnabled                  : False

Exchange 設置不包括邊緣傳輸伺服器,並且未在郵箱伺服器上安裝/啟用反垃圾郵件代理,但 Microsoft 文件未提及任何此類要求,例如:

更新 1

我已經在所有節點上安裝了反垃圾郵件代理並執行了以下測試:

  1. 發送偽造郵件觸發 SenderID 失敗;
  2. 發送偽造的郵件以觸發高 SCL 結果,而不會觸發預先拒絕。

這兩個測試確實導致 SCL6 消息被傳遞,但同樣是傳遞到收件箱而不是垃圾文件夾。

這證明該問題與運輸規則無關。無論哪種機制提高/設置 SCL 級別,消息都會在收件箱中結束。

我找到了問題的直接原因。

垃圾郵件通過收件箱規則機制移動到垃圾文件夾,相當於傳輸規則,但在郵箱級別 - 通過Mail > Automatic processing > Inbox and sweep rules選項卡可配置的規則。

預設情況下,每個郵箱都帶有一個名為的隱藏收件箱規則Junk E-mail Rule- 它的存在可能會通過 PowerShell 顯示:

PS > Get-InboxRule -Mailbox "test@contoso.com" -IncludeHidden

Name             Enabled Priority RuleIdentity
----             ------- -------- ------------
Junk E-mail Rule True    1        4028702183896383681

對於我們的伺服器,大量郵箱(使用單個 PowerShell 批處理創建的帳戶的 75%)缺少此規則。

雖然導致規則失去的潛在問題尚不清楚並將進行調查,但臨時解決方案是通過關閉並再次打開垃圾郵件過濾來重新生成規則:

Set-MailboxJunkEmailConfiguration $MailBox -Enabled $False
Set-MailboxJunkEmailConfiguration $MailBox -Enabled $True

這可能適用於所有受影響的郵箱:

Get-Mailbox -ResultSize Unlimited | %{

   $Rule = Get-InboxRule -Mailbox $MailBox -IncludeHidden | ? Name -eq "Junk E-mail Rule"

   If ( $Rule -eq $null ) {
       Set-MailboxJunkEmailConfiguration $MailBox -Enabled $False
       Set-MailboxJunkEmailConfiguration $MailBox -Enabled $True
   }
}

請注意,在解決基本問題之前,需要在有關創建交易所帳戶的所有工作流程中實施此過程。

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