Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> 電腦軟體教學 >> 伺服器技術 >> DNS 伺服器

DNS SPF 記錄完整指南:原理、語法、配置實戰與反垃圾郵件最佳實踐

編輯:DNS 伺服器

SPF 核心定位

SPF (Sender Policy Framework) 是基於 DNS 的郵件發送授權機制,屬於 TXT 記錄類型。其核心目的是:讓收件方驗證發件 IP 是否經過發件域名授權,有效防範偽造發件人地址的垃圾郵件、釣魚郵件、商業郵件詐騙 (BEC)。

SPF 與 MX 記錄的互補關係

記錄類型方向用途查詢發起方
MX (Mail Exchanger)收件告訴發件方「哪台伺服器負責接收本域郵件」發件方 MTA
SPF (TXT)發件告訴收件方「哪些 IP/伺服器被授權代表本域發送郵件」收件方 MTA / 反垃圾網關

SPF 記錄語法完整解析

記錄格式


v=spf1 [mechanism1] [mechanism2] ... [modifier] [all]

機制 - 授權來源定義

機制語法範例含義查詢行為
ip4ip4:192.168.1.10 / ip4:192.168.1.0/24授權 IPv4 單位址或網段直接比對,無 DNS 查詢
ip6ip6:2001:db8::/32授權 IPv6 單位址或網段直接比對
aa / a:mail.example.com / a:example.com/24授權域名的 A 記錄 IP觸發 A 記錄查詢
mxmx / mx:example.com / mx:example.com/24授權域名的 MX 記錄指向伺服器 IP觸發 MX → A 查詢
ptrptr / ptr:example.com授權通過 PTR 反解驗證的主機 (不推薦,慢且不可靠)觸發 PTR → A 查詢
existsexists:%{i}.spf.example.com宏驗證:構造域名查詢是否存在觸發 A 查詢
includeinclude:_spf.google.com引用第三方 SPF 記錄 (如 Google Workspace、SendGrid)遞迴查詢被引用域 SPF

修飾符

  • redirect=domain:重定向至另一域名的 SPF 記錄 (用於多域共用策略)
  • exp=domain:自定義拒絕說明,需配合 TXT 記錄提供錯誤訊息

限定詞 - 匹配結果動作

實戰配置範例

範例 1:單一郵件伺服器 (自建 Exchange/Postfix)


# 域名:example.com
# 郵件伺服器公網 IP:203.0.113.50
# DNS 記錄:
example.com. IN TXT "v=spf1 ip4:203.0.113.50 -all"

含義:僅授權 203.0.113.50 發送 @example.com 郵件,其他 IP 全部拒絕 (-all)。

範例 2:多 IP 段 + 第三方郵件服務 (Google Workspace)


example.com. IN TXT "v=spf1 ip4:203.0.113.0/24 ip4:198.51.100.0/24 include:_spf.google.com -all"

含義:授權兩個 IP 段 + Google 郵件伺服器 (透過 include 引用),其餘拒絕。

範例 3:使用 mx 機制簡化維護


example.com. IN TXT "v=spf1 mx -all"

含義:授權域名 MX 記錄指向的所有伺服器 IP 發送郵件。MX 變更時 SPF 自動生效,維護最省力。

範例 4:過渡期測試 (SoftFail)


example.com. IN TXT "v=spf1 ip4:203.0.113.50 ~all"

含義:未授權 IP 郵件會被接受但標記為可疑 (通常放入垃圾箱或加標題),適合新部署觀察期。

DNS 配置實操步驟 (以 GoDaddy/Cloudflare/阿里雲為例)

  1. 登入 DNS 服務商管理主控台
  2. 選擇目標域名,新增記錄
  3. 類型選 TXT (部分介面直接提供 SPF 類型,本質相同)
  4. 主機名/名稱:@ (代表根域) 或留空
  5. 值/內容:輸入完整 SPF 字串,如 v=spf1 ip4:203.0.113.50 -all
  6. TTL:建議 3600 (1小時) 或 300 (5分鐘,變更驗證期)
  7. 儲存,等待全球生效 (通常 5-30 分鐘)

驗證與測試工具

前綴名稱含義典型用法
+Pass匹配通過,允許發送預設值,+ip4:1.2.3.4 等同 ip4:1.2.3.4
-Fail匹配失敗,拒絕發送-all 結尾,表示除上述授權外全拒絕
~SoftFail軟性失敗,接受但標記可疑~all 結尾,過渡期/測試階段建議
?Neutral中性,不表態?all 幾乎不使用
工具指令/網址用途
digdig TXT example.com查看原始 SPF 記錄
nslookupnslookup -type=txt example.comWindows 環境查詢
MXToolboxSPF Record Lookup圖形化驗證、語法檢查、DNS 傳播檢查
KittermanSPF Validation詳細語法分析、DNS 查詢次數統計 (限制 10 次)
Google Postmaster域名信譽監控 SPF/DKIM/DMARC 通過率、發送量、退信率

常見錯誤與避坑指南

  1. 超過 10 次 DNS 查詢限制:SPF 規範限制單次驗證最多 10 次 DNS 查詢 (include、a、mx、ptr、exists 皆計數)。解決:扁平化 IP 列表、使用 ip4/ip6 替代 include、合併網段
  2. 多條 SPF 記錄:一個域名只能有一條 SPF 記錄 (可包含多個機制)。多條會導致驗證失敗 (PermError)
  3. 語法錯誤:缺少 v=spf1、機制拼寫錯誤、缺少結尾 all 機制
  4. 授權不全導致正常郵件被拒:新增郵件伺服器/第三方服務未同步更新 SPF。建議建立變更流程:IT 變更單 → 更新 SPF → 驗證生效
  5. ptr 機制濫用:ptr 查詢慢、不可靠、消耗查詢額度,生產環境嚴禁使用
  6. 未部署 DKIM/DMARC:SPF 僅驗證發件 IP,無法防範郵件內容竄改、轉發破壞。完整防護需 SPF + DKIM + DMARC 三位一體

進階:SPF 宏與動態授權


# 利用宏實現按發件 IP 動態授權 (需收件方支援)
v=spf1 exists:%{i}.ip.example.com -all

# DNS 端配置泛域名
*.ip.example.com. IN A 127.0.0.1
# 僅在授權 IP 對應的子域存在 A 記錄時通過

適用於大量動態 IP 發送場景 (如雲端函數、容器集群),但實施複雜度高,需謹慎評估。

總結:SPF 部署檢查清單

  • [ ] 盤點所有合法發件 IP/伺服器/第三方服務
  • [ ] 編寫符合語法、<10 次查詢的 SPF 字串
  • [ ] DNS 新增單條 TXT 記錄,主機名 @
  • [ ] 使用 dig/MXToolbox 驗證語法與傳播
  • [ ] 發送測試郵件至 Gmail/Outlook/QQ 郵箱,檢查郵件原始碼 Authentication-Results: spf=pass
  • [ ] 部署 DKIM 簽署 + DMARC 策略 (p=none → quarantine → reject)
  • [ ] 納入 IT 變更管理流程,郵件基礎設施變更必同步更新 SPF
  • [ ] 定期 (月度) 檢查 Postmaster Tools 信譽報表
Copyright © Windows教程網 All Rights Reserved