實時黑名單技術
概述
為了有效地拒絕來自惡意的垃圾郵件來源站點和/或被利用的垃圾郵件來源站點所發來的垃圾郵件,最直接和有效的辦法就是拒絕該來源的連接。
雖然從理論上說,這樣也有可能會拒絕掉來自該站點的正常郵件,從而造成郵件不能正常的投遞,但是有以下理由支持我們這樣做:
* 接收任何來源的郵件則有可能導致郵箱中充滿了垃圾郵件,影響了郵件伺服器的性能和容量以及帶來高額的帶寬費用,而且導致了收取郵件的人浪費了不必要時間處理這些垃圾郵件;
* 通過程序過濾垃圾郵件不但從技術上不能保證完全可靠,而且會對伺服器帶來很多負載;
* 通過人工一一分揀郵件基本上是不可行的,不但從工作量上不可承受,而且有可能會帶來隱私問題;
* 通過拒絕惡意的垃圾郵件站點的連接,可以使垃圾郵件的實際發送量下降,從而縮小了垃圾郵件市場和壓制了垃圾郵件的發展;
* 通過拒絕被利用的垃圾郵件來源站點的連接,可以使該站點的管理員能充分認識到被利用所帶來的後果,從而消除被利用的條件。
綜合以上利弊,我們認為,通過將確認后的垃圾郵件來源站點(無論是否是惡意與否)放入一個黑名單(Blackhole List),然後通過發布該名單來保護郵件伺服器不受到黑名單中站點的侵擾確實是一個目前對抗日益嚴重的垃圾郵件的行之有效的方法。
目前在黑名單技術上最流行的是實時黑名單(Realtime Blackhole List,簡稱RBL)技術。通常該技術是通過DNS方式(查詢和區域傳輸)實現的。目前國外流行的幾個主要的實時黑名單伺服器都是通過DNS方式提供的,如Mail-Abuse的RBL、RBL+等。國內目前只有本站發布了公開的RBL服務(參見 CBL/CDL/CBL+)。
實時黑名單實際上是一個可供查詢的IP地址列表,通過DNS的查詢方式來查找一個IP地址的A記錄是否存在來判斷其是否被列入了該實時黑名單中。舉例來說,比如如果要判斷一個地址11.22.33.44是否被列入了黑名單,那麼使用黑名單服務的軟體會發出一個DNS查詢到黑名單伺服器(如 cbl.anti-spam.org.cn),該查詢是這樣的:查找 44.33.22.11.cbl.anti-spam.org.cn 是否存在A記錄?如果該地址被列入了黑名單,那麼伺服器會返回一個有效地址的答案。按照慣例,這個地址是127.0.0.0/8內的地址如 127.0.0.2(之所以使用這個地址是因為127/8這個地址段被保留用於打環測試,除了127.0.0.1用於打環地址,其它的地址都可以被用來做這個使用,比如有時候還用127.0.0.3等。)。如果沒有列入黑名單,那麼查詢會得到一個否定回答(NXDOMAIN)。
有時候,由於郵件伺服器非常繁忙,而郵件伺服器每收到一封信就要做一個查詢,雖然單個查詢非常快,但是過多的對黑名單伺服器的查詢會導致查詢響應遲緩。在這種情況下,可以通過使用DNS的區域傳輸,將黑名單伺服器的數據傳輸到本地的DNS伺服器,然後對本地的DNS伺服器進行查詢即可。區域傳輸可以設置為手工更新、定時更新或自動更新等方式,這依賴於你的應用。
黑名單伺服器的DNS查詢和區域傳輸,並不是都可以隨意使用的。有些伺服器可供任何人查詢和區域傳輸,而有些只對特定的用戶開放。通常實時黑名單伺服器都是不開放區域傳輸功能的。中國反垃圾郵件聯盟所提供的CBL/CDL/CBL+都是免費查詢的,不需要申請即可使用;而它們的區域傳輸通常是不開放的。
目前大多數的主流郵件伺服器都支持實時黑名單服務,如Postfix、Qmail、Sendmail、IMail等等。關於這些伺服器如何使用黑名單服務的具體細節請參見本站的其它文章。
黑名單服務的提供和黑名單的維護由黑名單服務提供者來提供和維護。所以該名單的權威性和可靠性就依賴於該提供者。通常多數的提供者都是比較有國際信譽的組織,所以對於該名單來說還是可以信任的。
不過由於多數的黑名單服務提供者是國外的組織和公司,所以其提供的黑名單並不能有效地反映出國內的垃圾郵件情況,因此國內使用實時黑名單服務的郵件商很少,這也是我們之所以要提供自己的實時黑名單服務的原因。我們希望通過提供一個主要針對國內的垃圾郵件狀況和動態地址分佈的黑名單來為有效地遏制垃圾郵件做些有益的貢獻。
如何架設一個簡易的實時黑名單伺服器
在有些情況下,你可能需要架設一個自己的實時黑名單伺服器,用來為自己的郵件伺服器或自己的用戶提供實時黑名單服務。這裡我們簡單說明一下如何架設一個簡易的實時黑名單伺服器。
前面我們提到,實時黑名單服務通常是通過DNS服務來進行的,那麼本質上說,實時黑名單伺服器就是一個有特定數據的DNS伺服器。只是如果作為公開的實時黑名單服務運行,要考慮更多的服務特性罷了。
1. 首先,你需要安裝並運行一個DNS伺服器。通常,我們使用BIND來做DNS伺服器。當然,你可以使用任何一種DNS伺服器來做實時黑名單服務,只是有些伺服器並不適合提供大量的實時黑名單查詢。
2. 然後,你需要建立黑名單數據區域。比如,你的黑名單服務叫做myrbl.com,那麼你在DNS中建立一個myrbl.com的區域(zone)。你的DNS除了這個區域外,其他的區域也可以存在。
3. 接著,你需要建立黑名單數據,在區域數據文件中,添加你的黑名單數據。比如,你要將11.22.33.44加入黑名單,那麼你的區域數據文件中應該有如下一行:
44.33.22.11 IN A 127.0.0.2
如何建立一個合法的區域數據文件,這裡就不再贅述了,請參考各種DNS的配置手冊。
4. 現在,你可以重新啟動你的DNS伺服器了。重啟完成後如果沒有報錯,測試一下你剛剛加入的黑名單是否可以查詢到:
dig 44.33.22.11.myrbl.com.
如果查詢結果中有你解析的地址:127.0.0.2,那麼恭喜你,你的黑名單伺服器已經架設成功了。
5. 最後,設置你的郵件伺服器使用你自己的黑名單伺服器吧。
雖然,架設一個黑名單伺服器並不是特別困難,但是維護一個黑名單伺服器卻要花費較大的精力。而且如果黑名單伺服器的訪問量大的話(黑名單伺服器要比通常的DNS伺服器的訪問量要大的多,一般提供公開服務的黑名單伺服器都是多台并行使用的,如本站就使用了5台黑名單伺服器),如何微調DNS的行為,甚至對 DNS伺服器軟體進行修改就需要一些較多的考慮了。
《解決方案》
PDNS 2.9.16 Main Page
Uptime: 6.36 days Queries/second, 1, 5, 10 minute averages: 0.199, 0.191, 0.201. Max queries/second: 7.09
Cache hitrate, 1, 5, 10 minute averages: 18%, 18%, 17%
Backend query cache hitrate, 1, 5, 10 minute averages: 62%, 64%, 67%
Backend query load, 1, 5, 10 minute averages: 0.564, 0.538, 0.549. Max queries/second: 4.62
Total queries: 140104. Question/answer latency: 303ms
Top-10 of 4709: Log Messages
Reset Resize: 10 100 500 1000 (10000) 500000
Query: select content,ttl,prio,type,domain_id,name from records where domain_id='1' 874 8.7%
Query: select content,ttl,prio,type,domain_id,name from records where type='SOA' and name='rbl.twnic.tw' 874 8.7%
Query: select content,ttl,prio,type,domain_id,name from records where name='*.rbl.twnic.tw' 205 2%
Query: select content,ttl,prio,type,domain_id,name from records where name='*.tw' 205 2%
Query: select content,ttl,prio,type,domain_id,name from records where name='*.twnic.tw' 205 2%
Query: select content,ttl,prio,type,domain_id,name from records where type='NS' and name='201.rbl.twnic.tw' and domain_id=1 49 0.49%
Query: select content,ttl,prio,type,domain_id,name from records where name='*.201.rbl.twnic.tw' 48 0.48%
Query: select content,ttl,prio,type,domain_id,name from records where type='SOA' and name='201.rbl.twnic.tw' 47 0.47%
Query: select content,ttl,prio,type,domain_id,name from records where type='NS' and name='200.rbl.twnic.tw' and domain_id=1 39 0.39%
Query: select content,ttl,prio,type,domain_id,name from records where type='SOA' and name='211.rbl.twnic.tw' 38 0.38%
Rest: 7416 74%
Total: 10000 100%
Top-10 of 1: Queries for existing records, but for type we don't have
Reset Resize: 10 100 500 1000 (10000) 500000
rbl.twnic.tw/AAAA 1 1e+02%
Total: 1 100%
Top-10 of 3954: Queries for non-existent records within existent domains
Reset Resize: 10 100 500 1000 (10000) 500000
27.127.64.61.rbl.twnic.tw/A 41 0.41%
28.127.64.61.rbl.twnic.tw/A 31 0.31%
45.4.124.222.rbl.twnic.tw/A 30 0.3%
90.202.163.220.rbl.twnic.tw/A 30 0.3%
112.30.97.83.rbl.twnic.tw/A 28 0.28%
244.63.163.220.rbl.twnic.tw/A 27 0.27%
2.103.63.218.rbl.twnic.tw/A 26 0.26%
2.240.6.218.rbl.twnic.tw/A 25 0.25%
28.7.124.222.rbl.twnic.tw/A 24 0.24%
24.98.89.200.rbl.twnic.tw/A 22 0.22%
Rest: 9716 97%
Total: 10000 100%
Top-10 of 2376: UDP Queries Received
Reset Resize: 10 100 500 1000 (10000) 500000
137.178.137.193.rbl.twnic.tw/A 56 0.56%
27.127.64.61.rbl.twnic.tw/A 54 0.54%
170.115.125.59.rbl.twnic.tw/A 37 0.37%
187.109.15.201.rbl.twnic.tw/A 34 0.34%
28.127.64.61.rbl.twnic.tw/A 33 0.33%
2.134.200.82.rbl.twnic.tw/A 33 0.33%
2.217.45.201.rbl.twnic.tw/A 32 0.32%
183.151.21.201.rbl.twnic.tw/A 32 0.32%
241.77.163.220.rbl.twnic.tw/A 31 0.31%
160.56.26.201.rbl.twnic.tw/A 29 0.29%
Rest: 9629 96%
Total: 10000 100%
Top-10 of 157: Remote server IP addresses
Reset Resize: 10 100 500 1000 (10000) 500000
211.72.210.250 4041 40%
168.95.1.134 192 1.9%
168.95.1.135 150 1.5%
168.95.1.132 119 1.2%
168.95.1.130 114 1.1%
168.95.1.127 111 1.1%
168.95.1.126 97 0.97%
168.95.1.131 96 0.96%
168.95.1.133 95 0.95%
168.95.1.128 82 0.82%
Rest: 4903 49%
Total: 10000 100%
Top-10 of 0: Remote hosts sending corrupt packets
Reset Resize: 10 100 500 1000 (10000) 500000
Total: 0 100%
Top-10 of 0: Remote hosts querying domains for which we are not auth
Reset Resize: 10 100 500 1000 (10000) 500000
Total: 0 100%
Top-10 of 0: Queries that could not be answered due to backend errors
Reset Resize: 10 100 500 1000 (10000) 500000
Total: 0 100%
Top-10 of 0: Queries for domains that we are not authoritative for
Reset Resize: 10 100 500 1000 (10000) 500000
Total: 0 100%
Variables
corrupt-packets 0 Number of corrupt packets received
deferred-cache-inserts 138 Amount of cache inserts that were deferred because of maintenance
deferred-cache-lookup 21 Amount of cache lookups that were deferred because of maintenance
latency 303215 Average number of microseconds needed to answer a question
packetcache-hit 21243
packetcache-miss 118849
packetcache-size 29
qsize-q 7 Number of questions waiting for database attention
query-cache-hit 834540 Number of hits on the query cache
query-cache-miss 371397 Number of misses on the query cache
recursing-answers 23575 Number of recursive answers sent out
recursing-questions 28773 Number of questions sent to recursor
servfail-packets 0 Number of times a server-failed packet was sent out
tcp-answers 0 Number of answers sent out over TCP
tcp-queries 0 Number of TCP queries received
timedout-packets 17921 Number of packets which weren't answered within timeout set
udp-answers 146985 Number of answers sent out over UDP
udp-queries 146104 Number of UDP queries received
我覺得做一個 rbl 不難,管 DNS 也不難,
複雜的是如何形成 rbl list, 以及證據及移除機制的控制,
一些 rbl 都會說你被列入了,但為什麼卻講不出來恐怕無法讓人信服
《解決方案》
頂好貼!!!