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