基于linux的入侵防御系统的设计与实现

2013-08-29 17:00
大众科技 2013年12期
关键词:日志数据包防火墙

(广西经济信息中心,广西 南宁 530004)

1 引言

随着网络和计算机技术的不断发展,人类社会进入了一个崭新的互联网时代,互联网已成为人们生活、工作、学习和娱乐中不可或缺的重要部分。然而随着网络规模的不断扩大,针对网络和计算机的攻击事件也更频繁的发生。这些攻击不但让人们使用网络的正当需求得不到满足,有时甚至会带来严重的后果,对网络和信息安全构成了威胁。

目前,针对各种安全威胁的安全保护技术主要有加密和数字签名技术、身份认证与访问控制技术、防火墙技术、入侵检测技术(IDS)和入侵防御技术(IPS)等。这些技术除 IDS和 IPS外,都是静态的防御措施,在传输网络(Transmit Network)中无法防范针对大规模网络的、有组织的攻击行为,实时地检测入侵或破坏行为,难以保证网络系统的安全。入侵检测技术通过监控网络或系统资源,寻找违反安全策略的行为或攻击迹象,并发出报警。但入侵检测系统是被动的,只能在攻击实际发生之后发出警报。而入侵防御技术作为一种新的安全技术,弥补了传统安全技术的不足,提出了一种新的综合解决方案。

IPS是一种主动的、积极的防御入侵的系统,它部署在网络的关键路径上,检测通过它的网络流量。当检测到攻击企图时,它会自动地将攻击包丢掉或采取措施将攻击源阻断。相对于IDS的被动检测及误报等问题,IPS是一种比较主动、机智的防御系统。IPS的检测功能类似于IDS,但IPS检测到攻击后会采取行动阻止攻击,可以说IPS是一种基于IDS的、建立在IDS发展基础上的新生网络安全产品。

本文将以开源的Linux系统结合开源的Snort网络入侵检测系统来研究实现低成本的网络入侵防御系统,为中小型网络应用提供一个可行的安全保护。

2 基于Linux的入侵防御系统

2.1 系统结构设计

基于Linux的入侵防御系统的体系结构如图1所示。该系统由数据包过滤模块、入侵防御模块、动作模块和分析、报警模块,共4个模块组成。

图1 基于Linux的入侵防御系统体系结构

包过滤模块有两个功能:一是从以太网中捕获数据包,二是包过滤。其部署在外网接口上,流进入口的网络数据都要经过防火墙的处理。依据系统事先设定好的过滤规则,检查数据流中的每个数据包,根据TCP/IP数据包的包头信息来决定是否允许该数据包通过。包过滤的处理时间很少,几乎不占用CPU时间,而且速度快,易于维护。减少流进入侵检测模块的数据,避免过多消耗系统资源,使整个系统成为网络性能瓶颈。

入侵防御模块是入侵防御系统的核心模块。其依据规则库进行协议分析,根据分析结果提取出攻击源和攻击手段等信息,然后将分析获得的信息形成动作模块的处理指令,以指导动作模块对相应的数据包进行处理,并把响应信息写进日志库。在这里,规则库的匹配问题是关键,与规则库匹配成功, 就说明有入侵行为发生。规则库里规则的数量、质量和更新程度,加上规则匹配速度一起决定了入侵防御系统的性能。

动作模块在前边的模块对数据包进行过滤、检测、分析形成处理结果后,执行处理指令,对数据包丢弃、或记录、或给数据源响应。

分析、报警模块是对日志库进行数据统计、分析后得到人性化的报表,同时可以根据设置发出警报信息。

2.2 系统功能模块设计与实现

本文在Linux系统上构建了一个基于Snort_inline和由IPtables配置的Netfliter的IPS。实现的IPS可以检测可疑的网络流量,丢弃恶意的数据包,或者阻断恶意的数据流,支持4-7层的入侵检测和防御。下面详述组成入侵防御系统各模块的设计以及实现。

(1)数据包过滤模块

本系统应用基于Netfilter 的数据包捕获方式,通过调用BPF 机制的 Libpcap 函数库函数 能够很方便捕获网络数据包。然后以IPtables配置的Netfilter防火墙根据预先定义好的安全策略对捕获网络数据包进行过滤,如果网络数据包是可信源的数据包,就直接让它通过该检测系统;如果网络数据包是防火墙策略定义内的恶意数据包,就直接丢弃;最后把过滤后需要检测的数据包送进QUEUE数据队列中等待Snort_inline入侵检测系统进行检测。通过这样对网络数据包进行预处理后,可以减少检测的匹配负载,降低系统资源的消耗,从而提高系统的性能。

IPS在网络中必须以透明网桥式存在,才能灵活部署而且不改变原有网络拓扑结构。为支持网桥式防火墙,Linux2.4及以上内核提供了Netfilter和Iptables(数据包过滤模块也通过它们实现)来实现,Linux2.6以上内核自带配置网桥的工具bridge-utils。故本系统选择的Linux版本内核需在2.6以上。

(2)入侵防御模块

网络入侵防御系统的核心模块——入侵防御模块由入侵检测系统Snort的Snort_inline模式组成。

Snor是一套开放源代码(open source)的网络入侵检测软件(IDS)。Snort使用了以侦测签章(signature-based)与通讯协议(protocol)的侦测方法。它是一个可以实时监视网络通信的数据包嗅探器。通过协议分析和内容搜索与匹配,Snort能够检测各种攻击方法,包括拒绝服务器攻击、缓冲区溢出、CGI攻击、秘密的端口扫描等。截至目前为止,Snort的被下载次数已达到数百万次。 Snort 被认为是全世界最广泛使用的入侵检测软件。

新版本的Snort有四种工作模式:

➢ 嗅探器模式(Sniffer Mode):从网络中抓取数据包,并作为连续不断的流显示在终端上 ;

➢ 数据包记录器模式(packet logger Mode):将数据包记录到硬盘日志中;

➢ 网络入侵检测模式(NIDS Mode):分析网络中传输的数据并与入侵规则库相匹配来发现入侵行为并告警;

➢ 在线模式(Inline Mode):将snort当成IPS,从iptable读取数据包跟规则库对比后,告诉iptable是否要把该数据包丢掉或是让它通过。

这里使用Snort的在线模式。Snort_inline的入侵防御过程包括读取数据包、入侵检测和处理数据包3个步骤。

①读取数据包

Snort_inline使用libipq 库,通过netlink 接口从内核态的Netfilter 的QUEUE数据队列中获取数据包。Snort的数据包解析过程由decode()函数来完成,原理是按照从链路层到传输层各种协议的相应格式去分析得到的数据流,并把所得结果填充数据结构Packet。在入侵防御系统的实现中,数据包读取过程中已经进行了包的分片重组等工作,发送到入侵检测引擎的数据包是完整的。

②入侵检测

Snort_inline根据命令行参数进行初始化,由参数设定工作方式,解析规则库,把规则库中的规则(rules)生成二维规则链表。Snort_inline的数据包处理函数ProcessPacket()对解析过的数据包进行入侵检测。数据包处理函数PreocessPacket()首先调用设置好的解析函数对数据包进行协议解析,并设置Packet数据结构,根据需求输出或者忽略对数据包各层协议的解析结果,然后调用主检测引擎。检测函数Detect()按照一定的顺序应用规则链表进行检测,最后返回入侵检测处理的结果。

③处理数据包

对数据包进行入侵检测以后,根据与规则库中规则

(rules)匹配的结果,用libipq库函数ipq_set_verdict通过netlink接口与IPtables配置的Netfilter通讯,针对每个数据包发出相应的处理指令。Snort_inline实现入侵防御功能有四种动作drop、sdrop、reject和replace。

➢ drop:Netfilter将数据包丢弃,并且根据Snort配置文件中的设置记录日志;

➢ sdrop:Netfilter将数据包丢弃,并不记录日志;

➢ reject:告诉IPtables配置的Netfliter将数据包丢弃,记录日志,并且通过libnet库函数发送TCP的reset回去或UDP的ICMP端口不能到达的信息回去。

➢ replace:可以让rules修改数据包内容,但修改内容的资料长度要与原始数据包的资料内容长度一样,然后把替换处理过的包发送给Netfilter。

(4)动作模块

动作模块由IPtables配置的Netfilter防火墙组成,其接收入侵防御模块的指令,对数据包执行四种操作drop、sdrop、reject和replace中的一种。

(5)分析、报警模块

分析、报警模块由BASE充当。其处理、统计分析入侵防御模块存储于MySQL数据库中的日志,可以自定义警报的发生以及显示信息的格式。

综上所述,基于Linux的入侵防御系统的实现涉及的软件程序有:

➢ Linux操作系统:CentOS 是当前最流行的商业版 Linux-- Red Hat Enterprise Linux

(RHEL)的克隆版,是RHEL源代码再编译的产物 。它和 RHEL 的区别除了没有 RHEL 一样的技术支持以外,就是去掉了RHEL的商标信息,修正了 RHEL 已知的一些 Bug,所以,其稳定性值得我们信赖。 还有,它是开源免费的。

选用CentOS 5.3,其对应Red Hat Enterprise Linux 5.3版本,核心是linux kernel version 2.6.27(2008.10.10发布)。

➢ IPtables配置的Netfilter防火墙,内核2.4版本以上Linux支持。

➢ Snort:选用Snort2.8.4.1版。

➢ MySQL数据库:MySQL5.1以上版本。

➢ BASE:日志分析工具。

➢ oinkmaster:规则库更新组件。

➢ 支持库:ip_queue、libipq、libdnet、libpcap、 pcre、ptables-devel等;

入侵防御系统数据流程图如下所示:

图2 入侵防御系统数据流程图

3 结束语

本文将入侵检测软件Snort 和防火墙框架Netfilter有机地结合在一起,设计与实现了一个Linux下基于Snort_inline和Netfilter/IPtables的入侵防御系统,其应用能进一步提高网络系统的安全。但,该系统还存在一些不足,比如在实际应用中存在单点故障等。这需要进一步进行研究解决。

[1]衣治安,裴蕾.基于Snort和Netfilter的入侵防御系统[J].齐齐哈尔大学学报,2007,(5).

[2](美)Steve Suehring/ Robert L.Ziegler/. Linux 防火墙[M].何泾沙,等译.机械工业出版社,2006:41-44.

[3]Jay Beale, Andrew R. Baker, Joel Esler, et al. Snort IDS and IPS Toolkit. Syngress Media Inc,2007:176-219.

[4]Jay Beale, Andrew R. Baker, Joel Esler, et al. Snort IDS and IPS Toolkit. Syngress Media Inc,2007:604-616.

猜你喜欢
日志数据包防火墙
二维隐蔽时间信道构建的研究*
一名老党员的工作日志
民用飞机飞行模拟机数据包试飞任务优化结合方法研究
扶贫日志
构建防控金融风险“防火墙”
SmartSniff
游学日志
在舌尖上筑牢抵御“僵尸肉”的防火墙
下一代防火墙要做的十件事
一种基于粗集和SVM的Web日志挖掘模型