分享
 
 
 

理解防火墙及防火墙实例系列:部分1

王朝other·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

理解防火墙及防火墙实例系列: 第一部分

防火墙基本类型、概念以及各类防火墙的主要优缺点

developerWorks

级别: 初级

宫一鸣, 中国电信网络安全小组核心成员

2002 年 12 月 01 日

本文将分为两部分,第一部分将介绍防火墙基本类型和概念,以及每类防火墙的主要优缺点,然后是选购配置防火墙的时候一些误区;第二部分将结合第一部分内容介绍unix下的防火墙软件ipfilter,包括该软件的介绍、安装、具体应用等。

什么是防火墙

对于企业的网络而言,未加特别安全保护而放置在internet上,危险性是显而易见的。随着决策层对安全认识的逐步加强,防火墙,作为一种应用非常广泛,技术相对比较成熟的网络安全产品也在不同的企业愈来愈多的得到了重视。然而一个现实的问题是目前关于防火墙的名词以及厂家基于商业目的宣称花样为数众多,这就给使用者选择和应用防火墙带来了一定的误解和困难。那么什么是防火墙,主要的防火墙之间如何区别呢?

对于防火墙的概念,我们可以这样理解:防火墙是在两个网络间实现访问控制的一个或一组软件或硬件系统。防火墙的最主要功能就是屏蔽和允许指定的数据通讯,而该功能的实现又主要是依靠一套访问控制策略,由访问控制策略来决定通讯的合法性。

那么如何理解种类众多的防火墙呢,下面来做个介绍。

防火墙的类型

如果我们从OSI分层模式来考察及分类防火墙,会比较容易的把握住防火墙的脉络,个人认为,目前主要的防火墙可以分为三类,它们分别是: 包过滤防火墙、基于状态的包过滤防火墙、应用代理(网关)防火墙,而由这三类防火墙可以推导和演绎出其它可能的变化。

下面我们来逐一说明。

包过滤防火墙

首先,我们要提到的是最基本的报文过滤的防火墙,这个层次的防火墙通常工作在OSI的三层及三层以下,由此我们可以看出,可控的内容主要包括报文的源地址、报文的目标地址、服务类型,以及第二层数据链路层可控的MAC地址等。除此以外,随着包过滤防火墙的发展,部分OSI四层的内容也被包括进来,如报文的源端口和目的端口。

本层次最常见的实际应用的例子就是互联网上的路由设备,比如常见的cisco路由器,使用者可以通过定制访问控制列(ACL)来对路由器进出端口的数据包进行控制,如针对rfc1918的保留地址进屏蔽,在路由器上可以进行如下配置:

interface x

ip access-group 101 in

access-list 101 deny ip 10.0.0.0 0.255.255.255 any

access-list 101 deny ip 192.168.0.0 0.0.255.255 any

access-list 101 deny ip 172.16.0.0 0.15.255.255 any

access-list 101 permit ip any any

从上面这个例子可以很明显的看出,路由器这里的配置完全是针对OSI的三层ip地址,也就是ip的包头进行过滤,至于这些IP数据包里携带的具体有什么内容,路由器完全不会去关心。

由此考虑一下,我们就不难看出这个层次的防火墙的优点和弱点:

1. 基于报文过滤的防火墙一个非常明显的优势就是速度,这是因为防火墙只是去检察数据包的包头,而对数据包所携带的内容没有任何形式的检查,因此速度非常快。

2. 还有一个比较明显的好处是,对用户而言,包过滤防火墙是透明的,无需用户端进行任何配置。

包过滤防火墙的特性决定了它很适合放在局域网的前端,由它来完成整个安全工作环节中的数据包前期处理工作,如:控制进入局域网的数据包的可信任ip,对外界开放尽量少的端口等。与此同时,这种防火墙的弊端也是显而易见的,比较关键的几点包括:

1. 由于无法对数据包及上层的内容进行核查,因此无法过滤审核数据包的内容。体现这一问题的一个很简单的例子就是:对某个端口的开放意味着相应端口对应的服务所能够提供的全部功能都被放开,即使通过防火墙的数据包有攻击性,也无法进行控制和阻断。比如针对微软IIS漏洞的Unicode攻击,因为这种攻击是走的防火墙所允许的80端口,而包过滤的防火墙无法对数据包内容进行核查,因此此时防火墙等同于虚设,未打相应patch的提供web服务的系统,即使在防火墙的屏障之后,也会被攻击者轻松拿下超级用户的权限。

2. 由于此种类型的防火墙工作在较低层次,防火墙本身所能接触到的信息较少,所以它无法提供描述事件细致的日志系统,此类防火墙生成的日志常常只是包括数据包捕获时间,三层的ip地址,四层的端口等非常原始的信息。我们可以先把下面要讲的ipmon的软件的日志拿来看看

Nov 23 14:13:05 y.y.y.y ipmon[10841]: 14:13:04.733237 hme0 @0:13 b x.x.x.x,4131 -> y.y.y.y,3389 PR tcp len 20 48 -S IN

我们可以从上面看个大概,这个防火墙于仅仅记录了11月23日14点13分防火墙block了从ip地址x.x.x.x,端口4131来的,目的端口是 3389,目的ip是y.y.y.y的包头为20字节,净荷长度为28的数据包。至于这个数据包内容是什么,防火墙不会理会,这恰恰对安全管理员而言是至为关键的。因为即使一个非常优秀的系统管理员一旦陷入大量的通过/屏蔽的原始数据包信息中,往往也是难以理清头绪的,当发生安全事件时会给管理员的安全审计带来了很大的困难。

3. 所有有可能用到的端口都必须静态放开,对外界暴露,从而极大的增加了被攻击的可能性,这个问题一个很好的例子就是unix下的危险的rpc服务,它们也工作在高端口,而针对这些服务的攻击程序在互联网上异常流行。

4. 如果网络结构比较复杂,那么对管理员而言配置ACL将是非常恐怖的事情。当网络发展到一定规模时,ACL出错几乎是必然的,这一点相信许多大型站点的系统管理员印象深刻。

基于状态的包过滤防火墙

上面我们讲到的包过滤防火墙在具体实施的时候,管理员会遇到一些非常棘手的问题:网络上数据的传输是双向的,因此所有服务所需要的数据包进出防火墙的端口都要仔细的被考虑到,否则,会产生意想不到的情况。然而我们知道,当被防火墙保护的设备与外界通讯时,绝大多数应用要求发出请求的系统本身提供一个端口,用来接收到外界返回的数据包,而且这个端口一般是在1023到16384之间不定的,这就增加了设计控制访问规则的难度。这里我们可以捕获一次由 client到server的80端口访问的一些纪录来形象说明这个问题(截取的内容略有删节):

17:48:52.513355 IP penetrat.1134 > server.80: S 1253142352:1253142352

17:48:52.515991 IP server.80 > penetrat.1134: S 1867056172:1867056172 ack 1253142353

17:48:52.516126 IP penetrat.1134 > server.80: . ack 1

我们可以从上述内容中看到,client为了完成对server的www网络访问,需要打开一个本机端口用来接收回来的数据包,此处是1134。如果防火墙没有开放1134这个端口的话,client将无法收到回应的数据包。

但是问题是由于系统和外界通讯的时候,本机的端口不是一定的,我们已经知道如果不放开这些端口,通讯将无法完成,那么只有一个方法,开放1023以上的全部端口,允许这些端口的数据包进出。这正是传统的包过滤型防火墙的做法。

这样做的危害是明显的,为了通讯,把所有的高端端口开放,危害了配置防火墙的最小开放性原则。上面我们提到过攻击者很容易利用这些漏洞比如rpc等服务攻击防火墙后的系统。

另一方面,由于普通的包过滤防火墙不能对数据传输状态进行判断,如收到ack数据包就想当然的认为这是一个建立的连接,从而对数据包放行,会带来一定的安全隐患。尤其当防火墙与IDS系统进行联动(目前商业产品中非常流行的做法)时,这会导致非常糟糕的状况,攻击者可能可以利用防火墙的这个弱点轻松的对目标系统进行拒绝服务攻击。

此时,也许我们可以借助于基于状态的包过滤防火墙,这种防火墙在传统的包过滤防火墙的基础上增加了对OSI第四层的支持,同时,防火墙会在自身cache或内存中维护着一个动态的状态表,数据包到达时,对该数据包的处理方式将综合访问规则和数据包所处的状态进行。

那么这个动态的状态表包括什么内容,又是如何产生的呢?这一点各个厂家实现的方式各有不同,但是一般而言,状态表的内容一般主要包括数据包的来源/目的ip 地址、来源/目的端口、时间、以及数据包的sequence number(对于tcp连结)、数据包的标志符等(对于tcp连结)。当有数据包到达防火墙时,这些参数将决定数据包是否在属于一个已经合法的 sessioin。如果防火墙接收到一个初始化tcp连接的带syn标志包,这个包会首先被防火墙的访问控制列检查,如果在检查了所有的控制规则后,该包都没有被接受,那么该次连接被拒绝;如果数据包符合某条访问控制规则,那么在状态表中一个新的session就被建立,后续的数据包状态如果与状态表内的 session内容不一致(如虽然目的端口一致,但源端口不一致),那么数据包将被直接丢弃;如果判断数据包属于状态表中已经联接的session,那么数据包往往就直接允许通过,不再和访问控制列内容进行比较;同时,在状态表中一个session建立后,内存中会维护对这个session的动态超时值,比如,当防火墙两端的系统建立了连结,在状态表中生成了一个session,如果后续的数据包在某个设定的超时后依然没有到达,则此次session被丢弃,这样就一方面提升了防火墙效率,另外一方面可以在一定程度上防止拒绝服务攻击。

用上面的client访问 server的web例子来看的话:此时防火墙不需要在规则中打开1023以上的端口,只需要放开80端口就可以了,因为防火墙信任的client端带 syn标志的数据包经由防火墙访问控制规则允许的80端口出去,防火墙会登记源端口1134,目的端口80,两端ip地址,在状态表中增加一个 session。这样当server端的80端口返回client数据包的时候,防火墙检查状态表,察觉到是由client端发起的合法连接,会自动打开 1134端口,使数据包返回。

这里,我们可以拿cisco公司的主流防火墙pix 535来看看上面讲到的几个内容,在cisco产品中pix中,基于状态的实现采用了适应性安全算法(Adaptive Security Algorithm),能够简单有效的对数据包进行过滤。

我们可以首先看看pix中已经建立的连接,我们利用ssh从内网10.255.0.1连结外网的202.102.224.136,连结成功后,在pix上使用sh conn来看看:

pix535# sh conn for 202.102.224.136

TCP out 202.102.224.136:22 in 10.255.0.1:52805 idle 0:00:02 Bytes 4317 flags UIO

我们可以看到此时有从内网到外网的已经成功的连接(flags UIO-连结已经up,同时有双向的网络连接),请注意输出中的idle时间0:00:02,如果没有数据包传送,这个值一直是增长的,到达pix设定的超时值后,这个session会从内存中丢弃。本例中pix对tcp的超时值为10分钟(这些值时可以改的),如果客户端从内网10.255.0.1连结外网的202.102.224.136连结成功后,不做任何操作,等待10分钟后,在202.102.224.136的连接会断开,如下:

security.zz.ha.cn#Read from remote host 202.102.224.136: Connection reset by peer

Connection to 202.102.224.136 closed.

再看一个例子,从内网10.255.0.1发送到外网的202.102.224.136端口123的带syn标志的tcp数据包,但是在202.102.224.136上用防火墙drop掉接收到的数据包,看看pix如何处理:

pix535# sh conn for 202.102.224.136

TCP out 202.102.224.136:22 in 10.255.0.1:1605 idle 0:00:02 Bytes 0 flags saA

TCP out 202.102.224.136:22 in 10.255.0.1:1604 idle 0:00:03 Bytes 0 flags saA

TCP out 202.102.224.136:22 in 10.255.0.1:1606 idle 0:00:01 Bytes 0 flags saA

TCP out 202.102.224.136:22 in 10.255.0.1:1607 idle 0:00:00 Bytes 0 flags saA

我们看到对于这种请求,由于202.102.224.136 drop掉了syn(而不是rst数据包),因此pix等待着来自202.102.224.136的响应(saA),当到达两分钟的超时时间限制后,这些session会被丢弃。

最后一个试验,从内网10.255.0.1发送到外网的202.102.224.136端口123的带ack标志的tcp数据包,看看pix如何处理,在10.255.0.1上用tcpdump我们注意到pix 察觉到了这是无效的请求,复位了(rst)连结请求:

yiming#Tcpdump port 123

16:33:00.122591 10.255.0.1.1036 > security.zz.ha.cn.123: . ack 13579 win 512 (DF)

16:33:00.122775 security.zz.ha.cn. 123 > 10.255.0.1.1036: R 1:1(0) ack 0 win 512 (DF)

16:33:01.122596 10.255.0.1.1037 > security.zz.ha.cn. 123: . ack 31836 win 512 (DF)

16:33:01.122803 security.zz.ha.cn. 123 > 10.255.0.1.1037: R 1:1(0) ack 0 win 512 (DF)

由上,我们可以看到这种类型的防火墙较大程度上的的减少了传统的包过滤防火墙的大量开放端口等一些安全问题,而且,由于对于已经建立联接的数据包常常不再进行访问控制列内容检查,速度大大的增加了。此外,另外好处就是对系统管理员而言配置访问规则时需要考虑的内容相对简单了一些,出错率降低。

当然,尽管增加了基于状态的特性,但是由于本质上还是包过滤防火墙,无法深入到上层协议,因此上面所讲的传统包过滤防火墙的一些弱点在基于状态的包过滤防火墙依然存在。

应用代理(网关)防火墙

与前面讲到的防火墙不同,这种类型的防火墙在实现中,将OSI七层的应用层也包含了进来,这个层次的防火墙的实现主要是基于软件的。在某种意义上,可以把这种防火墙看作一个翻译器,由它负责外部网络和内部网络之间的通讯,当防火墙两端的用户打算进行网络通讯时候,两端的通讯终端不会直接联系,而是由应用层的代理来负责转发。代理会截获所有的通讯内容,如果连接符合预定的访问控制规则,则代理将数据转发给目标系统,目标系统回应给代理,然后代理再将传回的数据送回客户机-请注意这个特性,由于网络连接都是通过中介来实现的,所以恶意的侵害几乎无法伤害到被保护的真实的网络设备。

因为工作在高层,理解应用层的协议,本类防火墙提供了前面两种防火墙所无法提供的诸多特别的功能,能进行一些复杂的访问控制,主要包括:

1. 认证机制,如最常见的用户和密码认证。

2. 内容过滤, 如上面我们讲到的Unicode攻击,应用代理(网关)防火墙能发现这种攻击,并对攻击进行阻断。此外,还有常见的过滤80端口的Java Applet、JavaScript、ActiveX、电子邮件的MIME类型,还有Subject、To、From等等。

3. 成熟的日志,本类防火墙还具有非常成熟的日志功能,由于突破了OSI四层的限制,可以记录非常详尽的日志记录,比如:记录进入防火墙的数据包中有关应用层的命令,表现在上例中就是Unicode攻击的执行命令。

值得注意的是,上述的这些优点都是以牺牲速度为代价换取的,因为所有的连接请求在代理网关上都要经过软件的接受,分析,转换,转发等工作。在另一方面,由于数据包的所有内容都要被审查,也非常明显的降低了速度。

同时,这种防火墙还有一个比较明显的弊病,就是新的网络协议和网络应用都需要一套应用代理。

基于状态检查的防火墙(Stateful Inspection)

目前这类防火墙属于比较新一代的产品,本类防火墙的概念是由checkpoint公司最先提出的,关于Stateful Inspection的含义可参见以下checkpoint公司的的说明: Stateful - Inspection provides the highest level of security possible and overcomes the limitations of the previous two approaches by providing full application-layer awareness without breaking the client/server model. Stateful Inspection extracts the state-related information required for security decisions from all application layers and maintains this information in dynamic state tables for evaluating subsequent connection attempts. This provides a solution that is highly secure and offers maximum performance, scalability, and extensibility. Check Point FireWall-1 is based upon Stateful Inspection, which has become the defacto standard for firewalls.

综合checkpoint网站的资料,我们可以通俗的将这种Stateful Inspection大致理解为,防火墙的内核中运行着Stateful Inspectionsm engine,由它在OSI底层对接收到的数据包进行审核,当接收到的数据包符合访问控制要求时,将该数据包传到高层进行应用级别和状态的审核,如果不符合要求,则丢弃。由于Stateful Inspectionsm engine工作在内核中,因此效率和速度都能得到很好的保证,同时由于Stateful Inspectionsm engine能够理解应用层的数据包,所以能够快速有效的在应用层进行数据包审核。

关于checkpoint的专利技术Stateful Inspectionsm engine,该公司有如下说明: This provides important system flexibility, allowing Check Point, as well as its technology partners and end-users, to incorporate new applications, services, and protocols, without requiring new software to be loaded. For most new applications, including most custom applications developed by end users, the communication-related behavior of the new application can be incorporated simply be modifying one of Firewall-1's built-in script templates via the graphical user interface. Even the most complex applications can be added quickly and easily via the INSPECT language.

按照上面的理解,对新的应用程序的防火墙支持是无需在增加新的软件的,但本人认为,此处值得商榷,在checkpoint公司主页上,有专门的一部分介绍Application Support,也就是说,用户购置的checkpoint防火墙内部已经支持了相应的程序的审核,这一点应该是没有问题的。但是,除此之外,当用户的网络上增加了新的应用时,并需要防火墙支持该应用时,应该并不会如上述说明那么简单,因为对应用的支持并不是简单的增加端口,修改脚本那么容易完成的。 Stateful Inspectionsm engine必须理解该应用的比较具体的实现方法。比如国内广泛使用的oicq,防火墙增加对qq的支持,并不是系统管理员点几下鼠标,敲击几次键盘就能轻松完成的。

个人认为,其实基于状态检查的防火墙其设计思想可能还是源于基于状态的包过滤防火墙,只是在此基础上又增加了对应用层数据包的审核而已,但是由于本人没有实际使用过,因此无法下定论。

防火墙的附加功能

目前的防火墙还往往能够提供一些特殊的功能,如:

1. IP转换 IP转换主要功能有二,一是隐藏在其后的网络设备的真实IP,从而使入侵者无法直接攻击内部网络,二是可是使用rfc1918的保留IP,这对解决ip地址匮乏的网络是很实用的。

2. 虚拟企业网络 VPN在国外使用的较多,国内也开始逐渐得到应用。它是指在公共网络中建立的专用加密虚拟通道,以确保通讯安全

3. 杀毒 一般都通过插件或联动实现

4. 与IDS联动 目前实现这一功能的产品也有逐渐增多的趋势。

5. GUI界面管理 传统以及一些*nix下free的防火墙一般都是通过命令行方式来键入命令来控制访问策略的,商用的防火墙一般都提供了web和gui的界面,以便于管理员进行配置工作。

6. 自我保护,流控和计费等其它功能

选购和使用防火墙的误区

就本人几年来系统管理员的经验看来,防火墙在选购和使用时经常会有一些误区,如下

1. 最全的就是最好的,最贵的就是最好的 这个问题常常出现在决策层,相信"全能"防火墙,认为防火墙要包括所有的模块,求大而全,不求专而精,不清楚自己的企业需要保护什么,常常是白花了大量的经费却无法取得应有的效果。

2. 一次配置,永远运行 这个问题往往都在经验不足的系统管理员手上出现,在初次配置成功的情况下,就将防火墙永远的丢在了一边,不再根据业务情况动态的更改访问控制策略-请注意本文一开始讲到的,缺乏好的允许或者拒绝的控制策略,防火墙将起不到任何作用。

3. 审计是可有可无的 这个问题也出现在系统管理员手上出现,表现为对防火墙的工作状态,日志等无暇审计,或即使审计也不明白防火墙的纪录代表着什么,这同样是危险的。

4. 厂家的配置无需改动 目前国内比较现实的情况是很多公司没有专业的技术人员来进行网络安全方面的管理,当公司购置防火墙等产品时,只能依靠厂家的技术人员来进行配置,但应当警惕的是,厂家的技术人员即使技术精湛,往往不会仔细的了解公司方面的业务,无法精心定制及审核安全策略,那么在配置过程中很可能会留下一些安全隐患。作为防火墙的试用方不能迷信厂家的技术,即使对技术不是非常清楚,也非常有必要对安全策略和厂家进行讨论。

总结

作为文章的第一部分,我们在上面比较详细的介绍了四种防火墙的,包括基本概念,防火墙的长处和短处,关于防火墙的一些误区等。我们在随后的一篇文章中将介绍一种被广泛用在各种unix系统中的防火墙软件ipfilter,涵盖软件的介绍、安装、具体应用等。

参考资料

* Firewalls FAQ. http://www.faqs.org/faqs/firewalls-faq/

* How Firewalls Work. http://www.howstuffworks.com/firewall.htm

* Multiple Vendor PC Firewall Auto Block Denial Of Service Weakness. http://online.securityfocus.com/bid/5917

* Understanding the FW-1 State Table. http://www.spitzner.net/fwtable.html

* Checkpoint vs PIX http://www.experts-exchange.com/Security/Q_20300160.html

* Checkpoint firewall-1 web页. http://www.checkpoint.com/products/protect/firewall-1.html

关于作者

宫一鸣,男,河南电信网络关键设备高级系统管理员,主任工程师,中国电信国家级跨世纪人才,中国电信网络安全小组核心成员,河南电信网络安全小组成员。您可以通过E-mail : yiming@security.zz.ha.cn或网站 http://security.zz.ha.cn联系他!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有