基于互联网多数据源的IP黑名单的聚合与应用实现

计算技术与自动化 / 2018年04月29日 05:23

数码

基于互联网多数据源的ip黑名单的聚合与应用实现-还是遛狗,无聊太阳多大(看地上滴影子),lei 小姐要遛狗我都得陪着...

阮晓龙+杨明

摘 要:随着互联网的快速发展,人民的生活和工作方式都演变了更加高效快捷的模式。但随着人民在众多领域愈发依赖于网络,信息安全的问题也凸显出来。提出一种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

success

1.0.151.84

1.0.182.122

1.1.164.230

… …

1.22.124.237

1.23.103.205

1.28.144.183

… …

… …

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

1.环球科技网遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.环球科技网的原创文章,请转载时务必注明文章作者和"来源:环球科技网",不尊重原创的行为环球科技网或将追究责任;3.作者投稿可能会经环球科技网编辑修改或补充。