1. 程式人生 > 其它 >防釣魚郵件-SPF技術介紹

防釣魚郵件-SPF技術介紹

       

 SPF簡介

      

        SPF,全稱為 Sender Policy Framework,即發件人策略框架。

當前 Email 通訊,還是在使用 SMTP 這個協議。SMTP 的全稱為 Simple Mail Transfer Protocol,即「簡單郵件傳輸協議」。正如它的名字鎖暗示的,SMTP 實際上是一個非常簡單(甚至簡陋)的傳輸協議,本身並沒有很好的安全措施。根據 SMTP 的規則,發件人的郵箱地址是可以由發信方任意宣告的。在SMTP 協議制定的時候也許還好,但在垃圾和詐騙郵件橫行的今天,這顯然是極不安全的。

        SPF 出現的目的,就是為了防止隨意偽造發件人。

    

SPF記錄原理

        SPF 記錄實際上是伺服器的一個 DNS 記錄,原理其實很簡單:

        假設郵件伺服器收到了一封郵件,來自主機的 IP 是222.91.123.220,並且聲稱發件人為[email protected]。為了確認發件人不是偽造的,郵件伺服器會去查詢example.com的 SPF 記錄。如果該域的 SPF 記錄設定允許 IP 為222.91.123.200的主機發送郵件,則伺服器就認為這封郵件是合法的;如果不允許,則通常會退信,或將其標記為垃圾/仿冒郵件。

        釣魚郵件雖然可以「聲稱」他的郵件來自example.com,但是他卻無權操作example.com

的 DNS 記錄;同時他也無法偽造自己的 IP 地址。因此 SPF 是很有效的,當前基本上所有的郵件服務提供商(例如 Gmail、QQ 郵箱等)都會驗證它。

SPF語法

        

一條 SPF 記錄定義了一個或者多個 mechanism,而 mechanism 則定義了哪些 IP 是允許的,哪些 IP 是拒絕的。

這些 mechanism 包括以下幾類:

all | ip4 | ip6 | a | mx | ptr | exists | include

每個 mechanism 可以有四種字首:

  • "+"  Pass(通過)

  • "-"  Fail(拒絕)

  • "~"  Soft Fail(軟拒絕)

  • "?"  Neutral(中立)

        查詢時,將從前往後依次查詢每個 mechanism。如果一個 mechanism 包含了要查詢的 IP 地址(稱為命中),則查詢結果由相應 mechanism 的字首決定。預設的字首為+。如果測試完所有的 mechanisms 也沒有命中,則結果為 Neutral。

        除了以上四種情況,還有 None(無結果)、PermError(永久錯誤)和 TempError(臨時錯誤)三種其他情況。對於這些情況的解釋和伺服器通常的處理辦法如下:

下面詳細分析每個Mechanisms

all

表示所有 IP,肯定會命中。因此通常把它放在 SPF 記錄的結尾,表示處理剩下的所有情況。例如:

  • "v=spf1 -all" 拒絕所有(表示這個域名不會發出郵件)

  • "v=spf1 +all" 接受所有(域名所有者認為 SPF 是沒有用的,或者根本不在乎它)

ip4

格式為ip4:<ip4-address>或者ip4:<ip4-network>/<prefix-length>,指定一個 IPv4 地址或者地址段。如果prefix-length沒有給出,則預設為/32。例如:

  • "v=spf1 ip4:192.168.0.1/16 -all"

只允許在 192.168.0.1 ~ 192.168.255.255 範圍內的 IP

ip6

格式和ip4的很類似,預設的prefix-length/128。例如:

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

只允許在 1080::8:800:0000:0000 ~ 1080::8:800:FFFF:FFFF 範圍內的 IP

a 和 mx

這倆的格式是相同的,以a為例,格式為以下四種之一:

  • a

  • a/<prefix-length>

  • a:<domain>

  • a:<domain>/<prefix-length>

會命中相應域名的 a 記錄(或 mx 記錄)中包含的 IP 地址(或地址段)。如果沒有提供域名,則使用當前域名。例如:

  • "v=spf1 mx -all"

允許當前域名的 mx 記錄對應的 IP 地址。

  • "v=spf1 mx mx:deferrals.example.com -all"

允許當前域名和 deferrals.example.com 的 mx 記錄對應的 IP 地址。

  • "v=spf1 a/24 -all"

類似地,這個用法則允許一個地址段。

例如,這是一個比較常見的 SPF 記錄,它表示支援當前域名的 a 記錄和 mx 記錄,同時支援一個給定的 IP 地址;其他地址則拒絕:

  • v=spf1 a mx ip4:173.194.72.103 -all

include

格式為include:<domain>,表示引入<domain>域名下的 SPF 記錄。注意,如果該域名下不存在 SPF 記錄,則會導致一個PermError結果。例如:

  • "v=spf1 include:example.com -all"

即採用和 example.com 完全一樣的 SPF 記錄

exists

格式為exists:<domain>。將對<domain>執行一個 A 查詢,如果有返回結果(無論結果是什麼),都會看作命中。

ptr

格式為ptr或者ptr:<domain>。使用ptr機制會帶來大量很大開銷的 DNS 查詢,所以連官方都不推薦使用它。

SPF記錄查詢

windows:

nslookup -qt=txt example.com

linux:

dig -t txt example.com

其他

spf官網:http://www.openspf.org/

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

其他技術:DKIM,DKIM也是一種防垃圾軟體技術,在國外用的比較多

偽造釣魚軟體:swaks