當郵件進入 Messaging Server 時,MTA 會執行 SPF 查詢,以判斷位址是否確實來自該位址上的網域。SPF 查詢會查看 DNS 中有無屬於該郵件網域 (domain) 的 TXT 記錄Domain 可能是指定為 HELO 或 EHLO 之引數的網域名稱 (若使用 spfhelo 通道關鍵字),或是以 MAIL FROM: 指令指定之創建者位址中的網域名稱 (通常為 @ 字元後的部分)。若未指定或沒有可用的網域名稱,則會以在 HELO/EHLO 期間指定的網域名稱做為 domain。請注意,大部分的 ISP 會提供符合其網域的 IP 位址授權清單。若 IP 位址不符合網域名稱,郵件將被假定為是偽造郵件。
查詢 DNS 之前,我們會先查看 SPF_LOCAL 對映表中有無相符的網域。若其中有相符網域,則會先使用此網域。
若在對映表中找到的記錄含有 redirect=domain 陳述式,則會透過 DNS 查詢重新導向至該網域,而略過遞迴與備援對映檔案檢查。
以下是所產生之 TXT 記錄的範例:
v=spf1 +mx a:colo.siroe.com/28 -all
此 RFC 所支援的 SRF 記錄必須使用 v=spf1 記號。
+mx 會引導我們查看 MX 記錄中的 domain,並確認此 SMTP 連線的來源 IP 位址,符合針對 domain 指定為 MX 查詢結果之 IP 位址之一。若有相符項目,+ 表示其結果為 Pass。
a:colo.siroe.com/28 會引導我們查看 A 記錄中的 colo.siroe.com,然後確認此 SMTP 連線的來源 IP 位址與 A 記錄位於相同的指定 CIDR 子網路中,而僅比較 28 個位元 (根據 255.255.255.240 進行遮罩)。其中未指定限定符號,因此會預設為 +,表示相符項目會產生 Pass。
最後,-all 會比對其他所有項目,而產生 Fail。如需 SPF 記錄更完整的說明,請參閱 RFC 4408,網址是 http://www.ietf.org/rfc/rfc4408.txt
SPF 處理可能會有數種結果。下表列出這些結果及其說明。
表 15–1 SPF 處理結果
結果 |
說明 |
---|---|
Pass |
查詢已通過,表示已找到 SPF 記錄,且記錄將原始系統驗證為有權使用 domain。 |
Fail |
查詢已找到相符的 SPF 記錄,但記錄明確拒絕授予 SMTP 用戶端在 SMTP 作業事件期間使用 domain 的授權。我們的 SPF 實作之預設運作方式,是以 5xx 回覆拒絕 SMTP 指令。 |
SoftFail |
查詢已找到相符的 SPF 記錄,而記錄亦拒絕授予 SMTP 用戶端使用 domain 的授權,但此拒絕較不嚴格,記錄並未指示立即的失敗。我們的實作預設運作方式是接受郵件,但在 Received-SPF: 標頭中記下 SoftFail,以利進行如伺服器端包含篩選處理期間,進行後續的評估。 |
Neutral |
SPF 記錄未對 SMTP 用戶端使用 domain 的授權進行任何宣告。將會接受郵件。在此指定中,必須將 Neutral 等同視為下方的 None。 |
None |
找不到任何相符的 SPF 記錄,因此不會執行 SPF 處理。 |
PermError |
在 SPF 處理期間發生永久性錯誤 (如 SPF 記錄中出現語法錯誤)、DNS 在處理巢狀 SPF 記錄時失敗 (由於 include: 機制或 redirect= 修飾鍵),或 SPF 處理在處理巢狀 SPF 記錄時超過配置的限制。預設的運作方式是以 5xx 回覆拒絕 SMTP 指令。 |
TempError |
在 SPF 處理期間發生暫時性錯誤,很可能是因為 DNS 在查詢 SPF 記錄時逾時。預設的運作方式是以 4xx 回覆拒絕 SMTP 指令。 |
SPF 處理完成後,會在郵件中寫入 Received-SPF: 標頭,以記載 SPF 處理的結果。此標頭可在後續的篩選處理期間接受查詢,以提供相關注意事項。若已在 option.dat 檔案中啟用 MTA 選項 MM_DEBUG (>0),則可進行廣泛的除錯。