Perl

SpamAssassin local.cf DMARC 配置辨識拒絕和無,但不辨識隔離

  • June 28, 2020

對於 SpamAssassin 3.4.2,我添加了以下配置規則集,local.cf目的是為失敗的 DMARC 測試提供垃圾郵件分數。

DMARC 和 SPF Authentication-Results 標頭由 創建,opendmarcDKIM Authentication-Results 標頭由opendkim.

預期輸出是添加到 X-Spam-Report 標頭的所有三個標頭結果的分數。

實際輸出僅適用於在 X-Spam-Report 標頭中添加p=rejectp=none具有適當分數的域,但p=quarantine即使 DMARC、DKIM 和 SPF Authentication-Results 標頭也不會將任何內容添加到 X-Spam-Report 標頭已按預期添加。

添加到/etc/spamassassin/local.cf

ifplugin Mail::SpamAssassin::Plugin::AskDNS
askdns __DMARC_POLICY_NONE _dmarc._AUTHORDOMAIN_ TXT /^v=DMARC1;.*\bp=none;/
askdns __DMARC_POLICY_QUAR _dmarc._AUTHORDOMAIN_ TXT /^v=DMARC1;.*\bp=quarantine;/
askdns __DMARC_POLICY_REJECT _dmarc._AUTHORDOMAIN_ TXT /^v=DMARC1;.*\bp=reject;/

meta DMARC_REJECT !(DKIM_VALID_AU || SPF_PASS) && __DMARC_POLICY_REJECT
score DMARC_REJECT 10
meta DMARC_QUAR !(DKIM_VALID_AU || SPF_PASS) && __DMARC_POLICY_QUAR
score DMARC_QUAR 5
meta DMARC_NONE !(DKIM_VALID_AU || SPF_PASS) && __DMARC_POLICY_NONE
score DMARC_NONE 0.1
endif # Mail::SpamAssassin::Plugin::AskDNS

配置有什麼問題?

您所指的配置是從DMARC/Spamassassin/Qmail上的 Random Thoughts 部落格複製的。如果由於某種原因您不能使用 OpenDMARC,這篇博文將 AskDNS 作為第三種選擇。由於您已經在使用 OpenDMARC,您可以直接Authentication-Results在 SpamAssassin 中使用它的標頭。從大衛瓊斯修改:

header DMARC_PASS Authentication-Results =~ /mail\.example\.com; dmarc=pass/
describe DMARC_PASS DMARC check passed
score DMARC_PASS -0.1

header DMARC_FAIL Authentication-Results =~ /mail\.example\.com; dmarc=fail/
describe DMARC_FAIL DMARC check failed
score DMARC_FAIL 5.0

header DMARC_NONE Authentication-Results =~ /mail\.example\.com; dmarc=none/
describe DMARC_NONE DMARC check neutral
score DMARC_NONE 0.1

如果您已實施 OpenDMARC 以在連接階段拒絕未通過 DMARC 檢查的消息p=reject,則您的 SpamAssassin 將永遠不會看到任何屬於第四類的消息,但這裡只是為了完整性:

header DMARC_FAIL_REJECT Authentication-Results =~ /mail\.example\.com; dmarc=fail \(p=reject/
describe DMARC_FAIL_REJECT DMARC check failed and the sending domains says to reject this message
score DMARC_FAIL_REJECT 10.0

因為Authentication-Results標題也可以偽造,所以我不會僅根據它們給出高*負分。*因此,這裡最有用的規則是DMARC_FAIL, 觸發p=quarantine。在我看來,這也可能比本範例中的得分更高5.0,因為發送域已經做出了決定。

如果上面的範例配置不合適,這裡有一個額外的配置和評分選項:

header DMARC_PASS Authentication-Results =~ /mail\.example\.com; dmarc=pass/
describe DMARC_PASS DMARC check passed
score DMARC_PASS -0.1

header DMARC_NONE Authentication-Results =~ /mail\.example\.com; dmarc=none/
describe DMARC_NONE DMARC record not found
score DMARC_NONE 0.1

header DMARC_FAIL_NONE Authentication-Results =~ /mail\.example\.com; dmarc=fail \(p=none/
describe DMARC_FAIL_NONE DMARC check failed (p=none)
score DMARC_FAIL_NONE 2.0

header DMARC_FAIL_QUARANTINE Authentication-Results =~ /mail\.example\.com; dmarc=fail \(p=quarantine/
describe DMARC_FAIL_QUARANTINE DMARC check failed (p=quarantine)
score DMARC_FAIL_QUARANTINE 5.0

header DMARC_FAIL_REJECT Authentication-Results =~ /mail\.example\.com; dmarc=fail \(p=reject/
describe DMARC_FAIL_REJECT DMARC check failed (p=reject)
score DMARC_FAIL_REJECT 10.0

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