http://www.openspf.org/Logo |
這篇文章將介紹如何在發信的時候,讓信件符合 SPF 的規範。
這兒要介紹的 SPF,當然不是防曬係數,是 Sender Policy Framework (寄件者策略架構) 的簡稱,用來識別哪些郵件伺服器,可以使用指定的網域名稱寄送 email,也就是可以避免信件標題被偽造,詳細的介紹,可以參考 Google 的說明或維基百科。
目前 SPF,Gmail 、Yahoo mail、Hotmail 都會使用到。
在繼續以下的文章之前,如果您嘗試實做 SPF,請確認您已經有了以下技能:
- 除了 A 記錄以外,還會正確的設定其他 DNS 記錄。
- 你正要設定的 DNS,已經設定好了兩筆正確的 NS 記錄。
- 你正要設定的 DNS,除非該 domain 不提供 mail,否則至少已經有了一筆 MX 記錄 (但是不提供 mail 的話,似乎就用不到 SPF 了)。
- 會簡單的操作 nslookup 或者 dig。
- 看的懂以上 4 種技能。
Received-SPF: pass (google.com: domain of nobody@web1.foo.com designates X.Y.188.217 as permitted sender) client-ip=X.Y.188.217;如果是 Yahoo mail,看到的是:
Received-SPF: pass (domain of foo.com designates X.Y.188.217 as permitted sender)在 Hotmail (outlook.com、livemail.tw .. 我也搞不懂微軟到底有多少個名字)看到的就是底下這樣:
Authentication-Results: hotmail.com; spf=pass (sender IP is X.Y.188.217) smtp.mailfrom=kenchen@foo.com; dkim=pass (testing mode) header.d=foo.com; x-hmca=pass header.id=kenchen@foo.comSPF 的設定很簡單,只要修改 name server 的設定就可以了,建議你設定的時候,把 TTL 縮短到最短,這樣如果設定錯了,也不用等上幾天幾夜,才會換回正確的設定 (如果又錯了,那就又要幾天幾夜了)。
設定
SPF 的設定相當簡單,只有四個步驟:- 設定 IP 反查
- 設定 TXT 記錄
- 檢查設定
IP 反查
反查通常無法自己設定,必須由發放 IP 的單位設定,例如 ISP 或者 NOC,設定完之後,也需要一段時間才會更新到所有的 name server,因此你在查詢時,最好指定發放 IP 單位的 name server 去查詢,或者乾脆等個一天再進行以下步驟。繼續之前,請 double check:
root@foo:~ # drill -x X.Y.188.217 ;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 16362 ;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;; 217.188.Y.X.in-addr.arpa. IN PTR ;; ANSWER SECTION: 217.188.Y.X.in-addr.arpa. 21599 IN PTR foo.com. ;; AUTHORITY SECTION: ;; ADDITIONAL SECTION: ;; Query time: 192 msec ;; SERVER: 8.8.4.4 ;; WHEN: Thu Jun 26 02
重點在中間 PTR 那一段,這樣子就代表反查已經設定 OK,可以接著下一步。
TXT 記錄
請參考 http://www.openspf.org/SPF_Record_Syntax 找出適合您的狀況,通常會看這篇文章設定 SPF 的話,狀況都不會太複雜,只有一個特別的狀況,很多使用者喜歡透過 Gmail 收發信件 (因為好用呀!),所以這時候寄信的 server 就包括 Gmail 的 server,必須將這些 server 包含到 TXT 的記錄裡面,可以參考 https://support.google.com/a/answer/178723?hl=zh-Hant 的說明。一般的狀況通常是 "v=spf1 mx -all",Gmail 的設定是 "v=spf1 include:_spf.google.com ~all",加在一起做成撒尿丸子 "v=spf1 mx include:_spf.google.com -all" 就可以了。
或者到 https://www.spfwizard.net/,資料填一填,也可以產生 SPF 的設定。
在 DNS 中,加上這筆 TXT 記錄就可以了,記得 TTL 先設定短一點,這樣如果有錯誤,可以很快更正。
加上後,再查詢 check 一次:
root@foo:~ # drill txt foo.com ;; ->>HEADER<<- opcode: QUERY, rcode: NOERROR, id: 16362 ;; flags: qr rd ra ; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;; phoebusart.com. IN TXT ;; ANSWER SECTION: foo.com. 599 IN TXT "v=spf1 mx include:_spf.google.com -all" ;; AUTHORITY SECTION: ;; ADDITIONAL SECTION: ;; Query time: 211 msec ;; SERVER: 8.8.4.4 ;; WHEN: Thu Jun 26 02:54:43 2014 ;; MSG SIZE rcvd: 83
測試
同樣的,先別急著用 Gmail ... 測試,可以到 http://tools.bevhost.com/spf/ 測試,依序從頭到尾填入他要的資料,最後按下 SPF Check,看結果是不是 Pass 就可以了。如果是 Pass,就可以實際寄信到 Gmail、Yahoo mail、Microsoft Live Mail 去測試,應該不會有問題。
測試 OK 後,記得回到 name server 的設定,把 TXT 的 TTL 時間延長。
還有一篇文章,是設定 domain keys 的,建議您 domains key 和 SPF 兩項都要設定。