分享
 
 
 

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

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

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

宫一鸣 (yiming@security.zz.ha.cn)

中国电信网络安全小组核心成员

2002 年 12 月

本文将分为两部分,第一部分将介绍防火墙基本类型和概念,以及每类防火墙的主要优缺点,然后是选购配置防火墙的时候一些误区;第二部分将结合第一部分内容介绍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数据包里携带的具体有什么内容,路由器完全不会去关心。

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

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

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

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

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

由于此种类型的防火墙工作在较低层次,防火墙本身所能接触到的信息较少,所以它无法提供描述事件细致的日志系统,此类防火墙生成的日志常常只是包括数据包捕获时间,三层的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的数据包。至于这个数据包内容是什么,防火墙不会理会,这恰恰对安全管理员而言是至为关键的。因为即使一个非常优秀的系统管理员一旦陷入大量的通过/屏蔽的原始数据包信息中,往往也是难以理清头绪的,当发生安全事件时会给管理员的安全审计带来了很大的困难。

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

如果网络结构比较复杂,那么对管理员而言配置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。这样当

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
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- 王朝網路 版權所有