SPF 檢查工具的運作方式
工具會讀取所輸入網域的 TXT 記錄,找出以 v=spf1 開頭的記錄。接著模擬接收伺服器的處理方式,逐一追蹤每個 include 和 redirect,記錄每項需要進行 DNS 查詢的查找,並檢查每個項目的語法。
這項檢查不涉及 IP 位址。這裡要確認的是記錄是否有效,以及任何需要評估該記錄的伺服器能否在查詢限制內完成處理,而不是判斷某一台特定伺服器是否可以寄信。若要確認這一點,請透過完整測試寄送郵件,報告會顯示接收端實際得到的結果。
DNS 查詢次數過多:上限為十次
RFC 7208 將一次 SPF 評估限制為最多十個需要 DNS 查詢的項目,包括 include、a、mx、ptr、exists 和 redirect。計數涵蓋整個查詢樹,因此,如果一個 include 本身又包含另外三個 include,就會用掉四次查詢。超過限制時,結果會是 permerror,而 DMARC 會將其視為 SPF 未通過。
檢查工具會計算每個項目,包括實際評估時可能永遠不會處理到的項目,因為真正的評估會在第一個符合項目處停止。列在前面的伺服器會持續通過,較後面的伺服器則會開始失敗。從外部看來,就像有些郵件可以正常寄送,有些卻不行。
ip4 和 ip6 項目不會占用查詢次數。以位址範圍取代 include,也就是扁平化,可以減少查詢次數,但代價是必須手動讓這些位址範圍與服務供應商保持同步。
常見的 SPF 設定錯誤
同一個網域有兩筆 SPF 記錄。這通常發生在第二家服務供應商的設定指南要求新增記錄,但沒有人將它合併到原有記錄中。僅有兩筆記錄本身就會造成 permerror。
記錄以 +all 結尾,這會讓網際網路上的任何伺服器都通過,或以 ?all 結尾,這不會對任何伺服器表明立場,因此無法提供任何保護。使用 RFC 7208 明確表示不應使用的 ptr 項目。已經多年未使用的服務若仍保留 include,每個仍會占用一次查詢。
常見問題
SPF 記錄的格式是什麼?
SPF 是網域上的一筆 TXT 記錄,以 v=spf1 開頭,列出允許寄信的來源,並以適用於其他所有來源的規則結尾。v=spf1 include:_spf.google.com ip4:203.0.113.5 ~all 允許 Google Workspace 和一台伺服器寄信,其他來源則為 softfail。一個網域只能發布一筆 SPF 記錄。
SPF softfail 或 hardfail:該用 ~all 還是 -all?
設定 DMARC 後,兩者都可以,因為 DMARC 會決定如何處理驗證失敗的郵件。在你仍在找出所有代你寄信的服務時,~all(softfail)是較安全的選擇。當 DMARC 報告顯示沒有任何合法郵件驗證失敗時,再改用 -all。
為什麼我的記錄能通過完整測試,但在這裡顯示超過十次查詢?
接收端在第一個符合你伺服器的機制處停止評估,因此不會執行後續查詢。清單中位置更後面的另一台伺服器會讓相同的評估超過十次查詢並失敗。
什麼是空查詢?
空查詢是未傳回任何記錄,或查詢名稱不存在的 DNS 查詢。RFC 7208 允許一次評估出現兩次空查詢,第三次會造成 permerror。通常是因為 include 所指向的網域已不存在。
一個網域可以有兩筆 SPF 記錄嗎?
不可以。RFC 7208 只允許一筆以 v=spf1 開頭的記錄,如果有兩筆,每次評估都會以 permerror 結束。請合併記錄:只保留一個 v=spf1,將兩筆記錄中的 include 和 ip4 項目放入其中,並以一個 all 結尾。v=spf1 include:_spf.google.com include:servers.mcsv.net ~all 可在一筆記錄中涵蓋兩個服務供應商。
完整指南: Multiple SPF records
SPF permerror 是什麼意思?
永久錯誤:記錄無法依照目前發布的內容進行評估,因此重試仍會得到相同結果。常見原因包括超過十次 DNS 查詢、同一網域有兩筆 SPF 記錄、語法錯誤,以及出現第三次無結果查詢。DMARC 會將 permerror 視為 SPF 未通過。
完整指南: SPF permerror: too many DNS lookups
找不到 SPF 記錄時會怎樣?
接收端會得到 none 結果,DMARC 對它的處理方式與 fail 相同,而且任何人都能在信封寄件者中使用你的網域。請直接在該網域發布一筆 TXT 記錄,以 v=spf1 開頭,列出代表你寄信的服務,並以 ~all 或 -all 結尾。