◆阮晓龙 杨 明
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 黑名单查询