SPF記錄詳解

什麼是SPF
就是Sender Policy Framework。SPF可以防止別人僞造你來發郵件,是一個反僞造性郵件的解決方案。當你定義了你的domain name的SPF記錄之後,接收郵件方會根據你的SPF記錄來確定連接過來的IP地址是否被包含在SPF記錄裏面,如果在,則認爲是一封正確的郵件,否則 則認爲是一封僞造的郵件。

下面爲SPF的詳細介紹,

一 句型

在一條SPF記錄中,按照排列的先後順序,對所給出的機制進行驗證.如果在SPF記錄中,沒有機制或修改符,默認結果是中性(Neutral);如果域沒有SPF記錄,結果是:”無”(None);如果在DNS解析期間,有一個臨時錯誤,會報”臨時錯誤”(TempError)(以前的規劃中稱作”錯誤”(error));如果SPF記錄句型錯誤,比如寫法錯誤或者使用了未知句型,會報”永久錯誤”(PermError)(以前稱作”unknown”)

1 機制

1.1 機制表示

1.1.1 all

這個機制總是匹配的,通常用在記錄的結尾.例:

“v=spf1 mx –all” 允許所有該域的MX郵件服務器發送郵件,禁止所有其他的.

“v=spf1 –all” 該域根本不能發送郵件

“v=spf1 +all” 任何服務器都可以發送郵件

1.1.2 ip4

“v=spf1 ip4:192.168.0.1/16 –all” 允許192.168.0.1到192.168.255.255的服務器發送郵件

“v=spf1 ip4:192.168.0.1 –all” 允許192.168.0.1發送郵件,與“v=spf1 ip4:192.168.0.1/32 –all”同意

1.1.3 ip6

單個IP,於ip4不同,/128爲默認前綴 例:

"v=spf1 ip6:1080::8:800:200C:417A/96 -all"

允許1080::8:800:0000:0000 和 1080::8:800:FFFF:FFFF之間的主機發送

"v=spf1 ip6:1080::8:800:68.0.3.1/96 -all"

允許 1080::8:800:0000:0000 和1080::8:800:FFFF:FFFF之間的主機發送

1.1.4 a

例:假設當前域爲example.com

"v=spf1 a -all" 當前域被使用

"v=spf1 a:example.com -all"當前域被使用

Equivalent if the current-domain is example.com.

"v=spf1 a:mailers.example.com -all" 指定mailers.example.com的主機IP可以外發郵件

"v=spf1 a/24 a:offsite.example.com/24 -all" 如果example.com解析到192.0.2.1,那麼全部的C類地址192.0.2.0/24將作爲可外發 郵件的IP地址;同樣,如果offsite.example.com有多個A記錄地址,每一個IP地址也會被擴展到CIDR子網,作爲可外發郵件IP地址.

1.1.5 mx

所有域的MX記錄對應的A記錄,按照MX記錄的優先級進行驗證.如果發送IP在這些記錄中,則機制匹配.如果域未指定,默認爲當前域.

A記錄需要精確匹配發送郵件的IP地址.如果有CIDR前綴,則需要逐個對應IP地址驗證.

例:

v=spf1 mx mx:deferrals.domain.com -all"

Perhaps a domain sends mail through its MX servers plus another set of servers whose job is to retry mail for deferring domains.

也許一個域可以通過他的MX服務器發送郵件,而另外也可以通過deferrals.domain.com的MX服務器發送郵件.

"v=spf1 mx/24 mx:offsite.domain.com/24 -all"

也許一個域的MX服務器在一個IP接收郵件,而用臨近的另一IP發送郵件.

1.1.7 prt

發送IP的PTR記錄至少有一個和給定域相匹配.儘量避免使用這種機制,因耗費大量的DNS查詢

例子:

"v=spf1 ptr -all"

"v=spf1 ptr:otherdomain.com -all"

1.1.8 exists

對被提供的域進行A記錄查詢,如果有結果,則匹配.如果結果是”-“,會被當作127.0.0.2對待.

在下面的例子中,發件IP地址爲1.2.3.4,當前域爲example.com

"v=spf1 exists:example.net -all"

如果example.net不能解析,結果失敗.如果可以解析.機制匹配.

1.1.10 include

句型:include:<domain>

指定的域被查詢後匹配.如果查詢無匹配或者有錯誤,接着開始下一個機制處理.警告:如果指定域不是合法有效的SPF記錄,返回”永久性錯誤”結果.某些郵件接收者會基於此錯誤,拒絕接受郵件.

例:

在下面的例子中,發信IP是1.2.3.4,當前域是example.com

“v=spf1 include:example.net –all”

如果example.net沒有SPF記錄,結果是”永久錯誤”(PermError)

假設example.net的SPF記錄是”v=spf1 a –all”

查詢exapmle.net的A記錄,如果匹配1.2.3.4,結果是”通過”(Pass);如果不匹配,,則include整體匹配失敗,後面的-all將不再驗證,最後總的結果還是”失敗”(Fail).

這個機制會涉及信任關係,可能會有越權行爲,可能被人假冒.因此可以設置爲中性,在include前加上標識符?

“v=spf1 ?include:example.net –all”

該機制一般不宜選擇.

1.2 標識符

作爲機制的前綴,表明機制的狀態.機制的默認標識符爲”+”

"+" Pass (通過)

"-" Fail (失敗)

"~" SoftFail (軟失敗)

"?" Neutral (中性)

2修改符

在一個SPF記錄中,每個修改符只能使用一次,不能重複使用.未知修改符將會在驗證時忽略。

1.2.1 redirect

句型: redirect=<domain>

將會用指定域代替當前域

在下面的例子裏:當前域爲example.com,發信IP是1.2.3.4

“v=spf1 redirect=example.net”

如果example.net沒有SPF記錄,返回”unknown”的錯誤

假設example.net的SPF記錄是”v=spf1 a –all”

查詢example.net的A記錄,如果匹配1.2.3.4,則”通過”(Pass);如果不匹配,該行爲失敗,接着開始執行-all機制.

1.2.2 exp

句型: exp=<domain>

提供解釋性的語句.如果SMTP接收者拒絕一個信息,它可以包含一個返回給發信者的解釋信息.SPF記錄裏可以包含一個解釋字符串給發送者,告之相關的錯誤信息或需要訪問的幫助頁面等.

二 處理過程

三 錯誤代碼

驗證SPF記錄的結果只能有如下幾在種:

結果

解釋

可做行爲

Pass

SPF記錄指定,主機被允許發送

接受

Fail

SPF記錄指定,主機不被允許發送

拒絕

SoftFail

SPF記錄指定,主機不被允許發送,但可以再發送

接受但做標記

Neutral

SPF記錄詳盡,但不能確認其有效性

接受

None

無SPF記錄或SPF記錄驗證無結果

接受

PermError

永久錯誤(例如不正確的格式記錄)

未指明

TempError

臨時錯誤發生

接受或拒絕

設置SPF記錄

SPF記錄類似類似這樣:

v=spf1 a mx mx:mail.jefflei.com ip4:202.96.88.88 ~all

這條SPF記錄具體的說明了允許發送 @yourdomain.com 的IP地址是:

  • a (這個a是指 yourdomain.com 解析出來的IP地址,若沒有配置應取消)
  • mx (yourdomain.com 對應的mx,即 mail.yourdomain.com的A記錄所對應的ip)
  • mx:mail.jefflei.com (如果沒有配置過mail.jefflei.com這條MX記錄也應取消)
  • ip4:202.96.88.88 (直接就是 202.152.186.85 這個IP地址)

其他還有些語法如下:

- Fail, 表示沒有其他任何匹配發生

~ 代表軟失敗,通常用於測試中

? 代表忽略

如果外發的ip不止一個,那麼必須要包含多個

可以通過這個網站的嚮導自動生成SPF記錄:http://www.openspf.org/ ,Godaddy域名解析面板的TXT記錄也提供了設置SPF記錄的嚮導,設置很方便。

檢測SPF記錄設置是否正確

發信到 [email protected] ,如果收到的信息是 :SPF check: pass 就說明設置成功了。

查看域名的SPF記錄

Windows下,開始菜單—>運行—>輸入cmd ,然後回車,在命令行下輸入:

nslookup -type=txt 域名

就可以看到域名設置的TXT記錄了。

Unix操作系統下用:

dig -t txt 域名

發佈了176 篇原創文章 · 獲贊 13 · 訪問量 28萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章