一、前言:

SPF功能在於讓收件者端郵件伺服器根據寄件者網域,查找寄件者DNS Server TXT所定義之來源IP,與信件真實來源IP比對是否吻合,

決定是否接收或拒絕,避免駭客偽造寄件人網域寄信。


1.事先準備工作,請確認貴公司郵件主機對外IP有哪些。


2.對外發佈DNS主機新增TXT紀錄。


二、SPF格式  & 設定方式:


範例:

v=spf1 ip4:203.69.82.115 ip4:203.69.82.114 ip4:203.69.82.112 -all
v=spf1 a mx -all
v=spf1 redirect=_spf.google.com
v=spf1 include:_netblocks.google.com include:_netblocks2.google.com ~all
v=spf1 ip4:216.239.32.0/19 ip4:64.233.160.0/19 ~all


解說 :

v=spf1 ip4:203.69.82.115 ip4:203.69.82.114 ip4:203.69.82.112 -all
表示只允許這三個IP(對外IP)可以用這個網域來送出信件
v=spf1 a mx -all
v=spf1 redirect=_spf.google.com
v=spf1 include:_netblocks.google.com include:_netblocks2.google.com ~all
v=spf1 ip4:216.239.32.0/19 ip4:64.233.160.0/19 ~all



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

' v=spf1 ':目前所使用版本,請使用spf1即可。
' a ' :比對 dns 中的 a 紀錄,若沒有指定哪個網域名,則以目前的的網域為主。
' mx ' :比對 dns 中的 mx 紀錄,若沒有指定哪個網域名,則以目前的網域為主。
' ptr ' :比對 dns 中的 ptr 紀錄,若沒有指定哪個網域名,則以目前的網域為主。
' redirect ' :轉導向該指定hostname txt紀錄。
' include ' :匯入(涵蓋)該指定hostname txt紀錄。
' -all ':若比對失敗,拒絕該信件。(fail,建議使用)
' ~all ':若比對失敗,選擇是否接收。(soft fail)



建議盡量一行寫完 txt record,避免對方SPAM相容性無法找到多行,且一行中可不同參數混合使用,舉例:( @aol.com )

"v=spf1 ip4:204.29.186.0/23 include:spf.constantcontact.com include:aspmx.sailthru.com include:mail.zendesk.com include:_ipspf.yahoo.com ~all"


三、DNS Server設定方式:


1.以Windows Server中的 DNS Server 設定範例:


1)在網域名稱處按右鍵,選擇「新增其他記錄」


2)資源記錄類型選擇「文字(TXT)」


3)文字欄位填入參數設定(請依貴公司需求自行設計)若有多筆IP等需填入,請勿斷行,空格隔開接續填入。



四、檢視設定是否正確:


方法1.

http://www.kitterman.com/spf/validate.html

輸入貴公司網域:

點選”Get SPF Record(if any)”


測試結果:


方法二:

Console端 確認是否已可查找到TXT記錄:

$ dig m2ktrial.openfind.com.tw txt

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.17.rc1.el6_4.6 <<>> m2ktrial.openfind.com.tw txt
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 6026
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;m2ktrial.openfind.com.tw.      IN      TXT

;; ANSWER SECTION:
m2ktrial.openfind.com.tw. 3600  IN      TXT     "v=spf1 ip4:211.20.183.163 ip4:211.20.183.164 ip4:211.20.183.161 ip6:2001:b034:0001:1600:0501:2576:ffff:ff00 ip6:2001:b034:0001:1600:0501:2576:ffff:ff01 ip6:2001:b034:0001:1600:0501:2576:ffff:ff02 -all"

;; Query time: 4 msec
;; SERVER: 168.95.1.1#53(168.95.1.1)
;; WHEN: Fri Sep 22 18:02:03 2017
;; MSG SIZE  rcvd: 255


方法三:

MG console端檢測對方來信來源IP是否可通過SPF驗證:(工具維修中,暫停使用!! )


底層測試工具(請使用webmail權限執行):


/mailgates/mg/util/mg_spf_test
usage: mg_spf_test email [-q] [-c conf_path] -i ip -d domain - check email SPF
        -q: quiet mode
        -c: specify the spf configure file path(default: /mailgates/mg/etc/spf.conf

       mg_spf_test set [-s tag=value] [-c conf_path]- set SPF
        -s: set the conf's value by (tag=value;tag2=value2)
        -c: specify the spf configure file path(default: /mailgates/mg/etc/spf.conf
          ex. mg_spf_test set -s 'spf_check=xxxxxx;'
        valid tags: spf_check, log_path, log_level


測試驗證:待續.....


五、MG啟用方式:


MG啟用SPF驗證,若信件IP來自非對方DNS TXT宣告之IP,判斷為SPAM or REJECT,對方TXT若無設定,此項驗證則PASS:



六、技術小學堂:


1.MG底層conf:

/mailgates/mg/etc/spf.conf
spf_check=PASS REJECT PASS
enabled=0
mg=1


spf_check=

這行設定了三個 hit action,

第一個表示 當 SPF check 回傳值是 Pass 時, 所執行的動作;

第二個表示 當 SPF check 回傳值是 Fail 時, 所埶行的動作;

第三個表示 當 SPF check 回傳值為其他(none, softfail, error, neutral, unknown)時, 所執行的動作


2. SPF 2.0:

https://zh.wikipedia.org/wiki/Sender_ID

http://www.openspf.org/SPF_vs_Sender_ID