状态检测防火墙原理

状态检测防火墙原理

防火墙发展到今天,虽然不断有新的技术产生,但从网络协议分层的角度,仍然可以归为以下三类:

1.包过滤防火墙;

2.基于状态检测技术(Stateful-inspection)的防火墙;

3.应用层防火墙

这三类防火墙都是向前兼容的,即基于状态检测的防火墙也有一般包过滤防火墙的功能,而基于应用层的防火墙也包括前两种防火墙的功能。由于<<浅>>文已讲了第一类防火墙,在这里我就讲讲基于状态检测技术的防火墙的实现原理。

为什么会有基于状态检测的防火墙呢?这就要先看看第一类普通包过滤防火墙的主要缺点,比如我们要允许内网用户访问公网的WEB服务,来看看第一类普通包过滤防火墙是怎样处理的呢?那首先我们应该建立一条类似图1所示的规则:

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

 想一想这是多么危险,因为入站的高端口全开放了,而很多危险的服务也是使用的高端口啊,比如微软的终端服务/远程桌面监听的端口就是3389,当然对这种 固定的端口还好说,把进站的3389封了就行,但对于同样使用高端口但却是动态分配端口的RPC服务就没那么容易处理了,因为是动态的,你不便封住某个特 定的RPC服务。

上面说了这是某些普通包过滤防火墙所采用的方法,为了防止这种开放高端口的风险,于是一些防火墙又根据TCP连接中的ACK位值来决定数据包进出,但这种 方法又容易导致DoS攻击,何况UDP协议还没有这种标志呢?所以普通包过滤防火墙还是没有解决这个问题,我们仍然需要一种更完美的方法,这时就有了状态 检测技术,我们先不解释什么是状态检测防火墙,还是来看看它是怎样处理上面的问题的。

同上面一样,首先我们也需要建立好一条类似图1的规则(但不需要图2的规则),通常此时规则需要指明网络连接的方向,即是进还是出,然后我在客户端打开 IE向某个网站请求WEB页面,当数据包到达防火墙时,状态检测引擎会检测到这是一个发起连接的初始数据包(由SYN标志),然后它就会把这个数据包中的 信息与防火墙规则作比较,如果没有相应规则允许,防火墙就会拒绝这次连接,当然在这里它会发现有一条规则允许我访问外部WEB服务,于是它允许数据包外出 并且在状态表中新建一条会话,通常这条会话会包括此连接的源地址、源端口、目标地址、目标端口、连接时间等信息,对于TCP连接,它还应该会包含序列号和 标志位等信息。当后续数据包到达时,如果这个数据包不含SYN标志,也就是说这个数据包不是发起一个新的连接时,状态检测引擎就会直接把它的信息与状态表 中的会话条目进行比较,如果信息匹配,就直接允许数据包通过,这样不再去接受规则的检查,提高了效率,如果信息不匹配,数据包就会被丢弃或连接被拒绝,并 且每个会话还有一个超时值,过了这个时间,相应会话条目就会被从状态表中删除掉。

就上面外部WEB网站对我的响应包来说,由于状态检测引擎会检测到返回的数据包属于WEB连接的那个会话,所以它会动态打开端口以允许返回包进入,传输完 毕后又动态地关闭这个端口,这样就避免了普通包过滤防火墙那种静态地开放所有高端端口的危险做法,同时由于有会话超时的限制,它也能够有效地避免外部的 DoS攻击,并且外部伪造的ACK数据包也不会进入,因为它的数据包信息不会匹配状态表中的会话条目。

上面虽然是讲的针对TCP(WEB服务)连接的状态检测,但这同样对UDP有效,虽然UDP不是像TCP那样有连接的协议,但状态检测防火墙会为它创建虚拟的连接。

相对于TCP和UDP来说,ICMP的处理要难一些,但它仍然有一些信息来创建虚拟的连接,关键是有些ICMP数据包是单向的,也就是当TCP和UDP传 输有错误时会有一个ICMP数据包返回。对于ICMP的处理,不同的防火墙产品可能不同的方法,在ISA SERVER 2000中,不支持ICMP的状态检查,只能静态地允许或拒绝ICMP包的进出。

从上面可以看出,基于状态检测的防火墙较好的解决了第一类普通包过滤防火墙的问题,为了更直观的理解状态检测防火墙,我们还来看看一些实际例子,这些例子都是在ISA SERVER 2000后的表现。

(1)感受会话超时的限制

还是举一个能说明问题的例子,比如大家熟悉的QQ(QQ2003II),为什么你一直不聊天和做其他动作仍然能够收到从腾讯服务器上发来的广告信息呢?肯 定不是这个连接到腾讯服务器的QQ会话永不超时,其实你用sniffer软件一看就知道了,这是因为QQ每到一分钟时(但还没到一分钟)就会主动与腾讯服 务器联系一次,这种联系对防火墙后的QQ是非常重要的,通常来说,对于UDP协议,会话超时都是一分钟或小于一分钟,另外windows 2000中UDP端口的NAT映射期也只有一分钟,它在一分钟之内联系,这样就会在防火墙状态表中保持它的会话,不至于会话被删除,想像一下,如果它不这 样联系的话,一分钟后这条会话被删除,而刚好此时腾讯有个广告要传给你,那么你是不能收到的,当然其他从腾讯服务器上来的消息也不能收到,这是因为会话中 已没有了匹配的条目,而规则中又没有静态打开的入站端口。当然上面的分析是从用户的角度来说的,从腾讯的角度来说,它也需要获知用户的连接状态,所以也需 要定时通信,这已不在我们的讨论范围之内了。除了QQ,MSN Messenger也是这样的。

(2)动态地打开入站端口

首先我已在ISA SERVER 2000中的protocol rules下定义了一条允许所有客户端访问外部WEB网站的规则,如图3,

注意上面只明确定义了出站的规则,没有明确定义入站的规则,这是因为有状态检测技术起作用,我们用不着为上面的规则配套一条明确的入站规则。图4是我在客 户端打开网页时在ISA服务器上进行sniffer的结果,第一行是一个带有SYN标志的初始化连接的数据包,本地端口是22870,第二行是对方回应的 数据包,由于与第一行属于同一个会话,防火墙已经为它动态地打开端口22870以便进入。

(3)对初始包含有ACK标志的非法数据包的反应

我在内网150.0.1.41客户端上发送了一个带ACK的初使包给202.43.216.55,但被防火墙识别并复位(RST)了此连接,如图5、6。

基于状态检测技术(Stateful-inspection)的防火墙有强大功能,但由于状态检测防火墙毕竟是工作在网络层和传输层的,所以它仍然有一些 不能解决的问题需要在应用层来进行解决,比如对于动态分配端口的RPC就必须作特殊处理;另外它也不能过滤掉应用层中特定的内容,比如对于http内容, 它要么允许进,要么允许出,而不能对http内容进行过滤,这样我们就不能控制用户访问的WEB内容,也不能过滤掉外部进入内网的恶意HTTP内容,另 外,它也不能对用户进行认证,为了解决这些问题,我们还必须把防火墙的过滤层次扩展到应用层,这就是应用层防火墙,不过这种称呼似乎有点不准,也许叫应用 层级的状态检测防火墙更合适,其实今天比较大型的商业防火墙都应该是这个级别的防火墙了,比如微软的ISA SERVER 2000就是,在ISA中这种应用层的过滤就表现为应用程序过滤器(Application Filters),限于篇幅,有关此类防火墙的实现原理和优缺点,笔者就不打算赘述了。

状态检测防火墙原理,布布扣,bubuko.com

时间: 2024-12-26 20:30:05

状态检测防火墙原理的相关文章

李洪强iOS下的实际网络连接状态检测

iOS下的实际网络连接状态检测 序言 网络连接状态检测对于我们的iOS app开发来说是一个非常通用的需求.为了更好的用户体验,我们会在无网络时展现本地或者缓存的内容,并对用户进行合适的提示.对绝大部分iOS开发者来说,从苹果示例代码改变而来的各种Reachablity框架是实现这个需求的普遍选择,比如这个库.但事实上,基于此方案的所有实现,都无法帮助我们检测真正的网络连接状态,它们能检测的只是本地连接状态:这种情况包括但不限于如下场景: 1.现在很流行的公用wifi,需要网页鉴权,鉴权之前无法

iptables状态检测

iptables状态检测 iptables状态检测是一种扩展匹配中的显式扩展,用于检测会话之间的连接关系的,有了检测我们可以实现会话间功能的扩展 什么是状态检测? 每个建立的连接包括以下信息:源IP地址.目标IP地址.源端口和目的端口,这叫一对套接字对(socket ); 协议类型.连接状态(TCP协议)和超时时间等信息.防火墙把这些信息叫作状态(stateful),能够检测每个连接状态的防火墙叫作带状态检测的包过滤防火墙:它除了能够完成简单包过滤防火墙的包过滤工作外,还在自己的内存中维护一个跟

iOS下的实际网络连接状态检测:RealReachability

序言 网络连接状态检测对于我们的iOS app开发来说是一个非常通用的需求.为了更好的用户体验,我们会在无网络时展现本地或者缓存的内容,并对用户进行合适的提示.对绝大部分iOS开发者来说,从苹果示例代码改变而来的各种Reachablity框架是实现这个需求的普遍选择,比如这个库.但事实上,基于此方案的所有实现,都无法帮助我们检测真正的网络连接状态,它们能检测的只是本地连接状态:这种情况包括但不限于如下场景: 1.现在很流行的公用wifi,需要网页鉴权,鉴权之前无法上网,但本地连接已经建立: 2.

LVS自动化添加及删除ipvsadm和后端服务器健康状态检测脚本

  LVS director 负载均衡器增加IPVSADM脚本 #vim director.sh #!/bin/bash #chkconfig: - 88 66 #description: this script to add lvs IP VIP=192.168.0.254 DIP=192.168.0.100 RIP1=192.168.0.101 RIP2=192.168.0.102 PORT=80 SCHELE=wrr LOCKFILE=/var/lock/subsys/ipvsadm ca

如何编写LVS对Real Server的健康状态检测脚本

简介:Linux 虚拟服务器(Linux Virtual Server. LVS),是一个由章文松开发的自由软件.利用KVS可以实现高可用的.可伸缩缩的Web, Mail, Cache和Medial等网络股务..井在此基 础上开发支持庞大用户数的,可伸缩的,高可用的电子商务应用.LVS1998年发展到现在,已经变得比较成熟,目前广泛应用在各种网络服务和电了商务应用 中.LVS具有很好的伸缩缩性.可靠性和管埋性,通过LVS要实现的最终目标是:利用linux 操作系统和LVS集群软件实现一个高可用.

ThinkAndroid框架 网络状态监听原理

ThinkAndroid框架 网络状态监听原理,有需要的朋友可以参考下. 现在用到网络监听的地方越来越广泛,这里提供下ThinkAndroid里的实现方法,还是根据功能原理倒着给出代码: 1.网络状态会发出广播,监听网络状态肯定通过广播接收者实现,广播接受者: /** * @Title NetworkStateReceiver * @Package com.ta.util.netstate * @Description 是一个检测网络状态改变的,需要配置 <receiver * android:

nginx实现负载均衡、状态检测

upstream.health-check模块实现负载均衡.状态检测 拓扑图: 服务器A增加一个网卡,与服务器B和服务器C通信,地址如上图 服务器A: 配置地址,查看如下: 源码安装nginx-1.0.11 yum --disablerepo=\* --enablerepo=c6-media install pcre-devel openssl-devel -y   安装必要的软件包 1.[[email protected] ~]# tar -zxvf nginx-1.0.11.tar.gz  

Android中View(视图)绘制不同状态背景图片原理深入分析以及StateListDrawable使用详解

今天继续给大家分享下View的相关知识,重点有一下两点:   1.View的几种不同状态属性            2.如何根据不同状态去切换我们的背景图片. 开篇介绍:android背景选择器selector用法汇总 对Android开发有经验的同学,对 <selector>节点的使用一定很熟悉,该节点的作用就是定义一组状态资源图片,使其能够 在不同的状态下更换某个View的背景图片.例如,如下的hello_selection.xml文件定义: <?xml version="

Atitit 图像处理--图像分类 模式识别 肤色检测识别原理&#160;与attilax的实践总结

Atitit 图像处理--图像分类 模式识别 肤色检测识别原理 与attilax的实践总结 1.1. 五中滤镜的分别效果..1 1.2. 基于肤色的图片分类1 1.3. 性能提升2 1.4. --code2 1.1. 五中滤镜的分别效果.. /AtiPlatf_cms/src/com/attilax/clr/skinfltAll.java 1.2. 基于肤色的图片分类 /AtiPlatf_cms/src/com/attilax/clr/moveBySkinLow.java 生成所有图片的肤色百分