◆阮曉龍 楊 明
IP黑名單服務系統的設計實現
◆阮曉龍1楊 明2
(1.河南中醫藥大學網絡信息中心 河南 450000;2.河南中醫藥大學信息技術學院 河南 450000)
本文結合互聯網現有的黑名單服務與應用,進行分析并整合,設計并實現了一套黑名單服務系統。通過采集開放的黑名單數據,進行聚合,然后面向社會提供免費開放的服務。
IP黑名單;軟件設計;BGP服務
隨著互聯網的發展,應用也越來越廣泛,如何提高互聯網的安全也顯得尤為重要。本文對現有的黑名單服務進行整合,實現面向互聯網服務的黑名單管理系統,并提出通過黑名單數據提升服務器、網絡的安全性的一種應用方案。
目前IP黑名單應用常見三種方式:內部防火墻或服務器使用;提供開放的TXT文本黑名單;提供BGP服務的黑名單。
1.1 內部防火墻或服務器使用
許多單位都有自己的黑名單庫,通常會在其內部的防火墻或服務器上添加白名單或者黑名單來達到訪問控制的目的,但卻不能夠對外提供服務。
1.2 提供開放的TXT文本黑名單
一些高校或公益組織會將收集到的黑名單數據提供開放的API的方式提供出來供公眾使用。
例如openbl在互聯網中提供了開放的黑名單列表,網址為http://www.openbl.org/listl.html,如圖1所示。用戶只需要通過HTTP請求就可以獲取到黑名單數據。這種方式提供的黑名單服務通常在應用層上進行應用。

圖1 黑名單列表
1.3 提供BGP服務的黑名單
一些高校或公益組織會將收集到的黑名單數據通過BGP服務器,將黑名單注入到BGP系統中。
例如中國科學技術大學在BGP系統中注入了黑名單,使用者只需要按照要求配置路由器就可以自動學習到黑名單路由,從而在網絡層上對黑名單進行封鎖,進而有效防止Dos/DDos攻擊。相關使用說明如http://blackip.ustc.edu.cn/intro.php上所示。
根據對黑名單系統的應用現狀分析和需求調研,本文設計一套黑名單服務系統,包含多種服務模式,面向社會提供接口服務。
2.1 物理架構
IP黑名單服務系統由7臺服務器架構而成,1臺數據采集服務器,3臺數據庫服務器(一主二從模式),1臺管理系統服務器,1臺BGP服務器,1臺接口服務器,如圖2所示。

圖2 物理體系架構
2.2 邏輯架構
IP黑名單服務系統采用B/S架構,分為服務門戶和管理系統兩個部分,其邏輯體系如圖3所示。系統數據庫使用MySQL進行數據存儲。

圖3 邏輯體系架構
2.3 服務體系結構
IP黑名單服務系統對外提供HTTP和BGP兩種接口。HTTP接口提供JSON、XML、TXT格式的數據;BGP服務接口則通過配置路由器來獲取黑名單路由表信息。其服務體系結構如圖4所示。

圖4 服務體系結構圖
3.1 數據采集引擎
數據采集引擎主要用于從互聯網采集黑名單數據,然后進行數據清洗,存入數據庫中。數據采集采用多進程的方式進行,每個進程對應一個互聯網的數據接口,采用文本緩存機制來進行數據存儲,其主要過程如下所示:
(1)向指定URL發起HTTP請求,如果失敗則繼續發起請求,直到請求成功或超過最大次數。
(2)通過正則分析獲取黑名單數據,并進行數據清洗。
(3)讀取文本中上次請求的黑名單數據與當前獲取的數據比較,計算出新增加的黑名單與過期的黑名單。
(4)默認設置黑名單過期時間為1天,然后刷新文本緩存,更新數據庫數據。
(5)每隔5分鐘執行上述1-4步驟。
3.2 數據發布引擎
數據發布引擎主要通過生成JSON、XML、TXT文件的方式用于對外發布數據,并加上接口驗證,只有通過驗證的用戶才能夠從接口獲取數據。發布數據的主要過程如下所示:
(1)從數據庫中讀取黑名單數據,存入內存中。
(2)通過路由聚合算法將黑名單數據進行聚合。
(3)將聚合后的數據格式化成不同格式的數據,生成文件在Web服務器上發布。
(4)每隔5分鐘執行上述1-3步驟。
3.3 接口服務
為了保障業務的安全,需要在接口處加入請求授權機制的安全認證。認證所需要的密鑰通過程序隨機生成,并存在數據庫中用于校驗。具體認證流程如圖5所示。

圖5 接口認證流程圖
讀取接口是一個比較頻繁的操作,每次通過查詢數據庫來進行驗證會對數據庫造成不小的壓力。為了解決這個問題,可以在用戶獲取AppKey的同時,將Appkey與用戶的對應關系緩存至文本文件中。通過讀取文本文件的方式來進行接口驗證,能夠有效的減輕數據庫壓力,提高響應速度。
3.4 BGP服務
提供BGP服務主要用于在網絡層上對黑名單進行封鎖。通過建立EBGP連接,路由器可以從提供的路由服務器上獲取黑名單路由表信息。BGP服務器中的數據由BGP客戶端程序進行推送,其主要過程如下所示:
(1)從數據庫中讀取黑名單數據。
(2)通過路由聚合算法將黑名單數據進行聚合。
(3)讀取上次聚合后黑名單數據進行比對,計算出當前需要添加和刪除的黑名單數據。
(4)通過路由服務器在BGP系統中添加和刪除黑名單。(5)每隔5分鐘執行上述1-4步驟。
由于系統所涉及到的關系對象并不復雜,因此所有的表設計都采用第一范式進行設計。
4.1 數據模型設計

圖6 數據庫模型
數據庫模型使用MySQL Workbench進行設計,其數據模型如圖6所示。
4.2 數據表設計
系統所需要的數據表如表1所示。

表1 系統數據表
其中黑名單數據表的表結構如表2所示。

表2 黑名單記錄表的結構
5.1 Web應用安全
為了保障業務系統的安全性,主要從以下幾個方面來提高系統的安全性。
5.1.1 內外網分離
系統部署時,采用防火墻映射的方式進行部署,使得內外網分離,對外只提供80端口提供服務。
5.1.2 嚴格的訪問控制
服務器自身的防火墻進行嚴格的訪問控制,只允許內網中所需要的服務器進行訪問,進一步提高系統的安全性。
5.1.3 系統自身安全
除了外部對系統的防護之外,加強系統自身的安全也是很有必要的。系統在對用戶提交的表單進行了嚴格的過濾,包括URL,GET和POST參數,同時使用了開發語言提供的有準備語句來防止SQL注入攻擊。此外系統在接口處也進行了認證校驗,防止非法用戶讀取接口。
5.2 數據安全
為了保障數據的安全,定期進行數據備份是很有必要的。可通過Linux任務計劃,建立自動備份機制,具體的做法如下所示。
(1)每天0點,進行一次全量數據備份,并保存最近15個備份數據;
(2)每周一0點,將上一周的7個備份數據發布到遠程FTP服務器上,實現遠程備份數據存儲。
除了備份機制外,通過搭建MySQL集群的方式,來確保數據的可用性,即使某臺數據庫服務器丟失,也不會影響業務,且數據能夠快速恢復,為數據的安全提供了保障。
5.3 性能優化
對于系統性能優化,主要在數據緩存、數據庫讀寫分離兩個方面進行優化。
5.3.1 數據緩存
系統采用內存緩存與文件緩存的雙緩存機制,對系統不經常更新的數據進行緩存來提高系統的性能。例如在黑名單數據統計頁面中,可對查詢出來的數據進行緩存處理,將數據以JSON格式保存在內存和文件中,每15分鐘更新一次。針對每個黑名單的查詢結果則可以將其緩存1天。通過諸如上述的機制大大減少數據庫的查詢次數,達到減輕數據庫壓力的同時,提高頁面的響應速度。
5.3.2 讀寫分離
系統使用MySQL數據庫進行數據存儲,采用主從同步(一主兩從)的方式進行部署。數據庫進行更新數據時,其操作在主數據庫服務器上進行,進行查詢數據時則在從數據庫服務器上進行,并采用輪詢的方式查詢多臺從數據庫服務器。通過負載均衡的方式,來分攤數據庫壓力,進一步提高整個系統的性能。
5.3.3 路由聚合
由于黑名單數據量大,系統使用了路由聚合算法,將黑名單進行聚合,來減少數據的傳輸量,提高通信效率和應用效率。
6.1 黑名單查詢