防火墙包过滤规则的优化和分析.docx
《防火墙包过滤规则的优化和分析.docx》由会员分享,可在线阅读,更多相关《防火墙包过滤规则的优化和分析.docx(27页珍藏版)》请在冰豆网上搜索。
![防火墙包过滤规则的优化和分析.docx](https://file1.bdocx.com/fileroot1/2023-4/20/10cb2827-dabe-4a55-b64f-fcb843cdacf6/10cb2827-dabe-4a55-b64f-fcb843cdacf61.gif)
防火墙包过滤规则的优化和分析
第一章引言
1.1课题的国内外概况
包过滤防火墙是最简单的一种防火墙,它在网络层截获网络数据包,根据防火墙的规则表,来检测攻击行为。
包过滤防火墙一般作用在网络层(IP层),故也称网络层防火墙(NetworkLevFirewall)或IP过滤器(IPfilters)。
数据包过滤(PacketFiltering)是指在网络层对数据包进行分析、选择。
通过检查数据流中每一个数据包的源IP地址、目的IP地址、源端口号、目的端口号、协议类型等因素或它们的组合来确定是否允许该数据包通过。
在网络层提供较低级别的安全防护和控制。
包过滤防火墙工作在网络层,对数据包的源及目地IP具有识别和控制作用,对于传输层,也只能识别数据包是TCP还是UDP及所用的端口信息,如下图所示。
现在的路由器、SwitchRouter以及某些操作系统已经具有用PacketFilter控制的能力。
由于只对数据包的IP地址、TCP/UDP协议和端口进行分析,包过滤防火墙的处理速度较快,并且易于配置。
简单介绍近年来,Internet的快速增长促进了信息技术的飞速发展,它的迅猛成长正在使世界成为一个整体。
但随之而来的是数据的完整性与安全性问题。
人们一方面要把自己的内部网接入Internet,以便公司成员可以最大可能地利用Internet上的资源,同时大家都需要把自己的数据有意识地保护起来,以防数泄密及受到外界对内部系统的恶意破坏。
而当前能采用的有效措施就是防火墙。
防火墙大致可以分为两大类:
包过滤防火墙和代理防火墙。
其中包过滤技术由于可以与现有的路由器集成,也可以用独立的包过滤软件实现,使用较灵活,应用比较广泛。
本文由此展开,主要介绍包过滤。
开始文章介绍了一些网络的基本概念,数据包截取需要用到的非常重要的库函数winpcap的结构。
在此基础上回顾了当前包过滤技术研究的进展和现状,着重介绍了包过滤的原理、以及优点和缺点。
最后介绍了一个在单机上实现的简单的对指定端口实现数据包抓取的程序。
随着网络技术的飞速发展,网络安全问题日益突出。
防火墙是目前广泛使用的一种网络安全技术,已成为企业内部与公用网络之间的一道必备的屏障,个人用户也纷纷安装了个人防火墙软件。
防火墙往往放在网络的出口,成为一个信息流量的阻塞点,若造成网络阻塞,再安全的防火墙也无法应用。
在实现中需要解决的主要问题是如何提高包过滤的性能。
本文研究目标是实现一种基于Windows的包过滤型防火墙。
其核心问题是如何基于NDIS中间驱动程序在Windows内核中截获数据包,并提高包过滤的性能。
1.2本论文题目的理论意义和实用价值
防火墙技术的发展离不开社会需求的变化,着眼未来,我们注意到以下几个新的需求。
·远程办公的增长。
这次全国主要城市先后受到SARS病毒的侵袭,直接促成大量的企事业在家办公,这就要求防火墙既能抵抗外部攻击,又能允许合法的远程访问,做到更细粒度的访问控制。
现在一些厂商推出的VPN(虚拟专用网)技术就是很好的解决方式。
只有以指定方式加密的数据包才能通过防火墙,这样可以确保信息的保密性,又能成为识别入侵行为的手段。
·内部网络“包厢化”(compartmentalizing)。
人们通常认为处在防火墙保护下的内网是可信的,只有Internet是不可信的。
由于黑客攻击技术和工具在Internet上随手可及,使得内部网络的潜在威胁大大增加,这种威胁既可以是外网的人员,也可能是内网用户,不再存在一个可信网络环境。
由于无线网络的快速应用以及传统拨号方式的继续存在,内网受到了前所未有的威胁。
企业之前的合作将合作伙伴纳入了企业网络里,全国各地的分支机构共享一个论坛,都使可信网络的概念变得模糊起来。
应对的办法就是将内部网细分成一间间的“包厢”,对每个“包厢”实施独立的安全策略。
Internet的迅速发展,为人们提供了发布信息和检索信息的场所,但同时它也带来了信息污染和信息被破坏的危险,网络的安全性问题已成为一个重要研究课题。
在Internet上存在两种安全性问题:
①Internet服务本身所固有的脆弱性;②主机配置和访问控制难于实现或过于复杂而产生的安全漏洞。
Internet安全的脆弱性的表现形式主要有Internet蠕虫(Worm),身份验证机制的脆弱性,网上传输的信息易窃取及易被欺骗等。
其中蠕虫程序与计算机病毒有区别,它是一个独立、完整的程序,本身并不损坏任何文件或窃取信息,但它严重干扰了网络的正常操作,使受感染的计算机处于重负载状态,拒绝其他机器用户的服务请求。
而通过破译口令的加密方式和截获传递口令报文的方法,就可以获得该帐户的权限,其身份验证机制的脆弱性由此表现出来。
特别是一些TC或UD服务的身份验证仅仅依赖报文中的IP地址,管理员不能对某个用户定义访问权限,必须以主机为单位来定义访问权限,该主机上所有用户的权限都一样,这样就容易产生安全问题.当使用Telnet或FTP与远程主机相连并进行身份验证时,使用的用户口令以明文的形式在Internet上传输,这样只需监视、截获连接中包含用户名和口令的IP报文,就很容易获得某台主机的帐户。
E-mail在网上也是以明文传输,通过监视网上交换的电子邮件可以获得有关某个站点的信息。
第二章包过滤防火墙技术
2.1包过滤防火墙技术简介
防火墙是专用网络系统,旨在防止XX的访问或从。
防火墙是用于防止XX的Internet网络的互联网连接的用户访问私营,尤其是内部网,虽然使用防火墙保护互联网从单一的电脑也越来越大,随着越来越多的电脑用户成为世界知道,网络安全问题的。
防火墙可以是即时通讯在硬件和软件,或两者相结合的,一般可分为下列之一类别:
数据包过滤,应用网关,电路级网关和代理服务器。
虽然他们都不同层次的不同情况在实用性和缺点,本文只处理数据包过滤器,如他们更有可能得到有效的硬件实现研究。
包过滤字段的标题是基于他们对网络资源的众所周知的方法限制访问滤波要求的能力,按照指定的数据包分类过滤规则。
这些规则可以看作是头字段的逻辑功能的数据包。
分类数据包也出现在计算其他领域,如路由,策略路由,区分交通服务质量,然而,并非所有的人都使用或需要分类的基础上多包头中的字段。
例如,一个简单的包转发路由器只需要根据数据包进行分类在一个领域(目的地的IP地址)来执行正确的路线。
过滤的概念和分类是紧密联系在一起,因此,这些条款将用于在本文件比较松散,除非区别要避免混淆。
总的想法包过滤,或分类,是人开始在后来扩大由他人创立和雅各布森,虽然包分类问题时,防火墙的主要焦点本文件的背景是计算机网络在许多领域。
快速和有效的数据包分类在多个领域的头是一个具有挑战性的问题。
主要有两种方法来实施该系统的过滤:
翻译为基础和模式为基础。
第一种方法由一个指令集的规范规则和一名翻译引擎解释处理能力的指示表,而后者匹配图案用一些比较机制,不需要翻译引擎。
它也可以使用这些做法都一起实现方便和效率之间的平衡。
防火墙是内部、外部两个网络之间的一个阻隔,通过允许和拒绝经过防火墙的数据流,防止不希望的、未授权的通信,并实现对进、出内部网络的服务和访问的审计和控制防火墙对网络用户提供访问控制服务和通信安全服务,对网络用户基本上是“透明”的,并且只有授权的管理员方可对防火墙进行管理。
防火墙一般要解决的安全问题可分为被保护系统(即内部网)的安全问题和自身的安全问题。
防火墙产品主要分为两类:
包过滤和应用级防火墙本标准规定了包过滤防火墙的各级安全要求。
包过滤防火墙根据安全功能策略建立包过滤规则。
过滤规则的主要要素有源IP地址、目的IP地址、协议号、源端口、目的端口、连接标志和另外一些IP选项,以及包到达或发出的接口。
包过滤防火墙工作在网络层,对数据包的源及目地IP具有识别和控制作用,对于传输层,也只能识别数据包是TCP还是UDP及所用的端口信息,如下图所示。
现在的路由器、SwitchRouter以及某些操作系统已经具有用PacketFilter控制的能力。
由于只对数据包的IP地址、TCP/UDP协议和端口进行分析,包过滤防火墙的处理速度较快,并且易于配置。
包过滤防火墙是用一个软件查看所流经的数据包的包头(header),由此决定整个包的命运。
它可能会决定丢弃(DROP)这个包,可能会接受(ACCEPT)这个包(让这个包通过),也可能执行其它更复杂的动作。
在Linux系统下,包过滤功能是内建于核心的(作为一个核心模块,或者直接内建),同时还有一些可以运用于数据包之上的技巧,不过最常用的依然是查看包头以决定包的命运。
2.2防火墙包过滤技术的特点
包过滤防火墙工作在网络层,对数据包的源及目地IP具有识别和控制作用,对于传输层,也只能识别数据包是TCP还是UDP及所用的端口信息,如下图所示。
现在的路由器、SwitchRouter以及某些操作系统已经具有用PacketFilter控制的能力。
由于只对数据包的IP地址、TCP/UDP协议和端口进行分析,包过滤防火墙的处理速度较快,并且易于配置。
(1)优点:
●对于一个小型的、不太复杂的站点,包过滤比较容易实现。
●因为过滤路由器工作在IP层和TCP层,所以处理包的速度比代理服务器快。
●过滤路由器为用户提供了一种透明的服务,用户不需要改变客户端的任何应用程序,也不需要用户学习任何新的东西。
因为过滤路由器工作在IP层和TCP层,而IP层和TCP层与应用层的问题毫不相关。
所以,过滤路由器有时也被称为“包过滤网关”或“透明网关”,之所被称为网关,是因为包过滤路由器和传统路由器不同,它涉及到了传输层。
●过滤路由器在价格上一般比代理服务器便宜。
(2)缺点:
●一些包过滤网关不支持有效的用户认证。
●规则表很快会变得很大而且复杂,规则很难测试。
随着表的增大和复杂性的增加,规则结构出现漏洞的可能性也会增加。
●这种防火墙最大的缺陷是它依赖一个单一的部件来保护系统。
如果这个部件出现了问题,会使得网络大门敞开,而用户其至可能还不知道。
●在一般情况下,如果外部用户被允许访问内部主机,则它就可以访问内部网上的任何主机。
●包过滤防火墙只能阻止一种类型的IP欺骗,即外部主机伪装内部主机的IP,对于外部主机伪装外部主机的IP欺骗却不可能阻止,而且它不能防止DNS欺骗。
虽然,包过滤防火墙有如上所述的缺点,但是在管理良好的小规模网络上,它能够正常的发挥其作用。
一般情况下,人们不单独使用包过滤网关,而是将它和其他设备(如堡垒主机等)联合使用。
综上可见,包过滤防火墙技术面太过初级,就好比一位保安只能根据访客来自哪个省市来判断是否允许他(她)进入一样,难以履行保护内网安全的职责。
2.3包过滤防火墙工作原理
包过滤防火墙工作在OSI网络参考模型的网络层和传输层,它根据数据包头源地址,目的地址、端口号和协议类型等标志确定是否允许通过。
只有满足过滤条件的数据包才被转发到相应的目的地,其余数据包则被从数据流中丢弃。
包过滤方式是一种通用、廉价和有效的安全手段。
之所以通用,是因为它不是针对各个具体的网络服务采取特殊的处理方式,适用于所有网络服务;之所以廉价,是因为大多数路由器都提供数据包过滤功能,所以这类防火墙多数是由路由器集成的;之所以有效,是因为它能很大程度上满足了绝大多数企业安全要求。
在整个防火墙技术的发展过程中,包过滤技术出现了两种不同版本,称为“第一代静态包过滤”和“第二代动态包过滤”。
第一代:
静态包过滤
这种类型的防火墙根据定义好的过滤规则审查每个数据包,以便确定其是否与某一条包过滤规则匹配。
过滤规则基于数据包的报头信息进行制订。
报头信息中包括IP源地址、IP目标地址、传输协议(TCP、UDP、ICMP等等)、TCP/UDP目标端口、ICMP消息类型等。
包过滤类型的防火墙要遵循的一条基本原则是“最小特权原则”,即明确允许那些管理员希望通过的数据包,禁止其他的数据包。
图2.3.1简单包过滤防火墙
第二代:
动态包过滤
这种类型的防火墙采用动态设置包过滤规则的方法,避免了静态包过滤所具有的问题。
这种技术后来发展成为所谓包状态监测(StatefulInspection)技术。
采用这种技术的防火墙对通过其建立的每一个连接都进行跟踪,并且根据需要可动态地在过滤规则中增加或更新条目。
图2.3.2动态包过滤防火墙
包过滤方式的优点是不用改动客户机和主机上的应用程序,因为它工作在网络层和传输层,与应用层无关。
但其弱点也是明显的:
过滤判别的依据只是网络层和传输层的有限信息,因而各种安全要求不可能充分满足;在许多过滤器中,过滤规则的数目是有限制的,且随着规则数目的增加,性能会受到很大地影响;由于缺少上下文关联信息,不能有效地过滤如UDP、RPC一类的协议;另外,大多数过滤器中缺少审计和报警机制,它只能依据包头信息,而不能对用户身份进行验证,很容易受到“地址欺骗型”攻击。
对安全管理人员素质要求高,建立安全规则时,必须对协议本身及其在不同应用程序中的作用有较深入的理解。
因此,过滤器通常是和应用网关配合使用,共同组成防火墙系统。
包过滤是一种内置于Linux内核路由功能之上的防火墙类型,其防火墙工作在网络层。
(1)使用过滤器。
数据包过滤用在内部主机和外部主机之间,过滤系统是一台路由器或是一台主机。
过滤系统根据过滤规则来决定是否让数据包通过。
用于过滤数据包的路由器被称为过滤路由器。
数据包过滤是通过对数据包的IP头和TCP头或UDP头的检查来实现的,主要信息有:
●IP源地址
●IP目标地址
●协议(TCP包、UDP包和ICMP包)
●TCP或UDP包的源端口
●TCP或UDP包的目标端口
●ICMP消息类型
●TCP包头中的ACK位
●数据包到达的端口
●数据包出去的端口
在TCP/IP中,存在着一些标准的服务端口号,例如,HTTP的端口号为80。
通过屏蔽特定的端口可以禁止特定的服务。
包过滤系统可以阻塞内部主机和外部主机或另外一个网络之间的连接,例如,可以阻塞一些被视为是有敌意的或不可信的主机或网络连接到内部网络中。
(2)过滤器的实现。
数据包过滤一般使用过滤路由器来实现,这种路由器与普通的路由器有所不同。
普通的路由器只检查数据包的目标地址,并选择一个达到目的地址的最佳路径。
它处理数据包是以目标地址为基础的,存在着两种可能性:
若路由器可以找到一个路径到达目标地址则发送出去;若路由器不知道如何发送数据包则通知数据包的发送者“数据包不可达”。
过滤路由器会更加仔细地检查数据包,除了决定是否有到达目标地址的路径外,还要决定是否应该发送数据包。
“应该与否”是由路由器的过滤策略决定并强行执行的。
路由器的过滤策略主要有:
●拒绝来自某主机或某网段的所有连接。
●允许来自某主机或某网段的所有连接。
●拒绝来自某主机或某网段的指定端口的连接。
●允许来自某主机或某网段的指定端口的连接。
●拒绝本地主机或本地网络与其它主机或其它网络的所有连接。
●允许本地主机或本地网络与其它主机或其它网络的所有连接。
●拒绝本地主机或本地网络与其它主机或其它网络的指定端口的连接。
●允许本地主机或本地网络与其它主机或其它网络的指定端口的连接。
2.4数据包过滤技术
这种技术是在网络中适当的位置对数据包实施有选择的通过,选择依据,即为系统内设置的过滤规则(通常称为访问控制表-----AccessControlList),只有满足过滤规则的数据包才被转发至相应的网络接口,其余数据包则被从数据流中删除。
包过滤在本地端接收数据包时,一般不保留上下文,只根据目前数据包的内容做决定。
根据不同的防火墙的类型,包过滤可能在进入、输出时或这两个时刻都进行。
可以拟定一个要接受的设备和服务的清单,一个不接受的设备和服务的清单,组成访问控制表。
在主机或网络级容易用包过滤接受或决绝访问,例如,可以允许主机A和主机B之间的任何IP访问,或者拒绝除A外的任何设备对B的访问。
包过滤的设置:
⑴必须知道什么是应该和不应该被允许的,即必须制定一个安全策略。
⑵必须正式规定允许的包类型、包字段的逻辑表达。
⑶必须用防火墙支持的语法重写表达式。
下面是我就一个简单的按地址数据包过滤方式,它按照源地址进行过滤。
比如说,认为网络202.110.8.0是一个危险的网络,那么就可以用源地址过滤禁止内部主机和该网络进行通信。
在网络中数据是以数据包的形式传输的。
这样,当数据包经过防火墙时,防火墙可以检查数据包中的那些信息,然后根据规则决定是否允许该包通过,就源地址过滤而言,防火墙只要检查目标地址和源地址就可以了。
表1.1表示的是根据上面的政策所制定的规则。
表1.1表示的是根据上面的政策所制定的规则。
表1.1过滤规则示例
规则
方向
源地址
目标地址
动作
A
出
内部网络
202.110.8.0
拒绝
B
入
202.110.8.0
内部网络
拒绝
这种方式没有利用全部信息,对于当今网络攻击的发展以无法满足防火墙的需求,下面是一种更为先进的过滤方式——按服务过滤。
假设安全策略是禁止外部主机访问内部的E-mail服务器(SMTP,端口25),允许内部主机访问外部主机,实现这种的过滤的访问控制规则类似表1.2。
规则按从前到后的顺序匹配,字段中“*”代表任意值,没有被过滤器规则明确允许的包将被拒绝。
就是说,每一条规则集都跟随一条含蓄的规则,就像表1.2中的规则C。
这与一般原则是一致的:
没有明确允许就被禁止。
任何一种协议都是建立在双方的基础上的,信息流也是双向的,所以在考虑允许内部用户访问Internet时,必须允许数据包不但可以出站而且可以入站。
同理,若禁止一种服务,也必须从出站和入站两方面制定规则,规则总是成对出现的。
表1.2规则表
规则
方向
动作
源地址
源端口
目的地址
目的端口
注释
A
进
拒绝
m
*
E-mail
25
不信任
B
出
允许
*
*
*
*
允许联接
C
双向
拒绝
*
*
*
*
缺省状态
下面,通过一个包过滤实例来讲解分析。
第一,假设处于一个C类网116.111.4.0,认为站点202.208.5.6上有不健康的BBS,所以希望阻止网络中的用户访问该点的BBS;再假设这个站点的BBS服务是通过Telnet方式提供的,那么需要阻止到那个站点的的出站Telnet服务,对于Internet的其他站点,允许内部网用户通过Telnet方式访问,但不允许其他站点以Telnet方式访问网络。
第二,为了收发电子邮件,允许SMTP出站入站服务,邮件服务器是IP地址为116.111.4.1。
第三,对于WWW服务,允许内部网用户访问Internet上任何网络和站点,但只允许一个公司的网络访问内部WWW服务器,内部WWW服务器的IP地址为116.111.4.5,因为你们是合作伙伴关系,那个公司的网络为98.120.7.0。
根据上面的安全策略可以得到表1.3。
表1.3过滤规则示例
规则
方向
源地址
目标地址
协议
源端口
目标端口
ACK设置
动作
A
出
116.111.4.0
202.108.5.6
TCP
>1023
23
任意
拒绝
B
入
202.108.5.6
116.111.4.0
TCP
23
>1023
是
任意
C
出
116.111.4.0
任意
TCP
>1023
23
任意
允许
D
入
任意
116.111.4.0
TCP
23
>1023
是
允许
E
出
116.111.4.1
任意
TCP
>1023
25
任意
允许
F
入
任意
116.111.4.1
TCP
25
>1023
是
允许
G
入
任意
116.111.4.1
TCP
>1023
25
任意
允许
H
出
116.111.4.1
任意
TCP
25
>1023
任意
允许
I
出
116.111.4.0
任意
TCP
>1023
80
任意
允许
J
入
任意
116.111.4.0
TCP
80
>1023
是
允许
K
入
98.120.7.0
116.111.4.5
TCP
>1023
80
任意
允许
L
出
116.111.4.5
98.120.7.0
TCP
80
>1023
任意
允许
M
双向
任意
任意
任意
任意
任意
规则A、B用来阻止你的内部主机以Telnet服务形式联接到站202.108.5.6,规则C、D允许你的内部主机以Telnet方式访问Internet上的任何主机。
这似乎和我们的政策发生了矛盾,但事实上并部矛盾。
在前面提到过规则的次序是十分重要的,而且防火墙实施规则的特点是当防火墙找到匹配的规则后就不再向下应用其他的规则,所以当内部网主机访问站点202.108.5.6,并试图通过Telnet建立联接时,这个联接请求会被规则A阻塞,因为规则A正好与之相匹配。
至于规则B,实际上并非毫无用处,规则B用来限制站点202.108.5.6Telnet服务的返回包。
事实上,内部主机试图建立Telnet联接时就会被阻塞,一般不会存在返回包,但高明的用户也可能想出办法使联接成功,那时B规则也会有用,总之,有些冗余对安全是有好处的。
当用户以Telnet方式访问除202.105.5.6之外的其他站点时,规则A、B不匹配,所以应用C、D规则,内部主机被允许建立联接,返回包也被允许入站。
规则E、F用于允许出站的SMTP服务,规则G、H用于允许入站的SMTP服务,SMTP服务的端口是25。
I和J规则用于允许出站的WWW服务,K、L规则用于允许网络95.120.7.0的主机访问你的网络WWW服务器。
规则M是默认项,它实现的准则是“没有明确允许就表示禁止”。
2.5数据包过滤类型
2.5.1.IP包过滤
IP分段字段用来确定数据包在传输过程中是否被重新分段,分段带来的问题是只有第一个段有高层协议的报头(如TCP头),而其他的段中没有。
数据包过滤器一般是让非首段包通过,而仅对第一个分段进行过滤,因为目标主机如果得不到第一个分段,也就不能组装一个完整的数据包,因此这样做是可以接受的。
强大的防火墙应该考虑非第一个分段有可能泄露有用的信息,比如出站的NFS数据包几乎肯定要分段,内部网中的敏感数据经过NFS传输可能会泄露,因此防火墙要根据第一个分段的操作策略来决定是否转发非第一个分段。
IP分段也经常用来进行拒绝服务攻击。
攻击者向目标主机发送第一个分段包,防火墙对这种包不作处理直接让其通过,目标主机得不到第一个分段来重组数据包时,会放弃该包,同时发一个ICMP“数据组装超时”的包给源主机。
如果目标主机大量收到这种非第一个分段包,它需要占用大量的CPU时间来处理。
当达到一定极限之后,目标主机就不能处理正常的服务了,而造成拒绝服务攻击。
此外返回的ICMP也会泄露有用的消息,因此对这种ICMP,防火墙应该过滤掉。
2.5.2.TCP包过滤
TCP是面向联接的可靠传输协议,TCP的可靠主要是通过下面三条来保证的:
目标主机将按发送的顺序接受应用数据;目标主机将接受所有的应用数据;目标主机将不重复接受任何数据。
TCP协议通过对错误的数据重传来保证数据可靠到达,并且事先要建立起联接才能传输。
如果要阻止TCP的联接,仅阻止第一个联接请求包就够了。
因为