防火墙包过滤技术分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
防火墙包过滤技术分析
[摘要] 随着计算机网络技术的突飞猛进,网络安全的问题已经日益突出地摆在各类用户的面前。而防火墙已经成为一般企业用来保护自身网络安全的主要机制,因此对防火墙技术进行深入探讨是非常必要的。防火墙技术主要分为包过滤和应用代理两类。从数据包结构出发,分析包过滤技术,首先提出包过滤技术的核心问题;然后在分析传统包过滤技术缺陷的基础上,详细论述了包过滤技术的两种发展趋势。
[关键词] 防火墙包过滤动态包过滤深度包检测
一、引言
随着Internet的迅速发展,网络应用涉及到越来越多的领域,网络中各类重要的、敏感的数据逐渐增多;同时由于黑客入侵以及网络病毒的问题,使得网络安全问题越来越突出。因此,保护网络资源不被非授权访问,阻止病毒的传播感染显得尤为重要。就目前而言,对于局部网络的保护,防火墙仍然不失为一种有效的手段。防火墙技术主要分为包过滤和应用代理两类。其中包过滤作为最早发展起来的一种技术,其应用非常广泛。所谓包过滤,就是对流经网络防火墙的所有数据包逐个检查,并依据所制定的安全策略来决定数据包是通过还是不通过。包过滤最主要的优点在于其速度与透明性。也正是由于此,包过滤技术历经发展演变而未被淘汰。考虑包过滤技术的发展过程,可以认为包过滤的核心问题就是如何充分利用数据包中各个字段的信息,并结合安全策略来完成防火墙的功能。
二、包过滤防火墙工作原理
包过滤防火墙工作在OSI网络参考模型的网络层和传输层,它根据数据包头源地址,目的地址、端口号和协议类型等标志确定是否允许通过。只有满足过滤条件的数据包才被转发到相应的目的地,其余数据包则被从数据流中丢弃。
包过滤方式是一种通用、廉价和有效的安全手段。之所以通用,是因为它不是针对各个具体的网络服务采取特殊的处理方式,适用于所有网络服务;之所以廉价,是因为大多数路由器都提供数据包过滤功能,所以这类防火墙多数是由路由器集成的;之所以有效,是因为它能很大程度上满足了绝大多数企业安全要求。在整个防火墙技术的发展过程中,包过滤技术出现了两种不同版本,称为“第一代静态包过滤”和“第二代动态包过滤”。
(一)第一代静态包过滤
静态包过滤的防火墙根据定义好的过滤规则审查每个数据包,以便确定其是否与某一条包过滤规则匹配。过滤规则基于数据包的报头信息进行制订。报头信息中包括IP源地址、IP目标地址、传输协议(TCP、UDP、ICMP等等)、TCP/UDP 目标端口、ICMP消息类型等。包过滤类型的防火墙要遵循的一条基本原则是“最
小特权原则”,即明确允许那些管理员希望通过的数据包,禁止其他的数据包。
(二)第二代动态包过滤
动态包过滤的防火墙采用动态设置包过滤规则的方法,避免了静态包过滤所具有的问题。这种技术后来发展成为包状态监测技术。采用这种技术的防火墙对通过其建立的每一个连接都进行跟踪,并且根据需要可动态地在过滤规则中增加或更新条目。
三、传统包过滤技术缺点
传统包过滤技术,大多是在IP层实现,它只是简单的对当前正在通过的单一数据包进行检测,查看源/目的IP地址、端口号以及协议类型等,结合访问控制规则对数据包实施有选择的通过。这种技术实现简单,处理速度快,对应用透明,但是它存在的问题也很多,主要表现有:
1、所有可能会用到的端口都必须静态放开。若允许建立HTTP连接,就需要开放1024以上所有端口,这无疑增加了被攻击的可能性。
2、不能对数据传输状态进行判断。如接收到一个ACK数据包,就认为这是一个已建立的连接,这就导致许多安全隐患,一些恶意扫描和拒绝服务攻击就是利用了这个缺陷。
3、无法过滤审核数据包上层的内容。即使通过防火墙的数据包有攻击性或包含病毒代码,也无法进行控制和阻断。
综合上述问题,传统包过滤技术的缺陷在于:(1)缺乏状态检测能力;(2)缺乏应用防御能力。而问题的根本原因在于:(1)只对当前正在通过的单一数据包进行检测,而没有考虑前后数据包之间的联系;(2)只检查包头信息,而没有深入检测数据包的有效载荷。
四、包过滤防火墙工作过程
(一)截获网络封装包
截获数据包是实现一个防火墙的第一步,截获数据包的方法有很多种,既可以在用户态下拦截网络数据包,又可以在核心状态下进行数据包截获。
在用户态下进行网络数据包拦截有以下几种方法:
1、Winsock Layered ServiceProvider(LSP)。
2、Windows2000包过滤接口。
3、替换系统自带的WINSOCK动态连接库。
很显然,在用户态下可以很简单的进行数据包拦截,但其最致命的缺点就是只能在Winsock层次上进行,而对于网络协议栈中底层协议的数据包无法进行处理。对于一些木马和病毒来说很容易避开这个层次的防火墙。因此大多数的个人防火墙选择利用网络驱动程序来实现的。例如用中间层驱动程序来截获数据包。
中间层驱动介于协议层驱动和小端口驱动之间,它能够截获所有的网络数据包(如果是以太网那就是以太帧)。NDIS中间层驱动的应用很广泛,不仅仅是个人防火墙,还可以用来实现VPN,NAT,PPPOverEthernet以及VLan。中间层驱动的概念是在WindowNTSP4之后才有的,因此对于Windows9x来说无法直接利用中间层驱动的功能。WindowsDDK提供了两个著名的中间层驱动例子:Passthru以及Mux。开发人员可以在Passthru的基础上进行开发,Mux则实现了VLan功能。目前个人防火墙的产品还很少用到这种技术,主要的原因在于中间层驱动的安装过于复杂,尤其是在WindowsNT下。Windows2000下可以通过程序实现自动安装,但是如果驱动没有经过数字签名的话,系统会提示用户是否继续安装。中层层驱动功能强大,应该是今后个人防火墙技术的趋势所在,特别是一些附加功能的实现。
(二)驱动程序和应用程序间的通讯
当驱动程序截获网络数据包后,驱动程序要和应用程序进行通讯,通知应用程序对数据包进行判断,如果符合过滤规则,则接受数据包,否则,则放弃该数据包,其步骤大致如下:
1、应用程序创建一事件Event;
2、应用程序通过CreateFile创建驱动程序实例;
3、把该事件的句柄传给驱动程序;
4、驱动程序通过DeviceControl函数接受Event的句柄;
5、应用程序通过DeviceIOControl函数传递控制驱动程序的消息;
6、驱动程序通过Dispatch历程得到应用程序传来的消息,然后根据消息类型进行不同的服务;
7、把结果数据放入共享内存区,设置Event事件通知应用程序所请求的事情已经办完;
8、应用程序通过WaitForSingleObject来获知事件发生;
9、应用程序在共享内存区获得数据,并重置该事件。