字體:  

如何在 DNS Server 設定 SPF 提高郵件正確送達

seeyou 發表於: 2013-11-29 10:06 來源: ADJ網路控股集團


SPF 說明:
SPF 的全寫是 Sender Policy Framework,它是一個可以保障域名持有人,免被 spammers 冒充發信的一種機制。做法是在域名
的 DNS 內加入 SPF record,說明這個域名只會透過那些主機發送郵件.

SPF 是用識別寄件者的來源 IP 位址是否偽造的技術, 這是放在 DNS Server 上的一種技術, 向人說明 adj.idv.tw 寄出的郵件, 其來源
IP 位址都會 111.222.111.222。假設, xxx@adj.idv.tw 寄給 yahoo 時, 他會去看 adj.idv.tw 的 DNS Server 所宣稱的來源 IP 位址與
目前的來源 IP 位址是否一致, 是的話, 這應該就是可信的寄件者。

SPF寄信者來源管理規則

SPF主要的功能是讓收信端郵件伺服器根據來信中寄件者網域資料主動去向寄信端所屬的DNS伺服器核對其SPF紀錄。收釁端郵件伺服器再依照比對結果做接收與否的決定。

SPF 主要的目的就是避免別人冒用你的網域名稱寄信。

由於同一個網域名稱可能透過多台的 mail server 或是ISP寄信,所以只靠反解的方式很薄弱。因此就有網域驗證的觀念出來了。包括 domain key 和 SPF 這兩大類,都必須在網域名稱的DNS記錄中加入一筆記錄。
 
透過 SPF (或是 Sender ID) 可以宣告這個網域名稱的信件可能透過哪幾個 IP或網址寄出,其他的就是非法的。

SPF 記錄中的參數請參照下面的解說:

1. ' a ' :比對 dns 中的 a 紀錄,若沒有指定哪個網域名,則以目前的的網域為主。
2. ' mx ' :比對 dns 中的 mx 紀錄,若沒有指定哪個網域名,則以目前的網域為主。
3. ' ptr ' :比對 dns 中的 ptr 紀錄,若沒有指定哪個網域名,則以目前的網域為主。
4. ' ~all ':參數若比對失敗,信件仍能寄進來,但該信件標題會加註 'SPF-Failure' ,並置於垃圾信件資料夾中。

加入上述參數後,SPF 紀錄能提供「收信端郵件伺服器」更多資訊去對從您網域寄出的郵件做更正確的辨識。

底下是 adj SPF 的範例

QUOTE:

IN TXT "v=spf1 a mx ip:11.22.11.22 include:_spf.adj.idv.tw -all"


完成之後重新啟動 service named restart


設定反查

相較於正查: Host Name / Domanin --> IP Address
所謂的反查就是 IP Address --> Host Name / Domain Name

有一些 Mail server 會透過檢查反查來判定 SPAM 的分數。
設定反查在某些狀況可以降低被誤判的機率。

如果公司自己有自己的 DNS server,就自己改
(記得 ns1, ns2, ns3 ... 所有 ns 都要改)

如果是請 IDC/ISP 代管,
大部分的 IDC/ISP (Hinet/Seednet) 都可以請工程師幫忙設定反查,應該也免費

查詢指令 Sample:
# host 168.95.1.1
1.1.95.168.in-addr.arpa domain name pointer dns.hinet.net.

有回應這個代表有IP反解...這樣 SPF 才會正常

再來使用dig 指令查詢是否設定正常
# dig -t TXT adj.idv.tw

;; ANSWER SECTION:
adj.idv.tw. 3600 IN TXT "v=spf1 include:aspmx.googlemail.com include:_spf.adj.idv.tw -all"

最後再檢查收信狀況

舉例,成功的設定 SPF 會讓 Google Mail Gmail 更不會誤判垃圾信件
Example BEFORE-SET-SPF-TXT "NEUTRAL"

未設定之前,判定為「中立」 

QUOTE:


Received-SPF: neutral (google.com: 74.125.82.52 is neither permitted nor denied by domain of XXXXXXXX) client-ip=74.125.82.52;
Authentication-Results: mx.google.com; spf=neutral (google.com: 74.125.82.52 is neither permitted nor denied by domain of XXXXXXXXX) smtp.mail=XXXXXXXXX

Example AFTER-SET-SPF-TXT "PASS"

設定之後,判定為「認證通過」

QUOTE:


Received-SPF: pass (google.com: domain of XXXXXXXXX designates 74.125.82.52 as permitted sender) client-ip=74.125.82.52;
Authentication-Results: mx.google.com; spf=pass (google.com: domain of XXXXXXXXX designates 74.125.82.52 as permitted sender) smtp.mail=XXXXXXXXXXX

大功告成~~