论文部分内容阅读
摘 要:随着互联网的快速发展,人民的生活和工作方式都演变了更加高效快捷的模式。但随着人民在众多领域愈发依赖于网络,信息安全的问题也凸显出来。提出一种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, people’s 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 数据备份 数据备份是指将原有的数据拷贝一份,生成一个原有的数据的副本,当原有的数据被破坏时,使用已备份的副本数据恢复原有数据。因此为了保障黑名单数据安全性,数据备份必不可少。
可通过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格式的黑名单数据如下例所示,获取与使用的方法与文本格式的使用方法基本一致。
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; ②添加静态路由 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报文的实现如下所示。 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.
关键词: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, people’s 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 数据备份 数据备份是指将原有的数据拷贝一份,生成一个原有的数据的副本,当原有的数据被破坏时,使用已备份的副本数据恢复原有数据。因此为了保障黑名单数据安全性,数据备份必不可少。
可通过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
… …
… …
… …
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; ②添加静态路由 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报文的实现如下所示。 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.