阮曉龍+楊明
摘 要:隨著互聯(lián)網(wǎng)的快速發(fā)展,人民的生活和工作方式都演變了更加高效快捷的模式。但隨著人民在眾多領(lǐng)域愈發(fā)依賴于網(wǎng)絡(luò),信息安全的問題也凸顯出來。提出一種IP黑名單聚合的解決方案,來聚合互聯(lián)網(wǎng)中已有的黑名單數(shù)據(jù),并加以利用,在一定程度上加強互聯(lián)網(wǎng)的安全性。
關(guān)鍵詞:IP黑名單;聚合;BGP
中圖分類號:TP3 文獻標志碼:A
Aggregation and Application Implementation of IP Black List Based on Internet Multi Data Sources
RUAN Xiao-long1,YANG Ming2
(1.The Network Information Center of Henan University of Chinese Medicine,Zhengzhou,Henan 450000;
2.School of Information Technology,Henan University of Chinese Medicine,Zhengzhou,Henan 450000,China)
Abstract:With the rapid development of the internet, peoples life and work style has evolved a more efficient and efficient model.But with the people in many areas increasingly dependent on the network, the issue of information security is also highlighted.In this paper, we propose a solution to the aggregation of IP black list, which can be used to enhance the security of the Internet in a certain extent.
Key words:IP black list,polymerization,BGP
1 引 言
IP黑名單是指被設(shè)置禁止通行的IP地址列表。在一個管理完備的網(wǎng)絡(luò)中,往往會設(shè)置IP黑名單列表,以阻斷有安全風險的地址的訪問。發(fā)往IP黑名單的數(shù)據(jù)包不會被正常的轉(zhuǎn)發(fā)[1],而被丟棄(稱為black hole route,即黑洞路由,一般是送到Null0空接口)或者是發(fā)送到特殊的目的地(稱為sinkhole路由,送到專門的流量處理設(shè)備進一步處理),配合單播反向路徑轉(zhuǎn)發(fā)可以高效的將來自IP黑名單的數(shù)據(jù)包丟棄。IP黑名單的應(yīng)用可以顯著的加強網(wǎng)絡(luò)的安全性。
隨著互聯(lián)網(wǎng)的發(fā)展,互聯(lián)網(wǎng)的安全問題尤為重要。盡管現(xiàn)在許多企業(yè)和機構(gòu)都有自己的黑名單庫,但是能夠共享在互聯(lián)網(wǎng)中且能供開放使用的卻少之又少。提出了一種基于多數(shù)據(jù)源進行IP黑名單數(shù)據(jù)聚合,并面向互聯(lián)網(wǎng)提供開放服務(wù)的解決方案。
2 IP黑名單數(shù)據(jù)獲取
2.1 數(shù)據(jù)來源
討論時所使用的黑名單數(shù)據(jù)來源有以下三個:1、中國科學(xué)技術(shù)大學(xué)(http://blackip.ustc.edu.cn),2、東北大學(xué)(http://antivirus.neu.edu.cn/scan/)3、OpenBL(http://www.openbl.org),但是系統(tǒng)可以平滑擴展到支持更多的數(shù)據(jù)源。上述三個IP黑名單數(shù)據(jù)源主要以文本格式提供數(shù)據(jù)[2],其發(fā)布在Web服務(wù)器上,通過HTTP GET請求即可獲取黑名單數(shù)據(jù)。
2.2 數(shù)據(jù)清洗機制
首先向目標數(shù)據(jù)源發(fā)起HTTP GET請求(例如http://blackip.ustc.edu.cn/list.php?txt)獲取到全部的IP黑名單地址信息,然后通過正則表達式匹配,獲取到每個IP地址存入到數(shù)組中[3],并去除重復(fù)的數(shù)據(jù)。然后將過期時間設(shè)置為24小時之后,存入數(shù)組中,最終形成一個IP地址和過期時間的二維數(shù)組。
3 IP黑名單數(shù)據(jù)存儲
IP黑名單數(shù)據(jù)源存儲采用關(guān)系型數(shù)據(jù)庫存儲。
3.1 數(shù)據(jù)庫設(shè)計
存放IP黑名單數(shù)據(jù)的關(guān)系表的關(guān)鍵字段如表1所示。
3.2 緩存機制
獲取到的黑名單信息并非直接更新到數(shù)據(jù)表,而是采用文本緩存的機制,最大限度的減少數(shù)據(jù)庫讀寫壓力,數(shù)據(jù)緩存的基本字段與格式為:緩存記錄={IP地址\\t過期時間\\n}。
緩存數(shù)據(jù)的機制一般有以下幾個步驟。
①讀取現(xiàn)有的IP黑名單信息,形成一個IP地址和過期時間的二維數(shù)組A1。
②將最新獲取到的黑名單數(shù)據(jù)存入數(shù)組A2,將數(shù)組A2與A1取交集,得到數(shù)組B=A1∩A2。
③取A2與B的差集得到C=A2-B,即為需要插入數(shù)據(jù)庫中的黑名單數(shù)據(jù)數(shù)組[4]。
④將A1中過期時間小于當前時間的黑名單數(shù)據(jù),從A1中刪除并存入A3,則A3為需要刪除的黑名單數(shù)據(jù)數(shù)組。
⑤將數(shù)組A1剩余的數(shù)據(jù)與數(shù)組A2取并集,得到D=A1∪A2,即為當前所有未過期的黑名單數(shù)據(jù),并將數(shù)據(jù)更新到緩存數(shù)據(jù)中。
利用數(shù)據(jù)緩存機制,在盡可能減少數(shù)據(jù)庫操作的情況下實現(xiàn)數(shù)據(jù)的有效、可靠更新。
3.3 數(shù)據(jù)更新
根據(jù)3.2的計算,得到需要插入到數(shù)據(jù)庫的黑名單數(shù)據(jù)C與需要刪除的黑名單數(shù)據(jù)A3。將C的數(shù)據(jù)格式化,插入到數(shù)據(jù)庫中,將A3中的IP地址的status字段值改為deleting狀態(tài)。
3.4 數(shù)據(jù)備份endprint
數(shù)據(jù)備份是指將原有的數(shù)據(jù)拷貝一份,生成一個原有的數(shù)據(jù)的副本,當原有的數(shù)據(jù)被破壞時,使用已備份的副本數(shù)據(jù)恢復(fù)原有數(shù)據(jù)。因此為了保障黑名單數(shù)據(jù)安全性,數(shù)據(jù)備份必不可少。
可通過Linux任務(wù)計劃,建立自動備份機制,具體的做法如下所示。
①每天0點,進行一次全量數(shù)據(jù)備份,并保存最近15個備份數(shù)據(jù);
②每周一0點,將上一周的7個備份數(shù)據(jù)發(fā)布到遠程FTP服務(wù)器上,實現(xiàn)遠程備份數(shù)據(jù)存儲。
4 聚合計算
4.1 數(shù)據(jù)聚合的實現(xiàn)
根據(jù)2和3中提到的數(shù)據(jù)獲取與存儲機制,一個數(shù)據(jù)源從獲取到存儲的過程如圖1所示。
而實際上,獲取的黑名單數(shù)據(jù)接口源不止一個,這個時候每個數(shù)據(jù)接口所獲取到的數(shù)據(jù)應(yīng)該是獨立存在的,并通過來源和類型作為接口區(qū)分,互不影響,保障數(shù)據(jù)的可靠性。
4.2 多進程數(shù)據(jù)聚合
為了提高采集效率,可使用多進程的方式,針對每個數(shù)據(jù)接口使用一個獨立的進程來完成一個完整的聚合流程。
5 IP黑名單應(yīng)用
在黑名單數(shù)據(jù)庫聚合完成之后,即可將黑名單數(shù)據(jù)面向社會提供服務(wù)。為了減少路由記錄數(shù)量,可將IP黑名單數(shù)據(jù)通過路由計算進行聚合,減少黑名單記錄條數(shù),并以IP地址塊的格式提供服務(wù)。
5.1 面向服務(wù)器的應(yīng)用
5.1.1 文本格式
每5分鐘將數(shù)據(jù)庫中的黑名單數(shù)據(jù)聚合后生成txt文件,通過Web服務(wù)器發(fā)布,用戶通過HTTP GET請求獲得黑名單數(shù)據(jù)進行應(yīng)用。
文本格式的黑名單數(shù)據(jù)主要用于類UNIX操作系統(tǒng)的內(nèi)置防火墻軟件使用。例如,某Linux服務(wù)器上開啟iptables防火墻,在服務(wù)器上通過shell腳本自動獲取黑名單數(shù)據(jù)并生成防火墻策略,實現(xiàn)黑名單數(shù)據(jù)中的IP地址無法訪問該服務(wù)器。
以CentOS 6.5操作系統(tǒng),通過BIND構(gòu)建的DNS服務(wù)器為例,通過以下的shell腳本可自動獲取DNS黑名單數(shù)據(jù)并生成防火墻策略,以提升DNS服務(wù)器的安全性。
#!/bin/bash
iptables -F dns
curl http://openblackip.online/api/txt/dns.txt > dnsblackip.txt
for ip in `cat dnsblackip.txt`;
do echo iptables -A dns -j DROP -s $ip;
iptables -A dns -j DROP -s $ip;
done
可通過cron配置每5分鐘執(zhí)行一次上述shell腳本,來達到防火墻策略實時更新的效果。
5.1.2 JSON格式
JSON是常用的數(shù)據(jù)交換格式之一,和文本格式發(fā)布方式相同,將黑名單數(shù)據(jù)生成JSON文件,通過Web服務(wù)器發(fā)布。使用者只需要讀取JSON接口就能夠獲取到黑名單數(shù)據(jù)。
JSON格式的黑名單數(shù)據(jù)如下例所示,獲取與使用的方法與文本格式的使用方法基本一致。
{
"code": "0",
"msg": "success",
"data": {
"router":[
1.0.151.84,
1.0.182.122,
1.1.164.230,
… …
] ,
"mail":[
1.22.124.237,
1.23.103.205,
1.28.144.183,
… …
],
… …
}
}
5.1.3 XML格式
XML格式是常用的數(shù)據(jù)交換格式之一,通過將數(shù)據(jù)庫中的黑名單數(shù)據(jù)以XML文檔的方式進行Web方式發(fā)布。XML格式的黑名單數(shù)據(jù)如下例所示,獲取與使用的方法與文本格式的使用方法基本一致。
0
… …
… …
… …
5.1.4 API安全設(shè)計
為了保障業(yè)務(wù)的安全性,可在提供服務(wù)的接口增加訪問認證和數(shù)據(jù)加密,只有符合要求的用戶可從接口處獲取數(shù)據(jù)。獲取接口認證所需要的令牌可通過注冊賬號的方式來獲取。
5.2 面向路由器的應(yīng)用
5.2.1 黑洞路由
黑洞路由是指一條路由的下一跳地址為null0,使得數(shù)據(jù)包無法被正常的轉(zhuǎn)發(fā)。黑洞路由通常用于解決DOS攻擊,同時也是一個封鎖黑名單的常用方法。例如某路由器想要封鎖IP地址1.0.151.84,具體的做法如下所示。
①在路由器上增加靜態(tài)路由ip route 127.0.0.2 255.255.255.255 null0;endprint
②添加靜態(tài)路由 ip route 1.0.151.84 255.255.255.255 127.0.0.2。
5.2.4 IP黑名單BGP分發(fā)系統(tǒng)
通常使用手動添加路由的方法不僅工作量大,路由可維護性差,且路由器的路由表不能夠?qū)崟r更新。利用BGP協(xié)議來控制黑名單的添加與刪除,能夠大大減輕管理員工作量,便于路由維護,且能夠達到路由表實時更新的效果。
IP黑名單BGP分發(fā)系統(tǒng)就是利用BGP客戶端,通過iBGP協(xié)議將黑名單數(shù)據(jù)發(fā)送給BGP路由服務(wù)器,然后由BGP路由服務(wù)器通過eBGP協(xié)議將黑洞路由分發(fā)給其他的路由器,具體架構(gòu)如圖2所示。
5.2.2 BGP服務(wù)器
邊界網(wǎng)關(guān)協(xié)議(BGP)是運行于 TCP 上的一種自治系統(tǒng)的路由協(xié)議,主要功能是和其他的BGP系統(tǒng)交換網(wǎng)絡(luò)可達信息。網(wǎng)絡(luò)可達信息包括列出的自治系統(tǒng)(AS)的信息。
在Linux服務(wù)器上,可通過開源軟件Quagga來構(gòu)建BGP路由服務(wù)器,具體的安裝與配置方法可參考官方文檔http://www.nongnu.org/quagga/docs/quagga.pdf。
使用Quagga啟用BGP服務(wù)的關(guān)鍵配置如下所示。
ip route 127.0.0.2/32 Null0
router bgp 200
neighbor blackipclient peer-group
neighbor blackipclient ebgp-multihop 255
neighbor blackipclient prefix-list discard all in
neighbor blackipclient route-map blackip -out out
neighbor 211.69.35.115 remote-as 100
neighbor 211.69.35.115 peer-g roup blackipclient
access-list blackhole permit 127.0.0.2/32
ip prefix-list discard all seq 5 deny any
route-map blackip out permit 10
set ip next-hop 127.0.0.2
set community no-export
5.2.3 BGP客戶端的實現(xiàn)
(1)BGP數(shù)據(jù)報
BGP協(xié)議有以下四種數(shù)據(jù)報類型,分別為Open報文,Update報文,KeepAlive報文,以及Notifacation報文。四種類型報文的報頭格式是一樣的,都由Maker(16字節(jié),可用來探測BGP對端的同步丟失,認證進入的BGP消息),Length(2字節(jié),BGP包全長,最小為19,最大為4096),Type(1字節(jié),1表示Open報文,2表示Update報文,3表示Notifacation報文,4表示KeepAlive報文)所組成。
Open報文:Open報文是TCP連接建立后發(fā)送的第一個報文,用于BGP對等體之間的連接關(guān)系。主要由以下幾個字段組成。
①Version(1字節(jié)):表示BGP協(xié)議版本號,當前的BGP協(xié)議版本號為4;
②My Autonomous System(2字節(jié)):發(fā)送者的自治系統(tǒng)號;
③Hold Time(2字節(jié)):默認為180,即BGP連接過期時間為180秒;
④BGP Identifer(4字節(jié)):發(fā)送者的BGP router id;
⑤Open Parameters Length(1字節(jié)):可選參數(shù)長度,如果為0,則表示無可選參數(shù)。
⑥Opetion Params:可選參數(shù)。
圖3 Open報文格式
完整的Open報文的格式如圖3所示。
Update報文:Update消息用于在對等體之間交換路由信息。它既可以發(fā)布可達路由信息,也可以撤銷不可達路由信息,主要由以下幾個字段組成。
①Unfeasible Routes Length(2字節(jié)),表示需要撤銷路由的總字節(jié)長度。0表示沒有撤銷路由;
②Withdrawn Routes:所有需要撤銷的路由條目;
③Total Path Attribute Length(2字節(jié)):總的路徑屬性長度,0代表在UPDATE消息中沒有網(wǎng)絡(luò)層可達信息域;
④Path Attributes:路徑屬性,包括ORIGN(來源)、AS_PATH(AS路徑屬性)、NEXT_HOP(下一跳地址)、MULTI_EXIT_DISC(優(yōu)先級),LOCAL_PREF(本地優(yōu)先屬性)等。
⑤Network Layer Reachbility Information:路由可達信息,可以多個。
完整的Update報文格式如圖4所示。
圖4 Update報文格式
KeepAlive報文:BGP會周期性地向?qū)Φ润w發(fā)出Keepalive消息[5-6],用來保持連接的有效性,默認沒60秒會發(fā)送一次KeepAlive報文。KeepAlive報文只包含BGP頭部的16個字節(jié),不含其余字段。
Notification報文:當BGP檢測到錯誤狀態(tài)時[7],就向?qū)Φ润w發(fā)出Notification消息,之后BGP連接會立即中斷。
(2)BGP數(shù)據(jù)報的構(gòu)建
BGP Open報文的實現(xiàn)如下所示。endprint
ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff //標識
00,1d,01 //數(shù)據(jù)報總長度為29,報文類型為Open
04 //BGP版本號v4
00,64 //AS號100
00,b4, //過期時間180秒
d3,45,23,73, //BGP ID為211.69.35.115
00 //可選參數(shù)長度位0字節(jié)
BGP Update增加路由的報文實現(xiàn)如下所示。
ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff //標識
00,3c,02 //數(shù)據(jù)包總長度為60,報文類型Update
00,00 //撤回路由消息長度為0字節(jié)
00,20 //路由屬性長度為32字節(jié)
40,01,01,00 //ORIGIN:IGP 來源IGP
40,02,04,02,01,00,64 //AS_PATH AS路徑屬性為100
40,03,04,7f,00,00,02 //下一條地址為127.0.0.2
80,04,04,0,0,0,0 //MED
40,05,04,0,0,0,100 //Local_Pref為100
32 //IP前綴長度32
01,16,7c,ed //路由可達信息(需要封鎖的黑名單地址)為1.22.124.237
BGP Update刪除路由的報文實現(xiàn)如下所示。
ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff //標識
0,1c,02 //數(shù)據(jù)報總長度為28,報文類型為Update
0,05 //撤回路由消息長度5字節(jié)
32 //撤回路由IP地址前綴長度為31
01,16,7c,ed //撤回路由的IP地址為1.22.124.237
0,0 //路由屬性長度為0
(3)客戶端程序邏輯的實現(xiàn)
BGP客戶端程序用于與路由服務(wù)器之間建立BGP鄰接關(guān)系,把數(shù)據(jù)庫中新增加的黑名單利用Update報文發(fā)送給路由器路由服務(wù)器,完成黑名單的添加;把需要刪除的黑名單利用Update Windthdraw報文發(fā)送給路由服務(wù)器,完成黑名單數(shù)據(jù)在BGP路由服務(wù)器上的刪除。
為了方便BGP協(xié)議處理各種異常情況[8],BGP客戶端程序采用父子進程的模式進行。子進程負責建立BGP連接,處理BGP通信,父進程為監(jiān)控進程,在子進程異常退出后,等待一段時間再生成一個新的子進程。
子進程的邏輯如下所示。
建立到路由的TCP連接;
發(fā)送Open報文;
接收對方的Open報文
發(fā)送KeepAlive報文;
連接數(shù)據(jù)庫;
將數(shù)據(jù)庫中status=added的IP地址打包成Update報文發(fā)送出去;
斷開數(shù)據(jù)庫連接;
while(true){
等待60秒;
發(fā)送KeepAlive報文;
連接數(shù)據(jù)庫;
將數(shù)據(jù)庫中所status=adding的IP地址打包成Update報文發(fā)送出去,并將status改為added;
將數(shù)據(jù)庫中所有status=delteing的IP地址打包成Update報文發(fā)送出去,并將status改為deleted;
斷開數(shù)據(jù)庫連接;
}
由于BGP報文長度最大為4096個字節(jié),為了避免消息超出長度上限,每條Update報文包含IP地址建議控制在500條以內(nèi)。
5.2.4 黑名單路由獲取
如果用戶想從BGP路由服務(wù)器獲取到黑名單路由信息,只需要在路由器上做如下配置,并與路由服務(wù)器建立鄰接關(guān)系,就可以獲取黑名單路由信息,從而對黑名單進行封鎖。
router bgp 65500
no synchronization
bgp log-neighbor-changes
neighbor211.69.35.116 remote-as 200
neighbor 211.69.35.116 ebgp-multihop 255
no auto-summary
ip route211.69.35.116 255.255.255.255 x.x.x.x //xxxx為教育網(wǎng)的網(wǎng)關(guān)地址
ip route 127.0.0.2 255.255.255.255 Null0
5.2.5 BGP安全認證
為了提高BGP服務(wù)的安全性,在建立鄰居關(guān)系時可加入認證密鑰,只有兩個BGP路由器之間持有相同的密鑰時,才能夠獲取到黑名單路由信息。配置BGP認證密鑰如下所示。
neighbor 211.69.35.116 password yourpassword
6 結(jié)束語
對于IP黑名單的聚合,目前只聚合了3個數(shù)據(jù)源的黑名單,數(shù)據(jù)量約11萬條,而今后還將面臨更多數(shù)據(jù)的聚合,如何能夠高效的進行黑名單聚合還有待研究。此外對于黑名單的來源,僅僅靠第三方來源是不夠的,還需要開發(fā)一套蜜罐系統(tǒng)來捕獲黑名單。面對如此多的黑名單數(shù)據(jù),開發(fā)一套完善的Web管理系統(tǒng)也是很有必要的[9]。
參考文獻
[1] 張煥杰,楊壽保.基于BGP協(xié)議的IP黑名單分發(fā)系統(tǒng)[J].中國海洋大學(xué)學(xué)報,2008,(10):157-159.
[2] 盧先鋒,楊頻,梁剛.基于動態(tài)IP黑名單的入侵防御系統(tǒng)模型[J].計算機工程與設(shè)計,2011,(1):10-13.
[3] 雷鵬瑋.基于Snort的入侵檢測系統(tǒng)的改進與實現(xiàn)[D].北京郵電大學(xué),2015:1-16.
[4] 龔成清.基于linux的網(wǎng)頁抓取器的設(shè)計[J].電腦開發(fā)與應(yīng) 用.2011,(2):73-77.
[5] 徐金榮,李允.基于Linux系統(tǒng)的BGP協(xié)議的設(shè)計與實現(xiàn)[J].計算機科學(xué),2009,(4):27-29.
[6] 黎松,諸葛建偉,李星.BGP安全研[J].軟件學(xué)報,2013,24(1):121-138。
[7] Quagga Routing Suite [EB/OL].http://www.quagga.net.
[8] REKH TER Y , LI T , HARES S .A Border Gatew ay Protocol 4(BGP-4)[R].RFC 4271.2006.
[9] Cisco Security Center.Worm Mitigation Technical Det ails[EB/OL].http://www.cisco.com/web/about/security/intelligence/worm-mitigation-wh-itepaper.html#tt-sinkholes.endprint