郵件拒收與DNS劫持
郵件拒收與DNS 劫持最近接到了一些反饋說,在使用我們的RBL 時(shí),會拒絕所有入站信件。據(jù)我們判斷,應(yīng)該是查詢者使用了具有DNS 劫持的DNS 服務(wù)器所導(dǎo)致。首先,我們先簡單說一下RBL 的原理。目前
郵件拒收與DNS 劫持
最近接到了一些反饋說,在使用我們的RBL 時(shí),會拒絕所有入站信件。據(jù)我們判斷,應(yīng)該是查詢者使用了具有DNS 劫持的DNS 服務(wù)器所導(dǎo)致。
首先,我們先簡單說一下RBL 的原理。目前用于垃圾郵件過濾的RBL 服務(wù),應(yīng)該稱之為基于DNS 的實(shí)時(shí)黑名單查詢,也就是說,這個(gè)服務(wù)是通過DNS 協(xié)議來完成的。
具體而言,當(dāng)一個(gè)客戶端希望查詢某個(gè)IP 地址(如11.22.33.44) 是否在某個(gè)RBL(如cbl.anti-spam.org.cn) 中 是,其實(shí)際上是查詢?nèi)缦碌刂肥欠翊嬖诮馕觯?44.33.22.11.cbl.anti-spam.org.cn. (IP地址逆轉(zhuǎn)附加在RBL 地址后) 。DNS 的解析分為幾種類型,對于RBL 查詢,通常是查詢這個(gè)地址是否存在A 記錄、TXT 記錄或者任意(ANY)記 錄。
如果該地址被列入了這個(gè)RBL ,那么查詢會返回一個(gè)具體的解析結(jié)果,根據(jù)RBL 和查詢的不同,可以返回一段文本,也可以返回一個(gè)或幾個(gè)IP 地 址,也可以同時(shí)返回文本和IP 。返回的文本通常是一個(gè)說明,用來說明這個(gè)IP 地址被列入了哪個(gè)RBL ,具體信息去哪里查詢等。返回的IP 地址并不具有實(shí)際 意義,只是標(biāo)識該查詢有結(jié)果,通常這個(gè)IP 地址是一個(gè)保留IP 段的地址,如127.0.0.1、127.0.0.2等。
如果該地址沒有被列入這個(gè)RBL ,那么該查詢會返回一個(gè)查詢錯(cuò)誤
(NXDOMAIN),表示該地址未列入。DNS 劫持就發(fā)生在這里,具體情況我們下面再詳細(xì)解釋。
舉例說明這個(gè)查詢過程:
當(dāng)查詢的IP 地址不在RBL 中時(shí),返回狀態(tài)為MXDOMAIN 。
# dig 44.33.22.11.cbl.anti-spam.org.cn.
; <<>>DiG 9.3.3rc2 <<>> 44.33.22.11.cbl.anti-spam.org.cn.
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN , id: 58553
;; flags: qrrdra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION:
;44.33.22.11.cbl.anti-spam.org.cn. IN A
;; AUTHORITY SECTION:
cbl.anti-spam.org.cn. 3600 IN SOA cbl.ant
,i-spam.org.cn. wxy.anti-spam.org.cn. 2008061006 14400 3600 14400 3600 ;; Query time: 8 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jun 10 09:28:55 2008
;; MSG SIZE rcvd: 90
當(dāng)查詢的IP 地址在RBL 中時(shí),返回狀態(tài)為NOERRO ,并給出具體的結(jié)果:127.0.8.2(這里使用RBL 的測試地址127.0.0.2,通常RBL 都會提供一個(gè)特定地址,用于測試RBL 是否工作) 。
# dig 2.0.0.127.cbl.anti-spam.org.cn. ; <<>>DiG 9.3.3rc2 <<>> 2.0.0.127.cbl.anti-spam.org.cn.
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR , id: 5032
;; flags: qrrdra; QUERY: 1, ANSWER: 1, AUTHORITY: 6, ADDITIONAL: 0 ;; QUESTION SECTION:
;2.0.0.127.cbl.anti-spam.org.cn. IN A ;; ANSWER SECTION:
2.0.0.127.cbl.anti-spam.org.cn. 10800 IN A 127.0.8.2 ;; AUTHORITY SECTION:
cbl.anti-spam.org.cn.
i-spam.org.cn.
cbl.anti-spam.org.cn.
i-spam.org.cn.
cbl.anti-spam.org.cn.
i-spam.org.cn.
cbl.anti-spam.org.cn.
i-spam.org.cn.
cbl.anti-spam.org.cn.
i-spam.org.cn.
cbl.anti-spam.org.cn.
i-spam.org.cn. 10800 IN NS ns1.ant 10800 IN NS ns3.ant 10800 IN NS ns4.ant 10800 IN NS ns5.ant 10800 IN NS ns7.ant 10800 IN NS ns8.ant
;; Query time: 3 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jun 10 09:31:01 2008
;; MSG SIZE rcvd: 172
,查詢TXT 記錄的結(jié)果如下(通常收到由于RBL 列入而退回的信件中的退信消息就是來自這里的) :
# dig 2.0.0.127.cbl.anti-spam.org.cn. TXT
; <<>>DiG 9.3.3rc2 <<>> 2.0.0.127.cbl.anti-spam.org.cn. TXT
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR , id: 21173
;; flags: qrrdra; QUERY: 1, ANSWER: 1, AUTHORITY: 6, ADDITIONAL: 0 ;; QUESTION SECTION:
;2.0.0.127.cbl.anti-spam.org.cn. IN TXT ;; ANSWER SECTION:
2.0.0.127.cbl.anti-spam.org.cn. 10800 IN TXT "Mail from 127.0.0.2 refused, see http://anti-spam.org.cn/Rbl/Query/Result?IP=127.0.0.2" ;; AUTHORITY SECTION:
cbl.anti-spam.org.cn.
i-spam.org.cn.
cbl.anti-spam.org.cn.
i-spam.org.cn.
cbl.anti-spam.org.cn.
i-spam.org.cn.
cbl.anti-spam.org.cn.
i-spam.org.cn.
cbl.anti-spam.org.cn.
i-spam.org.cn.
cbl.anti-spam.org.cn.
i-spam.org.cn. 10675 IN NS ns5.ant 10675 IN NS ns7.ant 10675 IN NS ns8.ant 10675 IN NS ns1.ant 10675 IN NS ns3.ant 10675 IN NS ns4.ant
;; Query time: 37 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Tue Jun 10 09:33:06 2008
;; MSG SIZE rcvd: 255
在明白了RBL 查詢的原理后,我們來看一下RBL 劫持的發(fā)生原因。
由于國內(nèi)很多用戶在使用電信企業(yè)的線路連接互聯(lián)網(wǎng)時(shí),都會使用接入的ISP 所提供的DNS ,有的是明確設(shè)置使用的,有的是通過PPPoE 或 DHCP分配使用的。最近一些年來,電信企業(yè)為了引導(dǎo)用戶訪問其增值站點(diǎn)或合作站點(diǎn),通過會對其DNS 做一些修改,在接收到一個(gè)不存在結(jié)果的DNS 查詢 時(shí),總是返回一
,些特定的IP 地址,使用戶訪問到這些增值站點(diǎn)。比如你在使用ADSL 上網(wǎng)時(shí),如果隨便在瀏覽器的地址欄中任意敲入一個(gè)無效的域名,通常都會 給你重定向到電信企業(yè)自己的門戶站點(diǎn)。
一般而言,這種行為對于用戶沒有多大的損害,最多只是扭曲了用戶意志,強(qiáng)制其訪問另外一個(gè)站點(diǎn)而已。但是,對于使用RBL 來防范垃圾郵件的用 戶,這種DNS 劫持就會帶來較大的麻煩。在這種情況下,所有的DNS 查詢都會返回一個(gè)有效的結(jié)果,換言之,無論任何發(fā)來郵件的IP 地址,都會被認(rèn)為列入到 了RBL 中,用戶將接收不到任何外部郵件。
那么如何應(yīng)對這種情況呢? 有兩種辦法:
一是使用一個(gè)可信的,沒有被DNS 劫持的DNS 服務(wù)器。國內(nèi)電信企業(yè)的DNS 被劫持的情形比較多,尤其是做接入的ISP 的DNS 服務(wù)器,很多都 存在劫持問題??梢钥紤]使用國外的公開DNS 、或者一些未劫持的DNS 服務(wù)器。但是要注意的是,不能使用不支持公開解析請求的DNS ,即那種只解析特定域 名的DNS 服務(wù)器是不能用來解析其他域名的; 類似的,根域服務(wù)器(*.ROOT-SERVERS.NET)也是不提供這種公開解析請求的功能的??梢酝ㄟ^ nslookup或dig 以及其它工具來測試一個(gè)DNS 服務(wù)器是否可以提供公開解析功能,以及是否被劫持。 查詢一個(gè)DNS 服務(wù)器是否提供公開查詢可以做如下測試:
# dig sina.com. @A.ROOT-SERVERS.NET.
; <<>>DiG 9.3.3rc2 <<>> sina.com. @A.ROOT-SERVERS.NET.
; (2 servers found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR , id: 63123
;; flags: qrrd; QUERY: 1, ANSWER: 0, AUTHORITY: 13, ADDITIONAL: 14 ;; QUESTION SECTION:
;sina.com. IN A ;; AUTHORITY SECTION:
com.
H.GTLD-SERVERS.NET.
com.
I.GTLD-SERVERS.NET.
com.
J.GTLD-SERVERS.NET.
com.
K.GTLD-SERVERS.NET.
com.
L.GTLD-SERVERS.NET. 172800 IN NS 172800 IN NS 172800 IN NS 172800 IN NS 172800 IN NS
,com. com. com. com. com. M.GTLD-SERVERS.NET. A.GTLD-SERVERS.NET. B.GTLD-SERVERS.NET. C.GTLD-SERVERS.NET. 172800 IN NS 172800 IN NS 172800 IN NS 172800 IN NS 172800 IN NS D.GTLD-SERVERS.NET. com. E.GTLD-SERVERS.NET. com. F.GTLD-SERVERS.NET. com. G.GTLD-SERVERS.NET.
;; ADDITIONAL SECTION: A.GTLD-SERVERS.NET. 172800 .6.30
A.GTLD-SERVERS.NET. 172800 :a83e::2:30
B.GTLD-SERVERS.NET. 172800 3.14.30
B.GTLD-SERVERS.NET. 172800 :231d::2:30
C.GTLD-SERVERS.NET. 172800 6.92.30
D.GTLD-SERVERS.NET. 172800 1.80.30
E.GTLD-SERVERS.NET. 172800 2.94.30
F.GTLD-SERVERS.NET. 172800 5.51.30
G.GTLD-SERVERS.NET. 172800 2.93.30
H.GTLD-SERVERS.NET. 172800 4.112.30
I.GTLD-SERVERS.NET. 172800 3.172.30
J.GTLD-SERVERS.NET. 172800 8.79.30
K.GTLD-SERVERS.NET. 172800 2.178.30
172800 IN 172800 IN 172800 IN A AAAA A AAAA A A A A A A A A A NS NS NS
192.5 192.3 192.2 192.3 192.1 192.3 192.4 192.5 192.4 192.4 192.5
IN IN 2001:503 IN IN 2001:503 IN IN IN IN IN IN IN IN IN
,L.GTLD-SERVERS.NET. 172800 IN A 192.4
1.162.30
;; Query time: 267 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Tue Jun 10 09:58:33 2008
;; MSG SIZE rcvd: 498
在上面這個(gè)測試中,我們使用根域服務(wù)器來查詢 sina.com這個(gè)域名,返回的結(jié)果是NOERROR ,但是沒有ANSWER 區(qū)來給出具體的IP 地址。這表明該服務(wù)器
(A.ROOT-SERVERS.NET.)不支持公開查詢。
# dig sina.com. @202.106.196.115
; <<>>DiG 9.3.3rc2 <<>> sina.com. @202.106.196.115
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR , id: 47283
;; flags: qrrdra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3 ;; QUESTION SECTION:
;sina.com. IN A ;; ANSWER SECTION:
sina.com. 1978 IN A 71.5.7.191
;; AUTHORITY SECTION:
sina.com. 1976 IN NS ns1.sina.com.cn.
sina.com. 1976 IN NS ns2.sina.com.cn.
sina.com. 1976 IN NS ns3.sina.com.cn.
;; ADDITIONAL SECTION:
ns1.sina.com.cn. 84804 IN A 202.106.184.166
ns2.sina.com.cn. 84804 IN A 6
1.172.201.254
ns3.sina.com.cn. 84804 IN A 202.108.44.55
;; Query time: 2 msec
,;; SERVER: 202.106.196.115#53(202.106.196.115)
;; WHEN: Tue Jun 10 11:19:13 2008
;; MSG SIZE rcvd: 155
在上面這個(gè)測試中,我們使用了一個(gè)公開的DNS 服務(wù)器來查詢sina.com 這個(gè)域名,返回了正確的解析結(jié)果。說明該服務(wù)器支持公開查詢。
當(dāng)使用該服務(wù)器查詢一個(gè)不存在的域名時(shí),如查詢sina11111.com : # dig sina11111.com. @202.106.196.115
; <<>>DiG 9.3.3rc2 <<>> sina11111.com. @202.106.196.115
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN , id: 48272
;; flags: qrrdra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION:
;sina11111.com. IN A ;; AUTHORITY SECTION:
com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1213068006 1800 900 604800 900
;; Query time: 697 msec
;; SERVER: 202.106.196.115#53(202.106.196.115)
;; WHEN: Tue Jun 10 11:19:22 2008
;; MSG SIZE rcvd: 104
這里返回了NXDOMAIN 結(jié)果,表明該服務(wù)器沒有被DNS 劫持。
而當(dāng)我們使用了一個(gè)被劫持的DNS(在筆者測試期間還存在劫持情形) 來查詢一個(gè)不存在的域名:sina1234122323.com. ,查詢返回結(jié)果是一個(gè)特定的IP : 220.250.64.22 (這是一個(gè)網(wǎng)通的地址) 。
# dig sina1234122323.com. @210.22.70.3
; <<>>DiG 9.3.3rc2 <<>> sina1234122323.com. @210.22.70.3
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR , id: 43129
,;; flags: qrrdra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0 ;; QUESTION SECTION:
;sina1234122323.com. IN A
;; ANSWER SECTION:
sina1234122323.com. 3600 IN A 220.250.64.22
;; AUTHORITY SECTION:
com. 900 IN SOA a.gtld-servers.net. nstld.verisign-grs.com. 1213069571 1800 900 604800 900
;; Query time: 2389 msec
;; SERVER: 210.22.70.3#53(210.22.70.3)
;; WHEN: Tue Jun 10 11:45:29 2008
;; MSG SIZE rcvd: 125
當(dāng)使用該DNS 查詢一個(gè)存在的域名是能正確返回其IP 地址。這種針對不存在的域名強(qiáng)制劫持到一個(gè)特定的IP 的行為導(dǎo)致了RBL 的查詢返回錯(cuò)誤。
二是對RBL 查詢結(jié)果進(jìn)行驗(yàn)證?;旧纤械腞BL 服務(wù)都會返回特定的查詢結(jié)果,即每次都返回同樣的一個(gè)或幾個(gè)IP 地址,而且這種IP 地址通常 都是特定的保留IP ,不會出現(xiàn)在正常的DNS 查詢中,如127.0.0.2、127.0.8.2等。目前絕大多數(shù)支持RBL 查詢的郵件服務(wù)器都支持對查詢 結(jié)果進(jìn)行驗(yàn)證,你可以根據(jù)RBL 服務(wù)所公示的查詢結(jié)果來設(shè)置你的RBL 查詢。
本站所提供的RBL 的查詢驗(yàn)證碼如下:
名稱 地址 測試地址 返回狀態(tài)碼 CBL cbl.anti-spam.org.cn 2.0.0.127.cbl.anti-spam.org.cn. 127.0.8.2 因此,鑒于國內(nèi)DNS 劫持的情形日益嚴(yán)重,在使用RBL 服務(wù)時(shí),要確認(rèn)自己的DNS 是否存在劫持; 而且最好設(shè)置驗(yàn)證碼,這樣即便DNS 當(dāng)時(shí)未被劫持,將來發(fā)生了劫持也不會影響到郵件服務(wù)。