状态检测防火墙原理

上传人:豆浆 文档编号:32841890 上传时间:2018-02-12 格式:DOC 页数:3 大小:110.50KB
返回 下载 相关 举报
状态检测防火墙原理_第1页
第1页 / 共3页
状态检测防火墙原理_第2页
第2页 / 共3页
状态检测防火墙原理_第3页
第3页 / 共3页
亲,该文档总共3页,全部预览完了,如果喜欢就下载吧!
资源描述

《状态检测防火墙原理》由会员分享,可在线阅读,更多相关《状态检测防火墙原理(3页珍藏版)》请在金锄头文库上搜索。

1、浅谈状态检测防火墙和应用层防火墙的原理(结合 ISA SERVER)防火墙发展到今天,虽然不断有新的技术产生,但从网络协议分层的角度,仍然可以归为以下三类:1, 包过滤防火墙;2, 基于状态检测技术(Stateful-inspection) 的防火墙;3, 应用层防火墙。这三类防火墙都是向前包容的,也就是说基于状态检测的防火墙也有一般包过滤防火墙的功能,而基于应用层的防火墙也包括前两种防火墙的功能。在这里我将讲讲后面两类防火墙的实现原理。先从基于状态检测的防火墙开始吧,为什么会有基于状态检测的防火墙呢?这就要先看看第一类普通包过滤防火墙的主要缺点,比如我们要允许内网用户访问公网的 WEB 服务

2、,来看看第一类普通包过滤防火墙是怎样处理的呢?那首先我们应该建立一条类似图 1 所示的规则:但这就行了吗?显然是不行的,因为这只是允许我向外请求 WEB 服务,但 WEB 服务响应我的数据包怎么进来呢?所以还必须建立一条允许相应响应数据包进入的规则。好吧,就按上面的规则加吧,在动作栏中我们填允许,由于现在数据包是从外进来,所以源地址应该是所有外部的,这里不做限制,在源端口填 80,目标地址也不限定,这个这个目标端口怎么填呢?因为当我访问网站时本地端口是临时分配的,也就是说这个端口是不定的,只要是 1023 以上的端口都有可能,所以没有办法,那只有把这些所有端口都开放了,于是在目标端口填上 10

3、24-65535,这样规则就如图 2 所示了,实际上这也是某些第一类防火墙所采用的方法。想一想这是多么危险的,因为入站的高端口全开放了,而很多危险的服务也是使用的高端口啊,比如微软的终端服务/远程桌面监听的端口就是 3389,当然对这种固定的端口还好说,把进站的 3389 封了就行,但对于同样使用高端口但却是动态分配端口的 RPC 服务就没那么容易处理了,因为是动态的,你不便封住某个特定的 RPC 服务。上面说了这是某些普通包过滤防火墙所采用的方法,为了防止这种开放高端口的风险,于是一些防火墙又根据 TCP 连接中的 ACK 位值来决定数据包进出,但这种方法又容易导致 DoS 攻击,何况 UD

4、P 协议还没有这种标志呢?所以普通包过滤防火墙还是没有解决这个问题,我们仍然需要一种更完美的方法,这时就有了状态检测技术,我们先不解释什么是状态检测防火墙,还是来看看它是怎样处理上面的问题的。同上面一样,首先我们也需要建立好一条类似图 1 的规则( 但不需要图 2 的规则) ,通常此时规则需要指明网络连接的方向,即是进还是出,然后我在客户端打开 IE 向某个网站请求 WEB 页面,当数据包到达防火墙时,状态检测引擎会检测到这是一个发起连接的初始数据包(由 SYN 标志),然后它就会把这个数据包中的信息与防火墙规则作比较,如果没有相应规则允许,防火墙就会拒绝这次连接,当然在这里它会发现有一条规则

5、允许我访问外部 WEB 服务,于是它允许数据包外出并且在状态表中新建一条会话,通常这条会话会包括此连接的源地址、源端口、目标地址、目标端口、连接时间等信息,对于 TCP 连接,它还应该会包含序列号和标志位等信息。当后续数据包到达时,如果这个数据包不含 SYN 标志,也就是说这个数据包不是发起一个新的连接时,状态检测引擎就会直接把它的信息与状态表中的会话条目进行比较,如果信息匹配,就直接允许数据包通过,这样不再去接受规则的检查,提高了效率,如果信息不匹配,数据包就会被丢弃或连接被拒绝,并且每个会话还有一个超时值,过了这个时间,相应会话条目就会被从状态表中删除掉。就上面外部 WEB 网站对我的响应

6、包来说,由于状态检测引擎会检测到返回的数据包属于 WEB 连接的那个会话,所以它会动态打开端口以允许返回包进入,传输完毕后又动态地关闭这个端口,这样就避免了普通包过滤防火墙那种静态地开放所有高端端口的危险做法,同时由于有会话超时的限制,它也能够有效地避免外部的 DoS 攻击,并且外部伪造的ACK 数据包也不会进入,因为它的数据包信息不会匹配状态表中的会话条目。上面虽然是讲的针对 TCP(WEB 服务)连接的状态检测,但这同样对 UDP 有效,虽然 UDP 不是像 TCP 那样有连接的协议,但状态检测防火墙会为它创建虚拟的连接。相对于 TCP 和 UDP 来说,ICMP 的处理要难一些,但它仍然

7、有一些信息来创建虚拟的连接,关键是有些 ICMP 数据包是单向的,也就是当 TCP 和 UDP 传输有错误时会有一个 ICMP 数据包返回。对于 ICMP 的处理,不同的防火墙产品可能不同的方法,在 ISA SERVER 2000 中, 不支持 ICMP 的状态检查,只能静态地允许或拒绝 ICMP 包的进出。从上面可以看出,基于状态检测的防火墙较好的解决了第一类普通包过滤防火墙的问题,为了更直观的理解状态检测防火墙,我们还来看看一些实际例子,这些例子都是在 ISA SERVER 2000 上的表现。(1)感受会话超时的限制还是举一个能说明问题的例子,比如大家熟悉的 QQ(QQ2003II),为

8、什么你一直不聊天和做其他动作仍然能够收到从腾讯服务器上发来的广告信息呢?肯定不是这个连接到腾讯服务器的 QQ 会话永不超时,其实你用 sniffer 软件一看就知道了,这是因为 QQ 每到一分钟时 (但还没到一分钟)就会主动与腾讯服务器联系一次,这种联系对防火墙后的 QQ 是非常重要的,通常来说,对于 UDP 协议,会话超时都是一分钟或小于一分钟,另外 windows 2000 中 UDP 端口的 NAT 映射期也只有一分钟,它在一分钟之内联系,这样就会在防火墙状态表中保持它的会话,不至于会话被删除,想像一下,如果它不这样联系的话,一分钟后这条会话被删除,而刚好此时腾讯有个广告要传给你,那么你

9、是不能收到的,当然其他从腾讯服务器上来的消息也不能收到,这是因为会话中已没有了匹配的条目,而规则中又没有静态打开的入站端口。当然上面的分析是从用户的角度来说的,从腾讯的角度来说,它也需要获知用户的连接状态,所以也需要定时通信,这已不在我们的讨论范围之内了。除了 QQ,MSN Messenger 也是这样的。(2)动态地打开入站端口首先我已在 ISA SERVER 2000 中的 protocol rules 下定义了一条允许所有客户端访问外部 WEB 网站的规则,如图 3,注意上面只明确定义了出站的规则,没有明确定义入站的规则,这是因为有状态检测技术起作用,我们用不着为上面的规则配套一条明确的

10、入站规则。图 4 是我在客户端打开网页时在 ISA 服务器上进行 sniffer 的结果,第一行是一个带有 SYN标志的初始化连接的数据包,本地端口是 22870,第二行是对方回应的数据包,由于与第一行属于同一个会话,防火墙已经为它动态地打开端口 22870 以便进入。上面我们感受了状态检测防火墙的强大功能,但由于状态检测防火墙毕竟是工作在网络层和传输层的,所以它仍然有一些不能解决的问题需要在应用层来进行解决,比如对于动态分配端口的 RPC 就必须作特殊处理;另外它也不能过滤掉应用层中特定的内容,比如对于 http 内容,它要么允许进,要么允许出,而不能对 http 内容进行过滤,这样我们就不

11、能控制用户访问的 WEB 内容,也不能过滤掉外部进入内网的恶意 HTTP 内容,另外,它也不能对用户进行认证,为了解决这些问题,我们还必须把防火墙的过滤层次扩展到应用层,这就是应用层防火墙,不过这种称呼似乎有点不准,也许叫应用层级的状态检测防火墙更合适,其实今天比较大型的商业防火墙都应该是这个级别的防火墙了,比如微软的 ISA SERVER 2000 就是,在 ISA 中这种应用层的过滤就表现为应用程序过滤器(Application Filters),下面来看看应用层防火墙的处理过程。如前文所述,当数据包在网络层和传输层通过检查之后,它就被送到应用层继续进行检查,不同的应用协议送到不同的应用协

12、议过滤器,比如是 SMTP 数据包,它就会送到 SMTP 过滤器,在 ISA SERVER 2000 中,该筛选器拦截并核对SMTP 电子邮件通信,保护邮件服务器免受攻击。该筛选器识别不安全的命令并且可以筛选电子邮件信息的内容或者大小,在未经同意的电子邮件到达邮件服务器之前将其拒绝。只有匹配过滤器规则的数据包才会允许通过防火墙。但应用层的过滤也有缺点,就是得针对每种应用协议开发一种过滤器,而对于一种具体的应用协议过滤器,它也是需要不断发展的,因为应用协议在发展,再说还不断有新的应用协议产生,并且由于数据包要经过应用层过滤器的再次检查,这无疑会降低网络传输效率。而对于使用动态端口协议的处理这种防

13、火墙最头痛的事情,即使在应用层上来解决也不是一件容易的事,RPC 也许不是问题了,因为它使用了这么多年,各种防火墙对它都已经有了比较成熟的解决方案,比如 ISA SERVER 2000 中就有专门的 RPC filter 来对它进行处理,但对于一些比较新的且也使用动态端口的协议就不好办了,比如用于即时通信中的 SIP 协议等诸多协议都要使用动态端口,由于没有即时的过滤器推出,使用这些协议的网络应用程序在防火墙后通常都会有连接故障,我想那些在防火墙后使用 MSN Messenger 的朋友一定深有体会(当使用除即时文字聊天和文件传输以外的功能时),不过,现在也有了一种比较全面地来解决这种使用动态

14、端口协议的方案,那就是在防火墙中添加 UPnP 协议的支持,这样那些支持 UPnP 的网络应用程序(如 MSN Messenger 6.1)就能够自动去发现防火墙并在防火墙上动态地打开端口,这样就无需在防火墙上去进行进退两难的手动配置。不过遗憾的是,虽然 UPnP 有效的解决了动态端口的问题,但它也带来了新的安全问题,所以在安全性要求较高的网络中是不适宜开启 UPnP 功能的。可能也是由于安全原因吧,现在支持 UPnP 的防火墙还很少,据我所知, Kerio winroute firewall5 和 windows XP 上的 ICF 是支持UPnP 的。注:本文未探讨另一类工作在应用层的防火墙,即代理服务器,也被称做应用代理网关.

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号