201408061638DNS 設定 spf 記錄 - Sender Policy Framework

DNS 提供網域名稱與IP位址對應的查詢,除了基本的 A、MX、CNAME、PTR、SRV 記錄外,還有一個 TXT 記錄,他可提供文字資訊給本身網域以外的來源一些額外的資訊,像Google 對於網站的驗證可以透過 TXT 記錄的宣告,及今天要說的 SPF ( Sender Policy Framework ) 也是在 TXT 記錄裡去宣告。

類似的設定如下:
DomainA          IN      A               140.113.12.9
                      IN      MX             10     DomainA.your.domain.
                      IN      TXT            "v=spf1 a mx -all"
aliasname        IN      CNAME       DomainA.your.domain.


那 SPF 到底可以拿來幹嘛?
在 openspf 寫到「Domains define zero or more mechanisms. Mechanisms can be used to describe the set of hosts which are designated outbound mailers for the domain.」
用白話一點的方式來說
SPF 可以讓 收信端主機 根據來信中的 寄件者郵件網域,主動去寄信端所屬的DNS核對SPF記錄,當寄件者郵件網域 不同/不合法 於寄信主機網域時,可以丟棄、退信、或特別標註該封郵件。
SPF 可以阻擋別人冒用你的網域寄信。

Microsoft 針對 SPF 給了說明「http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard/ 」可以以圖示來理解SPF的運作方式。

 

 ------------------------------------------------------------------------------

底下舉個例子來說明

"v=spf1 +a +mx -all"

其中的 v=spf1 是表示 spf 所使用的版本

其中的符號 +  - 之外還有 ~ 跟?   分別的意思為 

"+":Pass  代表允許,為預設的屬性
"-":Fail  代表拒絕,-all 表示除了有條列出來的主機允許其他都拒絕,標式為 Hard Fail 不會接受該信件
"~":SoftFail  代表拒絕,~all 表示除了有條列出來的主機允許其他都拒絕,標式為 Soft Fail 還是接收了該信件
"?":Neutral 代表可能還有其他網域,收件主機還是會接收該信件。

Result Explanation Intended action
Pass The SPF record designates the host to be allowed to send accept
Fail The SPF record has designated the host as NOT being allowed to send reject
SoftFail The SPF record has designated the host as NOT being allowed to send but is in transition accept but mark
Neutral The SPF record specifies explicitly that nothing can be said about validity accept
None The domain does not have an SPF record or the SPF record does not evaluate to a result accept
PermError A permanent error has occured (eg. badly formatted SPF record) unspecified
TempError A transient error has occured accept or rejec

 

其中的  amx 還有 ptr、exists、include、redirect、exp、ip4、ip6   
a 表示比對 DNS 記錄中的 A record,若沒指定以該主機的網域作為檢查
mx 表示比對 DNS 記錄中的 MX record,若沒指定以該主機的網域作為檢查
詳細請參考「http://www.openspf.org/SPF_Record_Syntax#a 」的例子與說明

 

假設你的網域名稱為 super.x.com 而你單位的 mail 主機有 140.112.12.9  跟 140.126.12.64 這時你的 spf 可以設定為

"v=spf1 ip4:140.112.12.9  ip4:140.112.12.64  -all"  表示只允許這兩個IP可以用這個網域來送出信件
"v=spf1 a:smtp1.super.x.com a:smtp2.super.x.com  -all"

假設你的 server farm 使用一個 class-C 且都會透過這個網域名稱發出信件,那麼可以用
"v=spf1 ip4:140.112.12.9/24  -all"
"v=spf1 a:super.x.com/24  -all"

改完設定當然也要修改SOA的序號,跟重新啟動 named 囉!! sudo /etc/init.d/named restart  或   sudo service named restart

如果沒有那麼有保握,或者實際情形還是可能有其他主機透過這個網域送出信件,那麼保守一點,就像底下台大的例子一樣使用「~all」 而不要 -all 囉

--------------------------------------------------------------

如果你還是不清楚該怎麼設定 SPF 你可以藉由底下的精靈,來幫助你

微軟:http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard/default.aspx 
openspf :http://www.openspf.org/Tools#wizard?mydomain=&x=35&y=6 

---------------------------------------------------------------

最後怎麼查詢 TXT記錄 跟 SPF 資料呢?

nslookup -q=txt  domain
例如: nslookup -q=txt ntu.edu.tw  會查出
Non-authoritative answer:
ntu.edu.tw text = "v=spf1 a:mail.ntu.edu.tw a:ccms.ntu.edu.tw a:smtps.ntu.edu.tw a:wmail1.cc.ntu.edu.tw a:wmail2.cc.ntu.edu.tw ~all"
ntu.edu.tw text = "MS=ms27735216"
ntu.edu.tw text = "izdpbvk+XSnOw656bWQwMON3JSxxraiL3DHEigt3QQPTF+GXtWN+EBx1QoaUb4/rh201r9FPk5VgE/dxzJIKXQ=="

如果以 dig -t txt domain 來查詢

例如:dig -t txt ntu.edu.tw

;; ANSWER SECTION:
ntu.edu.tw. 85622 IN TXT "izdpbvk+XSnOw656bWQwMON3JSxxraiL3DHEigt3QQPTF+GXtWN+EBx1QoaUb4/rh201r9FPk5VgE/dxzJIKXQ=="
ntu.edu.tw. 85622 IN TXT "v=spf1 a:mail.ntu.edu.tw a:ccms.ntu.edu.tw a:smtps.ntu.edu.tw a:wmail1.cc.ntu.edu.tw a:wmail2.cc.ntu.edu.tw ~all"
ntu.edu.tw. 85622 IN TXT "MS=ms27735216"

 

回應
Google Search
Google
平均分數:0 顆星
投票人數:0
我要評分:
Google