您是否曾經(jīng)遇到過郵件退信,但是原始郵件不是您發(fā)送的,還誤以為自己郵件賬號被盜?您是否收到過某封郵件,回復過去卻收到退信提示說郵件地址不存在?您是否了解郵箱中的廣告郵件文件夾和垃圾郵件文件夾的區(qū)別?以163郵箱為例,我隨便找了一封垃圾郵件,打開來卻發(fā)現(xiàn)發(fā)件人地址和我的郵箱地址居然如此相似?;貜驮撪]件,很快收到退信,提示郵箱地址不存在:SMTP error, RCPT TO: 550 5.1.1 <klz020_839@motianji52.com>: Recipient address rejected: User unknown in virtual mailbox table。
1 模擬服務器向另一服務器發(fā)信
如果對SMTP協(xié)議和反垃圾郵件有些了解,那么就可以輕松知道上面的情況是如何發(fā)生的。SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,現(xiàn)在世界上服務器之間的郵件通信基本都依賴SMTP協(xié)議。
標準SMTP協(xié)議中定義了發(fā)送郵件使用的命令,必須要的命令有如下幾個:
HELO #客戶端向對方郵件服務器表明自己的身份
MAIL FROM: #表明發(fā)送者的郵件地址
RCPT TO: #說明接收者的郵件地址,如有多個收件人需要重復多次
DATA #說明郵件需要傳輸?shù)臄?shù)據(jù),郵件頭包含在里面,以句點結尾
QUIT #結束本次郵件發(fā)送
下面我們先通過命令行模擬發(fā)送一封郵件到我的163郵箱。首先查找163.com的MX 記錄,找一條MX記錄,然后開始發(fā)信:telnet 163mx01.mxmail.netease.com 25。
登錄郵箱 klz020@163.com ,在垃圾箱里面找到了剛剛發(fā)送的那封郵件。而且是代發(fā)的。收件人和抄送中沒有該地址,說明是密送過來的。對比發(fā)送郵件的命令行和郵件的郵件頭,可以發(fā)現(xiàn)真正的發(fā)件人是mail from 中的郵件地址,所有的收件人都在rcpt to 中體現(xiàn)。但是在郵件中表現(xiàn)出來的形式是由data階段中的from 、to、cc等決定,郵件頭中也只會體現(xiàn)DATA階段的內(nèi)容。這封郵件是偽造的,發(fā)件人( martintest@0contos00.com )不存在,回復該郵件的時候會因為找不到MX記錄而被退信。
一封垃圾郵件發(fā)送完畢,為什么這封偽造的垃圾郵件能夠收進來,又為什么被扔進了垃圾箱而不是收件箱?這一切都是由反垃圾郵件設置決定的。
2 反垃圾郵件簡單介紹
SMTP(Simple Mail Transfer Protocol)正如它的名字描述的那樣,是一個非常簡單(甚至簡陋)的傳輸協(xié)議,本身并沒有很好的安全措施。根據(jù) SMTP 的規(guī)則,發(fā)件人的郵箱地址是可以由發(fā)信方任意聲明的,在垃圾郵件橫行的今天,顯得極不安全,因此需要反垃圾郵件網(wǎng)關進行攔截垃圾郵件。反垃圾郵件基本都圍繞以下幾個方面制定規(guī)則。
2.1 反向解析記錄(PTR記錄)檢查
上面我們已經(jīng)知道了郵件的發(fā)送需要經(jīng)過helo、mail from、rcpt to、data、quit等階段。服務器在建立TCP連接的時候,服務器就知道了發(fā)送服務器的IP地址。在helo階段,helo 后面跟著的是一個helo域名,表明自己的身份。
郵件網(wǎng)關可以對該IP地址進行反向解析,如果反向解析的域名和helo域名相同則通過,否則拒絕連接,這是最helo階段最嚴格的反垃圾郵件設置,部分郵件網(wǎng)關會設置這種嚴格的過濾規(guī)則。
郵件網(wǎng)關可以對IP地址進行反向解析,如果找到了反向解析記錄則通過,不要求與helo域名一致,否則認為在發(fā)送垃圾郵件,拒絕連接。許多國外的郵件網(wǎng)關(尤其是自建的郵件系統(tǒng))都是這種設置。
郵件網(wǎng)關可以不檢查PTR記錄,或者不管是否找到反向解析記錄都默認通過,許多國內(nèi)郵件網(wǎng)關都是這種設置。上面的測試用的垃圾郵件就是因為這一條而通過了這一層的 防御。反向解析用的PTR記錄需要找ISP做,難度較大,而且國內(nèi)的IP地址資源不是很充足,國內(nèi)對PTR記錄檢查不是很嚴格可能和這些原因有關系。
IP地址的反向解析記錄向全球的郵件服務器表明是這個IP地址是有主的,網(wǎng)絡身份是被認可的。許多的垃圾郵件發(fā)送者使用動態(tài)分配的IP地址(上面測試的垃圾郵件就是這種動態(tài)IP地址)或者沒有注冊域名的IP地址來發(fā)送垃圾郵件,以逃避追蹤。因此拒絕接收來自沒有域名的站點發(fā)來的信息可以大大降低垃圾郵件的數(shù)量。
2.2 IP地址信譽度檢查
在helo階段拿到發(fā)件方服務器的IP后,除了PTR檢查,還有一項IP信譽度的檢查,幾乎所有郵件網(wǎng)關都會設置這個檢查。全球有許多反垃圾郵件組織監(jiān)控著全球郵件的收發(fā)情況,對發(fā)送服務器的IP進行實時監(jiān)控,發(fā)現(xiàn)有服務器大量發(fā)送垃圾郵件就會將該IP列入黑名單。這里的垃圾郵件包括釣魚詐騙盜號郵件、病毒木馬郵件、偽造假冒郵件、用戶大量舉報的郵件等。郵件網(wǎng)關一般會查閱其中幾個反垃圾郵件組織的IP地址庫,并依此對郵件發(fā)送方的IP進行信譽度判斷,對信譽度差的IP直接拒絕連接。
為了保護自己郵件服務器的出口IP地址不被列黑,需要注意監(jiān)控服務器不要外發(fā)垃圾郵件,尤其是不要出現(xiàn)賬號被盜,被盜號者利用大量外發(fā)垃圾郵件的情況。上面測試的例子剛好拿到的是一個信譽度還算好(沒有被反垃圾郵件組織列黑)的IP(223.73.86.55),順利通過檢查,但是下面的圖片中的例子就沒有那么好的運氣了。
2.3 SPF(TXT記錄)檢查
如果設置了完備的反向解析記錄檢查和IP信譽檢查,是否就能完全拒絕垃圾郵件呢?我們站在發(fā)送方的角度設想一下,如果某個大型集團由于并購或者業(yè)務發(fā)展出現(xiàn)了多個域名共存的情況(例如 @a.local、 @b.local、 @c.local 都是該集團的郵件域名),郵件服務器同時需要發(fā)送這些域名的郵件,但是helo 域名只能有一個。將這種情景擴大化,許多的中小企業(yè)使用的是企業(yè)郵,那么成千上萬的不同域名的郵件將會從企業(yè)郵的提供商的服務器中發(fā)出,我們假設該企業(yè)郵服務器的出口IP的反向解析記錄為 mx.qiyeyou.local 。既然反向解析為 mx.qiyeyou.local 的服務器可以發(fā)送 @a.local 的郵件,那么反向解析記錄為 mx.weizao.local 的服務器是否也能夠發(fā)送 @a.local 的郵件呢?PTR記錄檢查是無法識別這種偽造郵件的,垃圾郵件發(fā)送者完全可以通過一臺IP已經(jīng)創(chuàng)建PTR記錄的服務器來冒充其他的發(fā)件人發(fā)送垃圾郵件,而且能夠通過反向解析記錄的檢查。在主要依靠郵件溝通的商業(yè)活動中,一旦相信了假冒郵件中的郵件內(nèi)容,可能造成重大的錢財損失。
SPF(Sender Policy Framework)記錄可以有效解決郵件被假冒偽造的問題,其對應的是TXT記錄。郵件的MX記錄的作用是給寄信者指明某個域名的郵件服務器有哪些。SPF的作用跟MX相反,它向收信者表明,哪些郵件服務器是經(jīng)過某個域名認可會發(fā)送郵件的。SPF可以防止別人偽造你來發(fā)郵件,是一個反偽造性郵件的解決方案。
在mail from 階段,發(fā)送服務器要向接收服務器聲明發(fā)件人是誰,這個時候收件方郵件網(wǎng)關就可以對該發(fā)件人郵件地址的域名進行SPF檢查,如果發(fā)件服務器的IP包含在SPF記錄中,那么認為是一封正確的郵件;如果發(fā)件服務器的IP在SPF記錄中沒有找到,則認為是一封偽造假冒的郵件,并且做相應處理。
我們來找一下canway.net的TXT記錄,得到一系列的IP網(wǎng)段,說明canway.net域名的郵件服務器的IP只可能來自于這些網(wǎng)段,其他的IP發(fā)出來canway.net的郵件都是偽造的郵件。收件方郵件網(wǎng)關可以對SPF檢查失敗的郵件自主設置處理辦法,拒收、隔離、添加標記……用自己公網(wǎng)IP的電腦冒充一下canway.net服務器給163郵箱發(fā)送郵件,發(fā)送郵件時會因為SPF檢查失敗而被拒絕連接,這說明163郵箱對于SPF檢查失敗的郵件是直接拒收。有興趣的同學也可以嘗試一下QQ郵箱,看看效果。
查看文章開頭的測試用的垃圾郵件的郵件頭,可以看到spf=none,說明沒有找到發(fā)件人的域名的SPF記錄,也就不存在SPF檢查失敗的說法,所以能夠收進163郵箱。
2.4 郵件內(nèi)容檢查
在DATA階段,傳輸?shù)氖青]件的具體內(nèi)容,包括郵件頭、主題、正文和附件。在這一階段可以針對郵件的內(nèi)容設置各種各樣過濾器。在163郵箱中的廣告郵件文件夾里面的郵件有可能就是在這一步過濾出來的。
2.5 其他檢查
除了上面的反向解析和SPF檢查,現(xiàn)在還有進一步的反垃圾郵件措施。例如微軟推出的Sender ID和雅虎、思科等主導的DKIM。這兩項技術都需要發(fā)件方服務器和收件方服務器雙方支持才能起作用,目前正在推廣應用當中。
2.6 垃圾郵件的判定
垃圾郵件的判定,是上面的各種因素的綜合判定。例如反向解析檢查和SPF檢查均通過但是郵件主題出現(xiàn)“代開發(fā)票”字樣的郵件,也有可能被判為垃圾郵件。不排除有誤判的情況。
3 模擬終端用戶發(fā)信
看到到了這里,您可能仍然會有疑問,我們平時發(fā)送郵件都是需要登錄的,登錄驗證沒有通過是不能發(fā)送郵件的,為什么上面的郵件沒有經(jīng)過驗證這個步驟?
終端用戶使用outlook發(fā)送郵件的過程包含兩個階段,第一階段是outlook連接本域名的郵件服務器發(fā)送郵件,第二階段是郵件服務器將收到的郵件投遞到對方服務器。上面模擬的是第二階段,采用的標準的SMTP協(xié)議,不需要身份驗證。但是第一階段需要進行身份驗證,很多服務器采用的是ESMTP協(xié)議。采用 ESMTP協(xié)議發(fā)信時,服務器會要求用戶提供用戶名和密碼以便驗證身份。在所有的驗證機制中,信息全部采用Base64編碼。驗證之后的郵件發(fā)送過程與 SMTP 方式?jīng)]有兩樣。
我們模擬一次outlook發(fā)信,利用163郵箱向canway郵箱發(fā)送一封郵件。首先找到找到163郵箱的SMTP服務器地址,是smtp.163.com。然后利用telnet工具發(fā)信,端口為25, telnet smtp.163.com 25。
從上面的發(fā)信過程,我們發(fā)現(xiàn)需要認證之后才能發(fā)信,涉及到的命令分別為 helo、auth login、mail from、rcpt to、data、quit,比標準的SMTP多了一步認證的過程。在一次發(fā)信的過程中,mail from、rcpt to、data可以多次使用,從而實現(xiàn)在一個鏈接中一次認證發(fā)送多封郵件的效果。這個認證的步驟可以有效防止垃圾郵件的產(chǎn)生,保護郵件系統(tǒng)IP地址的健康狀態(tài)。需要注意的是保護自己的賬號不要被盜,不被不法分子利用。