◆阮曉龍 楊 明
IP黑名單服務(wù)系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)
◆阮曉龍1楊 明2
(1.河南中醫(yī)藥大學(xué)網(wǎng)絡(luò)信息中心 河南 450000;2.河南中醫(yī)藥大學(xué)信息技術(shù)學(xué)院 河南 450000)
本文結(jié)合互聯(lián)網(wǎng)現(xiàn)有的黑名單服務(wù)與應(yīng)用,進(jìn)行分析并整合,設(shè)計(jì)并實(shí)現(xiàn)了一套黑名單服務(wù)系統(tǒng)。通過(guò)采集開(kāi)放的黑名單數(shù)據(jù),進(jìn)行聚合,然后面向社會(huì)提供免費(fèi)開(kāi)放的服務(wù)。
IP黑名單;軟件設(shè)計(jì);BGP服務(wù)
隨著互聯(lián)網(wǎng)的發(fā)展,應(yīng)用也越來(lái)越廣泛,如何提高互聯(lián)網(wǎng)的安全也顯得尤為重要。本文對(duì)現(xiàn)有的黑名單服務(wù)進(jìn)行整合,實(shí)現(xiàn)面向互聯(lián)網(wǎng)服務(wù)的黑名單管理系統(tǒng),并提出通過(guò)黑名單數(shù)據(jù)提升服務(wù)器、網(wǎng)絡(luò)的安全性的一種應(yīng)用方案。
目前IP黑名單應(yīng)用常見(jiàn)三種方式:內(nèi)部防火墻或服務(wù)器使用;提供開(kāi)放的TXT文本黑名單;提供BGP服務(wù)的黑名單。
1.1 內(nèi)部防火墻或服務(wù)器使用
許多單位都有自己的黑名單庫(kù),通常會(huì)在其內(nèi)部的防火墻或服務(wù)器上添加白名單或者黑名單來(lái)達(dá)到訪問(wèn)控制的目的,但卻不能夠?qū)ν馓峁┓?wù)。
1.2 提供開(kāi)放的TXT文本黑名單
一些高?;蚬娼M織會(huì)將收集到的黑名單數(shù)據(jù)提供開(kāi)放的API的方式提供出來(lái)供公眾使用。
例如openbl在互聯(lián)網(wǎng)中提供了開(kāi)放的黑名單列表,網(wǎng)址為http://www.openbl.org/listl.html,如圖1所示。用戶只需要通過(guò)HTTP請(qǐng)求就可以獲取到黑名單數(shù)據(jù)。這種方式提供的黑名單服務(wù)通常在應(yīng)用層上進(jìn)行應(yīng)用。
圖1 黑名單列表
1.3 提供BGP服務(wù)的黑名單
一些高?;蚬娼M織會(huì)將收集到的黑名單數(shù)據(jù)通過(guò)BGP服務(wù)器,將黑名單注入到BGP系統(tǒng)中。
例如中國(guó)科學(xué)技術(shù)大學(xué)在BGP系統(tǒng)中注入了黑名單,使用者只需要按照要求配置路由器就可以自動(dòng)學(xué)習(xí)到黑名單路由,從而在網(wǎng)絡(luò)層上對(duì)黑名單進(jìn)行封鎖,進(jìn)而有效防止Dos/DDos攻擊。相關(guān)使用說(shuō)明如http://blackip.ustc.edu.cn/intro.php上所示。
根據(jù)對(duì)黑名單系統(tǒng)的應(yīng)用現(xiàn)狀分析和需求調(diào)研,本文設(shè)計(jì)一套黑名單服務(wù)系統(tǒng),包含多種服務(wù)模式,面向社會(huì)提供接口服務(wù)。
2.1 物理架構(gòu)
IP黑名單服務(wù)系統(tǒng)由7臺(tái)服務(wù)器架構(gòu)而成,1臺(tái)數(shù)據(jù)采集服務(wù)器,3臺(tái)數(shù)據(jù)庫(kù)服務(wù)器(一主二從模式),1臺(tái)管理系統(tǒng)服務(wù)器,1臺(tái)BGP服務(wù)器,1臺(tái)接口服務(wù)器,如圖2所示。
圖2 物理體系架構(gòu)
2.2 邏輯架構(gòu)
IP黑名單服務(wù)系統(tǒng)采用B/S架構(gòu),分為服務(wù)門(mén)戶和管理系統(tǒng)兩個(gè)部分,其邏輯體系如圖3所示。系統(tǒng)數(shù)據(jù)庫(kù)使用MySQL進(jìn)行數(shù)據(jù)存儲(chǔ)。
圖3 邏輯體系架構(gòu)
2.3 服務(wù)體系結(jié)構(gòu)
IP黑名單服務(wù)系統(tǒng)對(duì)外提供HTTP和BGP兩種接口。HTTP接口提供JSON、XML、TXT格式的數(shù)據(jù);BGP服務(wù)接口則通過(guò)配置路由器來(lái)獲取黑名單路由表信息。其服務(wù)體系結(jié)構(gòu)如圖4所示。
圖4 服務(wù)體系結(jié)構(gòu)圖
3.1 數(shù)據(jù)采集引擎
數(shù)據(jù)采集引擎主要用于從互聯(lián)網(wǎng)采集黑名單數(shù)據(jù),然后進(jìn)行數(shù)據(jù)清洗,存入數(shù)據(jù)庫(kù)中。數(shù)據(jù)采集采用多進(jìn)程的方式進(jìn)行,每個(gè)進(jìn)程對(duì)應(yīng)一個(gè)互聯(lián)網(wǎng)的數(shù)據(jù)接口,采用文本緩存機(jī)制來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ),其主要過(guò)程如下所示:
(1)向指定URL發(fā)起HTTP請(qǐng)求,如果失敗則繼續(xù)發(fā)起請(qǐng)求,直到請(qǐng)求成功或超過(guò)最大次數(shù)。
(2)通過(guò)正則分析獲取黑名單數(shù)據(jù),并進(jìn)行數(shù)據(jù)清洗。
(3)讀取文本中上次請(qǐng)求的黑名單數(shù)據(jù)與當(dāng)前獲取的數(shù)據(jù)比較,計(jì)算出新增加的黑名單與過(guò)期的黑名單。
(4)默認(rèn)設(shè)置黑名單過(guò)期時(shí)間為1天,然后刷新文本緩存,更新數(shù)據(jù)庫(kù)數(shù)據(jù)。
(5)每隔5分鐘執(zhí)行上述1-4步驟。
3.2 數(shù)據(jù)發(fā)布引擎
數(shù)據(jù)發(fā)布引擎主要通過(guò)生成JSON、XML、TXT文件的方式用于對(duì)外發(fā)布數(shù)據(jù),并加上接口驗(yàn)證,只有通過(guò)驗(yàn)證的用戶才能夠從接口獲取數(shù)據(jù)。發(fā)布數(shù)據(jù)的主要過(guò)程如下所示:
(1)從數(shù)據(jù)庫(kù)中讀取黑名單數(shù)據(jù),存入內(nèi)存中。
(2)通過(guò)路由聚合算法將黑名單數(shù)據(jù)進(jìn)行聚合。
(3)將聚合后的數(shù)據(jù)格式化成不同格式的數(shù)據(jù),生成文件在Web服務(wù)器上發(fā)布。
(4)每隔5分鐘執(zhí)行上述1-3步驟。
3.3 接口服務(wù)
為了保障業(yè)務(wù)的安全,需要在接口處加入請(qǐng)求授權(quán)機(jī)制的安全認(rèn)證。認(rèn)證所需要的密鑰通過(guò)程序隨機(jī)生成,并存在數(shù)據(jù)庫(kù)中用于校驗(yàn)。具體認(rèn)證流程如圖5所示。
圖5 接口認(rèn)證流程圖
讀取接口是一個(gè)比較頻繁的操作,每次通過(guò)查詢數(shù)據(jù)庫(kù)來(lái)進(jìn)行驗(yàn)證會(huì)對(duì)數(shù)據(jù)庫(kù)造成不小的壓力。為了解決這個(gè)問(wèn)題,可以在用戶獲取AppKey的同時(shí),將Appkey與用戶的對(duì)應(yīng)關(guān)系緩存至文本文件中。通過(guò)讀取文本文件的方式來(lái)進(jìn)行接口驗(yàn)證,能夠有效的減輕數(shù)據(jù)庫(kù)壓力,提高響應(yīng)速度。
3.4 BGP服務(wù)
提供BGP服務(wù)主要用于在網(wǎng)絡(luò)層上對(duì)黑名單進(jìn)行封鎖。通過(guò)建立EBGP連接,路由器可以從提供的路由服務(wù)器上獲取黑名單路由表信息。BGP服務(wù)器中的數(shù)據(jù)由BGP客戶端程序進(jìn)行推送,其主要過(guò)程如下所示:
(1)從數(shù)據(jù)庫(kù)中讀取黑名單數(shù)據(jù)。
(2)通過(guò)路由聚合算法將黑名單數(shù)據(jù)進(jìn)行聚合。
(3)讀取上次聚合后黑名單數(shù)據(jù)進(jìn)行比對(duì),計(jì)算出當(dāng)前需要添加和刪除的黑名單數(shù)據(jù)。
(4)通過(guò)路由服務(wù)器在BGP系統(tǒng)中添加和刪除黑名單。(5)每隔5分鐘執(zhí)行上述1-4步驟。
由于系統(tǒng)所涉及到的關(guān)系對(duì)象并不復(fù)雜,因此所有的表設(shè)計(jì)都采用第一范式進(jìn)行設(shè)計(jì)。
4.1 數(shù)據(jù)模型設(shè)計(jì)
圖6 數(shù)據(jù)庫(kù)模型
數(shù)據(jù)庫(kù)模型使用MySQL Workbench進(jìn)行設(shè)計(jì),其數(shù)據(jù)模型如圖6所示。
4.2 數(shù)據(jù)表設(shè)計(jì)
系統(tǒng)所需要的數(shù)據(jù)表如表1所示。
表1 系統(tǒng)數(shù)據(jù)表
其中黑名單數(shù)據(jù)表的表結(jié)構(gòu)如表2所示。
表2 黑名單記錄表的結(jié)構(gòu)
5.1 Web應(yīng)用安全
為了保障業(yè)務(wù)系統(tǒng)的安全性,主要從以下幾個(gè)方面來(lái)提高系統(tǒng)的安全性。
5.1.1 內(nèi)外網(wǎng)分離
系統(tǒng)部署時(shí),采用防火墻映射的方式進(jìn)行部署,使得內(nèi)外網(wǎng)分離,對(duì)外只提供80端口提供服務(wù)。
5.1.2 嚴(yán)格的訪問(wèn)控制
服務(wù)器自身的防火墻進(jìn)行嚴(yán)格的訪問(wèn)控制,只允許內(nèi)網(wǎng)中所需要的服務(wù)器進(jìn)行訪問(wèn),進(jìn)一步提高系統(tǒng)的安全性。
5.1.3 系統(tǒng)自身安全
除了外部對(duì)系統(tǒng)的防護(hù)之外,加強(qiáng)系統(tǒng)自身的安全也是很有必要的。系統(tǒng)在對(duì)用戶提交的表單進(jìn)行了嚴(yán)格的過(guò)濾,包括URL,GET和POST參數(shù),同時(shí)使用了開(kāi)發(fā)語(yǔ)言提供的有準(zhǔn)備語(yǔ)句來(lái)防止SQL注入攻擊。此外系統(tǒng)在接口處也進(jìn)行了認(rèn)證校驗(yàn),防止非法用戶讀取接口。
5.2 數(shù)據(jù)安全
為了保障數(shù)據(jù)的安全,定期進(jìn)行數(shù)據(jù)備份是很有必要的。可通過(guò)Linux任務(wù)計(jì)劃,建立自動(dòng)備份機(jī)制,具體的做法如下所示。
(1)每天0點(diǎn),進(jìn)行一次全量數(shù)據(jù)備份,并保存最近15個(gè)備份數(shù)據(jù);
(2)每周一0點(diǎn),將上一周的7個(gè)備份數(shù)據(jù)發(fā)布到遠(yuǎn)程FTP服務(wù)器上,實(shí)現(xiàn)遠(yuǎn)程備份數(shù)據(jù)存儲(chǔ)。
除了備份機(jī)制外,通過(guò)搭建MySQL集群的方式,來(lái)確保數(shù)據(jù)的可用性,即使某臺(tái)數(shù)據(jù)庫(kù)服務(wù)器丟失,也不會(huì)影響業(yè)務(wù),且數(shù)據(jù)能夠快速恢復(fù),為數(shù)據(jù)的安全提供了保障。
5.3 性能優(yōu)化
對(duì)于系統(tǒng)性能優(yōu)化,主要在數(shù)據(jù)緩存、數(shù)據(jù)庫(kù)讀寫(xiě)分離兩個(gè)方面進(jìn)行優(yōu)化。
5.3.1 數(shù)據(jù)緩存
系統(tǒng)采用內(nèi)存緩存與文件緩存的雙緩存機(jī)制,對(duì)系統(tǒng)不經(jīng)常更新的數(shù)據(jù)進(jìn)行緩存來(lái)提高系統(tǒng)的性能。例如在黑名單數(shù)據(jù)統(tǒng)計(jì)頁(yè)面中,可對(duì)查詢出來(lái)的數(shù)據(jù)進(jìn)行緩存處理,將數(shù)據(jù)以JSON格式保存在內(nèi)存和文件中,每15分鐘更新一次。針對(duì)每個(gè)黑名單的查詢結(jié)果則可以將其緩存1天。通過(guò)諸如上述的機(jī)制大大減少數(shù)據(jù)庫(kù)的查詢次數(shù),達(dá)到減輕數(shù)據(jù)庫(kù)壓力的同時(shí),提高頁(yè)面的響應(yīng)速度。
5.3.2 讀寫(xiě)分離
系統(tǒng)使用MySQL數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)存儲(chǔ),采用主從同步(一主兩從)的方式進(jìn)行部署。數(shù)據(jù)庫(kù)進(jìn)行更新數(shù)據(jù)時(shí),其操作在主數(shù)據(jù)庫(kù)服務(wù)器上進(jìn)行,進(jìn)行查詢數(shù)據(jù)時(shí)則在從數(shù)據(jù)庫(kù)服務(wù)器上進(jìn)行,并采用輪詢的方式查詢多臺(tái)從數(shù)據(jù)庫(kù)服務(wù)器。通過(guò)負(fù)載均衡的方式,來(lái)分?jǐn)倲?shù)據(jù)庫(kù)壓力,進(jìn)一步提高整個(gè)系統(tǒng)的性能。
5.3.3 路由聚合
由于黑名單數(shù)據(jù)量大,系統(tǒng)使用了路由聚合算法,將黑名單進(jìn)行聚合,來(lái)減少數(shù)據(jù)的傳輸量,提高通信效率和應(yīng)用效率。
6.1 黑名單查詢