Domain-Name-System

使用 CloudFlare 設置 SPF/DKIM 記錄

  • March 4, 2022

設置 SPF 記錄的正確方法是什麼?

使用 TXT 並添加以下內容?

v=spf1 a mx include:mydomain.tld ~all

更新:

使用以下內容後:

v=spf1 a mx ~all

我明白了:

Received-SPF: temperror (google.com: error in processing during lookup of PHPUSERNAME@SERVER.MYDOMAIN.TLD: DNS timeout) client-ip=x.x.218.7;
Authentication-Results: mx.google.com; spf=temperror (google.com: error in processing during lookup of PHPUSERNAME@SERVER.MYDOMAIN.TLD: DNS timeout) smtp.mail=PHPUSERNAME@SERVER.MYDOMAIN.TLD
Received: from PHPUSERNAME by SERVER.MYDOMAIN.TLD with local (Exim 4.77)
(envelope-from <PHPUSERNAME@SERVER.MYDOMAIN.TLD>)
id xxxxxxxxxxxxxxxx
for SOMEEMAIL@gmail.com;

如果您還沒有找到www.open-spf.org,這是一個很好的資源。請注意 SPF 與發件人 ID 主題。查看http://www.open-spf.org/SPF_Record_Syntax以了解低俗。

如果您託管自己的郵件伺服器,並且您的 MX 記錄構成唯一的發送伺服器,那麼您可以只使用“mx”機制。

如果您對電子郵件使用託管服務(例如 Google Apps),或者甚至將外發郵件從內部 SMTP 伺服器轉發到 SendGrid 等服務,請與這些服務聯繫以獲取特定的 SPF 配置說明。

編輯以添加對 SPF、機制和限定符的更好描述

當支持使用 SPF 的郵件交換收到一封電子郵件時,它會查看發件人聲稱的域 (someone@sendingdomain.tld) 和發送郵件的伺服器的 IP 地址。問題是,該 IP 地址是否有權代表發件人的域 (sendingdomain.tld) 發送電子郵件?

為了回答這個問題,伺服器從聲稱的域 (sendingdomain.tld) 中檢索 SPF 記錄(儲存為 DNS TXT 記錄),並根據該 SPF 記錄檢查發送伺服器的 IP 地址。

SPF 使用機制來創建有效的電子郵件發送伺服器列表。每個機制都可以用 +、-、~ 或 ? 來限定。前綴(此資訊取自open-spf.org):

‘+’ 表示通過(或有效) -注意:這是預設操作

‘-’ 表示失敗(或無效)

‘~’ 表示軟失敗(被許多伺服器視為中立)

‘?’ 表示中立(有效性既不確認也不否認)

在評估記錄時,它從左到右匹配第一個機制。如果沒有匹配的機制,則預設結果為中性

一般來說,“所有”機制匹配所有內容,所以……

“+All”機制意味著,所有伺服器都是該域的有效發件人(不要使用此選項)。

“-All”機制使所有發送伺服器失敗。在 SPF 記錄的末尾使用它來用失敗結果覆蓋****中性預設結果。一些服務(如穀歌)對此提出警告,但我還沒有遇到任何問題。

‘~All’ 和 ‘?All’ 機制相當於說:“如果發送伺服器與列出的任何有效伺服器都不匹配,請不要擔心。” 這些僅用於測試 SPF 記錄。

有關機制的完整列表,請參閱open-spf.org 的記錄語法頁面。

我想在這裡討論的另一種機制是“包括:<域>”。此機制指示解析 SPF 記錄的伺服器包含在由 <域> 託管的另一個 SPF 記錄中指定的附加機制。

例子:

如果您的域使用相同的伺服器(在相同的 IP 地址中)進行發送和接收:

  • v=spf1 mx –all
  • 以上等價於,v=spf1 +mx –all

如果您使用 Google Apps 託管郵件,但有時使用內部 SMTP 伺服器來發送自動郵件:

  • v=spf1 ip:<內部伺服器ip地址> include:_spf.google.com -all

DKIM 是一個完全不同的野獸。如果您使用的是託管電子郵件服務,請諮詢該服務以獲取說明。如果您託管自己的郵件交換,請查看您的伺服器軟體的文件以了解如何實現它。這有點超出了這個問題的範圍。

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