阮曉龍+楊明



摘 要:隨著互聯網的快速發展,人民的生活和工作方式都演變了更加高效快捷的模式。但隨著人民在眾多領域愈發依賴于網絡,信息安全的問題也凸顯出來。提出一種IP黑名單聚合的解決方案,來聚合互聯網中已有的黑名單數據,并加以利用,在一定程度上加強互聯網的安全性。
關鍵詞: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黑名單是指被設置禁止通行的IP地址列表。在一個管理完備的網絡中,往往會設置IP黑名單列表,以阻斷有安全風險的地址的訪問。發往IP黑名單的數據包不會被正常的轉發[1],而被丟棄(稱為black hole route,即黑洞路由,一般是送到Null0空接口)或者是發送到特殊的目的地(稱為sinkhole路由,送到專門的流量處理設備進一步處理),配合單播反向路徑轉發可以高效的將來自IP黑名單的數據包丟棄。IP黑名單的應用可以顯著的加強網絡的安全性。
隨著互聯網的發展,互聯網的安全問題尤為重要。盡管現在許多企業和機構都有自己的黑名單庫,但是能夠共享在互聯網中且能供開放使用的卻少之又少。提出了一種基于多數據源進行IP黑名單數據聚合,并面向互聯網提供開放服務的解決方案。
2 IP黑名單數據獲取
2.1 數據來源
討論時所使用的黑名單數據來源有以下三個:1、中國科學技術大學(http://blackip.ustc.edu.cn),2、東北大學(http://antivirus.neu.edu.cn/scan/)3、OpenBL(http://www.openbl.org),但是系統可以平滑擴展到支持更多的數據源。上述三個IP黑名單數據源主要以文本格式提供數據[2],其發布在Web服務器上,通過HTTP GET請求即可獲取黑名單數據。
2.2 數據清洗機制
首先向目標數據源發起HTTP GET請求(例如http://blackip.ustc.edu.cn/list.php?txt)獲取到全部的IP黑名單地址信息,然后通過正則表達式匹配,獲取到每個IP地址存入到數組中[3],并去除重復的數據。然后將過期時間設置為24小時之后,存入數組中,最終形成一個IP地址和過期時間的二維數組。
3 IP黑名單數據存儲
IP黑名單數據源存儲采用關系型數據庫存儲。
3.1 數據庫設計
存放IP黑名單數據的關系表的關鍵字段如表1所示。
3.2 緩存機制
獲取到的黑名單信息并非直接更新到數據表,而是采用文本緩存的機制,最大限度的減少數據庫讀寫壓力,數據緩存的基本字段與格式為:緩存記錄={IP地址\\t過期時間\\n}。
緩存數據的機制一般有以下幾個步驟。
①讀取現有的IP黑名單信息,形成一個IP地址和過期時間的二維數組A1。
②將最新獲取到的黑名單數據存入數組A2,將數組A2與A1取交集,得到數組B=A1∩A2。
③取A2與B的差集得到C=A2-B,即為需要插入數據庫中的黑名單數據數組[4]。
④將A1中過期時間小于當前時間的黑名單數據,從A1中刪除并存入A3,則A3為需要刪除的黑名單數據數組。
⑤將數組A1剩余的數據與數組A2取并集,得到D=A1∪A2,即為當前所有未過期的黑名單數據,并將數據更新到緩存數據中。
利用數據緩存機制,在盡可能減少數據庫操作的情況下實現數據的有效、可靠更新。
3.3 數據更新
根據3.2的計算,得到需要插入到數據庫的黑名單數據C與需要刪除的黑名單數據A3。將C的數據格式化,插入到數據庫中,將A3中的IP地址的status字段值改為deleting狀態。
3.4 數據備份endprint
數據備份是指將原有的數據拷貝一份,生成一個原有的數據的副本,當原有的數據被破壞時,使用已備份的副本數據恢復原有數據。因此為了保障黑名單數據安全性,數據備份必不可少。
可通過Linux任務計劃,建立自動備份機制,具體的做法如下所示。
①每天0點,進行一次全量數據備份,并保存最近15個備份數據;
②每周一0點,將上一周的7個備份數據發布到遠程FTP服務器上,實現遠程備份數據存儲。
4 聚合計算
4.1 數據聚合的實現
根據2和3中提到的數據獲取與存儲機制,一個數據源從獲取到存儲的過程如圖1所示。
而實際上,獲取的黑名單數據接口源不止一個,這個時候每個數據接口所獲取到的數據應該是獨立存在的,并通過來源和類型作為接口區分,互不影響,保障數據的可靠性。
4.2 多進程數據聚合
為了提高采集效率,可使用多進程的方式,針對每個數據接口使用一個獨立的進程來完成一個完整的聚合流程。
5 IP黑名單應用
在黑名單數據庫聚合完成之后,即可將黑名單數據面向社會提供服務。為了減少路由記錄數量,可將IP黑名單數據通過路由計算進行聚合,減少黑名單記錄條數,并以IP地址塊的格式提供服務。
5.1 面向服務器的應用
5.1.1 文本格式
每5分鐘將數據庫中的黑名單數據聚合后生成txt文件,通過Web服務器發布,用戶通過HTTP GET請求獲得黑名單數據進行應用。
文本格式的黑名單數據主要用于類UNIX操作系統的內置防火墻軟件使用。例如,某Linux服務器上開啟iptables防火墻,在服務器上通過shell腳本自動獲取黑名單數據并生成防火墻策略,實現黑名單數據中的IP地址無法訪問該服務器。
以CentOS 6.5操作系統,通過BIND構建的DNS服務器為例,通過以下的shell腳本可自動獲取DNS黑名單數據并生成防火墻策略,以提升DNS服務器的安全性。
#!/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分鐘執行一次上述shell腳本,來達到防火墻策略實時更新的效果。
5.1.2 JSON格式
JSON是常用的數據交換格式之一,和文本格式發布方式相同,將黑名單數據生成JSON文件,通過Web服務器發布。使用者只需要讀取JSON接口就能夠獲取到黑名單數據。
JSON格式的黑名單數據如下例所示,獲取與使用的方法與文本格式的使用方法基本一致。
{
"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格式是常用的數據交換格式之一,通過將數據庫中的黑名單數據以XML文檔的方式進行Web方式發布。XML格式的黑名單數據如下例所示,獲取與使用的方法與文本格式的使用方法基本一致。
0
… …
… …
… …
5.1.4 API安全設計
為了保障業務的安全性,可在提供服務的接口增加訪問認證和數據加密,只有符合要求的用戶可從接口處獲取數據。獲取接口認證所需要的令牌可通過注冊賬號的方式來獲取。
5.2 面向路由器的應用
5.2.1 黑洞路由
黑洞路由是指一條路由的下一跳地址為null0,使得數據包無法被正常的轉發。黑洞路由通常用于解決DOS攻擊,同時也是一個封鎖黑名單的常用方法。例如某路由器想要封鎖IP地址1.0.151.84,具體的做法如下所示。
①在路由器上增加靜態路由ip route 127.0.0.2 255.255.255.255 null0;endprint
②添加靜態路由 ip route 1.0.151.84 255.255.255.255 127.0.0.2。
5.2.4 IP黑名單BGP分發系統
通常使用手動添加路由的方法不僅工作量大,路由可維護性差,且路由器的路由表不能夠實時更新。利用BGP協議來控制黑名單的添加與刪除,能夠大大減輕管理員工作量,便于路由維護,且能夠達到路由表實時更新的效果。
IP黑名單BGP分發系統就是利用BGP客戶端,通過iBGP協議將黑名單數據發送給BGP路由服務器,然后由BGP路由服務器通過eBGP協議將黑洞路由分發給其他的路由器,具體架構如圖2所示。
5.2.2 BGP服務器
邊界網關協議(BGP)是運行于 TCP 上的一種自治系統的路由協議,主要功能是和其他的BGP系統交換網絡可達信息。網絡可達信息包括列出的自治系統(AS)的信息。
在Linux服務器上,可通過開源軟件Quagga來構建BGP路由服務器,具體的安裝與配置方法可參考官方文檔http://www.nongnu.org/quagga/docs/quagga.pdf。
使用Quagga啟用BGP服務的關鍵配置如下所示。
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客戶端的實現
(1)BGP數據報
BGP協議有以下四種數據報類型,分別為Open報文,Update報文,KeepAlive報文,以及Notifacation報文。四種類型報文的報頭格式是一樣的,都由Maker(16字節,可用來探測BGP對端的同步丟失,認證進入的BGP消息),Length(2字節,BGP包全長,最小為19,最大為4096),Type(1字節,1表示Open報文,2表示Update報文,3表示Notifacation報文,4表示KeepAlive報文)所組成。
Open報文:Open報文是TCP連接建立后發送的第一個報文,用于BGP對等體之間的連接關系。主要由以下幾個字段組成。
①Version(1字節):表示BGP協議版本號,當前的BGP協議版本號為4;
②My Autonomous System(2字節):發送者的自治系統號;
③Hold Time(2字節):默認為180,即BGP連接過期時間為180秒;
④BGP Identifer(4字節):發送者的BGP router id;
⑤Open Parameters Length(1字節):可選參數長度,如果為0,則表示無可選參數。
⑥Opetion Params:可選參數。
圖3 Open報文格式
完整的Open報文的格式如圖3所示。
Update報文:Update消息用于在對等體之間交換路由信息。它既可以發布可達路由信息,也可以撤銷不可達路由信息,主要由以下幾個字段組成。
①Unfeasible Routes Length(2字節),表示需要撤銷路由的總字節長度。0表示沒有撤銷路由;
②Withdrawn Routes:所有需要撤銷的路由條目;
③Total Path Attribute Length(2字節):總的路徑屬性長度,0代表在UPDATE消息中沒有網絡層可達信息域;
④Path Attributes:路徑屬性,包括ORIGN(來源)、AS_PATH(AS路徑屬性)、NEXT_HOP(下一跳地址)、MULTI_EXIT_DISC(優先級),LOCAL_PREF(本地優先屬性)等。
⑤Network Layer Reachbility Information:路由可達信息,可以多個。
完整的Update報文格式如圖4所示。
圖4 Update報文格式
KeepAlive報文:BGP會周期性地向對等體發出Keepalive消息[5-6],用來保持連接的有效性,默認沒60秒會發送一次KeepAlive報文。KeepAlive報文只包含BGP頭部的16個字節,不含其余字段。
Notification報文:當BGP檢測到錯誤狀態時[7],就向對等體發出Notification消息,之后BGP連接會立即中斷。
(2)BGP數據報的構建
BGP Open報文的實現如下所示。endprint
ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff //標識
00,1d,01 //數據報總長度為29,報文類型為Open
04 //BGP版本號v4
00,64 //AS號100
00,b4, //過期時間180秒
d3,45,23,73, //BGP ID為211.69.35.115
00 //可選參數長度位0字節
BGP Update增加路由的報文實現如下所示。
ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff //標識
00,3c,02 //數據包總長度為60,報文類型Update
00,00 //撤回路由消息長度為0字節
00,20 //路由屬性長度為32字節
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刪除路由的報文實現如下所示。
ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff,ff //標識
0,1c,02 //數據報總長度為28,報文類型為Update
0,05 //撤回路由消息長度5字節
32 //撤回路由IP地址前綴長度為31
01,16,7c,ed //撤回路由的IP地址為1.22.124.237
0,0 //路由屬性長度為0
(3)客戶端程序邏輯的實現
BGP客戶端程序用于與路由服務器之間建立BGP鄰接關系,把數據庫中新增加的黑名單利用Update報文發送給路由器路由服務器,完成黑名單的添加;把需要刪除的黑名單利用Update Windthdraw報文發送給路由服務器,完成黑名單數據在BGP路由服務器上的刪除。
為了方便BGP協議處理各種異常情況[8],BGP客戶端程序采用父子進程的模式進行。子進程負責建立BGP連接,處理BGP通信,父進程為監控進程,在子進程異常退出后,等待一段時間再生成一個新的子進程。
子進程的邏輯如下所示。
建立到路由的TCP連接;
發送Open報文;
接收對方的Open報文
發送KeepAlive報文;
連接數據庫;
將數據庫中status=added的IP地址打包成Update報文發送出去;
斷開數據庫連接;
while(true){
等待60秒;
發送KeepAlive報文;
連接數據庫;
將數據庫中所status=adding的IP地址打包成Update報文發送出去,并將status改為added;
將數據庫中所有status=delteing的IP地址打包成Update報文發送出去,并將status改為deleted;
斷開數據庫連接;
}
由于BGP報文長度最大為4096個字節,為了避免消息超出長度上限,每條Update報文包含IP地址建議控制在500條以內。
5.2.4 黑名單路由獲取
如果用戶想從BGP路由服務器獲取到黑名單路由信息,只需要在路由器上做如下配置,并與路由服務器建立鄰接關系,就可以獲取黑名單路由信息,從而對黑名單進行封鎖。
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為教育網的網關地址
ip route 127.0.0.2 255.255.255.255 Null0
5.2.5 BGP安全認證
為了提高BGP服務的安全性,在建立鄰居關系時可加入認證密鑰,只有兩個BGP路由器之間持有相同的密鑰時,才能夠獲取到黑名單路由信息。配置BGP認證密鑰如下所示。
neighbor 211.69.35.116 password yourpassword
6 結束語
對于IP黑名單的聚合,目前只聚合了3個數據源的黑名單,數據量約11萬條,而今后還將面臨更多數據的聚合,如何能夠高效的進行黑名單聚合還有待研究。此外對于黑名單的來源,僅僅靠第三方來源是不夠的,還需要開發一套蜜罐系統來捕獲黑名單。面對如此多的黑名單數據,開發一套完善的Web管理系統也是很有必要的[9]。
參考文獻
[1] 張煥杰,楊壽保.基于BGP協議的IP黑名單分發系統[J].中國海洋大學學報,2008,(10):157-159.
[2] 盧先鋒,楊頻,梁剛.基于動態IP黑名單的入侵防御系統模型[J].計算機工程與設計,2011,(1):10-13.
[3] 雷鵬瑋.基于Snort的入侵檢測系統的改進與實現[D].北京郵電大學,2015:1-16.
[4] 龔成清.基于linux的網頁抓取器的設計[J].電腦開發與應 用.2011,(2):73-77.
[5] 徐金榮,李允.基于Linux系統的BGP協議的設計與實現[J].計算機科學,2009,(4):27-29.
[6] 黎松,諸葛建偉,李星.BGP安全研[J].軟件學報,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