| 前綴 | 名稱 | 含義 | 典型用法 |
+ | Pass | 匹配通過,允許發送 | 預設值,+ip4:1.2.3.4 等同 ip4:1.2.3.4 |
- | Fail | 匹配失敗,拒絕發送 | -all 結尾,表示除上述授權外全拒絕 |
~ | SoftFail | 軟性失敗,接受但標記可疑 | ~all 結尾,過渡期/測試階段建議 |
? | Neutral | 中性,不表態 | ?all 幾乎不使用 |
實戰配置範例
範例 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/阿里雲為例)
- 登入 DNS 服務商管理主控台
- 選擇目標域名,新增記錄
- 類型選 TXT (部分介面直接提供 SPF 類型,本質相同)
- 主機名/名稱:
@ (代表根域) 或留空
- 值/內容:輸入完整 SPF 字串,如
v=spf1 ip4:203.0.113.50 -all
- TTL:建議 3600 (1小時) 或 300 (5分鐘,變更驗證期)
- 儲存,等待全球生效 (通常 5-30 分鐘)
驗證與測試工具
| 工具 | 指令/網址 | 用途 |
dig | dig TXT example.com | 查看原始 SPF 記錄 |
nslookup | nslookup -type=txt example.com | Windows 環境查詢 |
| MXToolbox | SPF Record Lookup | 圖形化驗證、語法檢查、DNS 傳播檢查 |
| Kitterman | SPF Validation | 詳細語法分析、DNS 查詢次數統計 (限制 10 次) |
| Google Postmaster | 域名信譽 | 監控 SPF/DKIM/DMARC 通過率、發送量、退信率 |
常見錯誤與避坑指南
- 超過 10 次 DNS 查詢限制:SPF 規範限制單次驗證最多 10 次 DNS 查詢 (include、a、mx、ptr、exists 皆計數)。解決:扁平化 IP 列表、使用
ip4/ip6 替代 include、合併網段
- 多條 SPF 記錄:一個域名只能有一條 SPF 記錄 (可包含多個機制)。多條會導致驗證失敗 (PermError)
- 語法錯誤:缺少
v=spf1、機制拼寫錯誤、缺少結尾 all 機制
- 授權不全導致正常郵件被拒:新增郵件伺服器/第三方服務未同步更新 SPF。建議建立變更流程:IT 變更單 → 更新 SPF → 驗證生效
- ptr 機制濫用:ptr 查詢慢、不可靠、消耗查詢額度,生產環境嚴禁使用
- 未部署 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 信譽報表