【防火墙技术连载5】强叔侃墙 基础知识篇 状态检测和会话机制

digest [复制链接]
发表于 : 2014-3-27 11:17:23 最新回复:2019-09-20 16:12:39
44815 53
强叔侃墙
强叔侃墙 官方号

论坛的各位小伙伴,大家是否还记得,在第二篇介绍防火墙发展历史的贴子中,我们提到了第三代防火墙,也就是状态检测防火墙。状态检测防火墙的出现是防火墙发展历史上里程碑式的事件,而其所使用的状态检测和会话机制,目前已经成为防火墙产品的基本功能,也是防火墙实现安全防护的基础技术。今天,强叔就和大家来聊一聊状态检测和会话。

首先,我们从状态检测防火墙产生的背景说起。请大家先看一个简单的网络环境,如下图所示,PC和Web服务器位于不同的网络,分别与防火墙相连,PC与Web服务器之间的通信受到防火墙的控制。

 

当PC需要访问Web服务器浏览网页时,在防火墙上必须配置如下的一条规则,允许PC访问Web服务器的报文通过。

 

在这条规则中,源端口处的*表示任意的端口,这是因为PC在访问Web服务器时,它的操作系统决定了所使用的源端口,例如,对于WINDOWS操作系统来说,这个值可能是1024~65535范围内任意的一个端口。这个值是不确定的,所以这里设定为任意端口。

配置了这条规则后,PC发出的报文就可以顺利通过防火墙,到达Web服务器。然后Web服务器将会向PC发送回应报文,这个报文也要穿过防火墙才能到达PC。在状态检测防火墙出现之前,包过滤防火墙还必须配置如下所示的规则2,允许反方向的报文通过。

 

在规则2中,目的端口也设定为任意端口,因为我们无法确定PC访问Web服务器时使用的源端口,要想使Web服务器回应的报文都能顺利穿过防火墙到达PC,只能将规则2中的目的端口设定为任意端口。

如果PC位于受保护的网络中,这样处理将会带来很大的安全问题。规则2将去往PC的目的端口全部开放,外部的恶意攻击者伪装成Web服务器,就可以畅通无阻地穿过防火墙,PC将会面临严重的安全风险。

接下来让我们看一下状态检测防火墙怎么解决这个问题。还是以上面的网络环境为例,首先我们还是需要在防火墙上设定规则1,允许PC访问Web服务器的报文通过。当报文到达防火墙后,防火墙允许报文通过,同时还会针对PC访问Web服务器的这个行为建立会话(Session),会话中包含了PC发出的报文信息,如地址和端口等。

当Web服务器回应给PC的报文到达防火墙后,防火墙会把报文中的信息与会话中的信息进行比对,发现报文中的信息与会话中的信息相匹配,并且符合协议规范对后续包的定义,则认为这个报文属于PC访问Web服务器行为的后续回应报文,直接允许这个报文通过,如下图所示。

 

而恶意攻击者即使伪装成Web服务器向PC发起访问,由于这类报文不属于PC访问Web服务器行为的后续回应报文,防火墙就不会允许这些报文通过。这样就解决了包过滤防火墙大范围开放端口带来的安全风险,同时也保证了PC可以正常访问Web服务器。

总结一下,包过滤防火墙只根据设定好的静态规则来判断是否允许报文通过,它认为报文都是无状态的孤立个体,不关注报文产生的前因后果。而状态检测防火墙的出现正好弥补了包过滤防火墙的这个缺陷,状态检测防火墙使用基于连接状态的检测机制,将通信双方之间交互的属于同一连接的所有报文都作为整体的数据流来对待。在状态检测防火墙看来,同一个数据流内的报文不再是孤立的个体,而是存在联系的。为数据流的第一个报文建立会话,数据流内的后续报文直接根据会话进行转发,提高了转发效率。

接着我们就来进一步了解一下会话,会话是通信双方的连接在防火墙上的具体体现,代表两者的连接状态,一条会话就表示通信双方的一个连接。防火墙上多条会话的集合就叫做会话表(Session table),先看一个标准的会话表项:

http  VPN:public --> public 1.1.1.1:2049-->2.2.2.2:80

我们重点介绍这个表项中的关键字段:http表示协议,1.1.1.1表示源地址,2049表示源端口,2.2.2.2表示目的地址,80表示目的端口。我们是如何区分源和目的呢?其实通过“-->”符号就可以直观区分,符号前面的是源,符号后面的是目的。

源地址、源端口、目的地址、目的端口和协议这五个元素是会话的重要信息,我们将这五个元素称之为“五元组”。只要这五个元素相同的报文即可认为属于同一条流,在防火墙上通过这五个元素就可以唯一确定一条连接。

需要注意的是,会话是动态生成的,但不是永远存在的。如果长时间没有报文匹配,则说明通信双方已经断开了连接,不再需要该条会话了。此时,为了节约系统资源,防火墙会在一段时间后删除会话,该时间称为会话的老化时间。

光说不练假把式,下面强叔就使用eNSP模拟器来搭建一个简单的网络环境,验证防火墙上的状态检测机制。网络拓扑如下:

 

防火墙上只配置了一条规则:允许PC访问Web服务器的报文通过。在PC上使用HttpClient程序访问Web服务器,发现可以成功访问:

 

在防火墙上使用display firewall session table命令查看会话表的信息,发现已经建立一条会话:

 

说明状态检测机制工作正常,防火墙收到Web服务器返回给PC的报文后,发现该报文可以匹配到该条会话,即使没有配置允许反方向报文通过的规则,防火墙也允许其通过。

最后,希望通过强叔的介绍,大家可以了解状态检测和会话机制,也希望大家要理论结合实际,多多使用eNSP模拟器动手配置。

 

强叔提问

给出如下一条会话,大家能指出里面的五元组信息吗?
telnet  VPN:public --> public 172.16.0.2:51870-->128.18.0.2:23

 

 

上一篇 基础知识篇 安全区域:划地而治 等级森严

下一篇 安全策略篇 安全策略初体验

汇总贴】 

本帖被以下专题推荐:

  • x
  • 常规:

点评 回复

跳转到指定楼层
hujinlong123
hujinlong123   发表于 2014-5-7 22:12:06 已赞(0) 赞(0)

防火墙上要怎么配置?

  • x
  • 常规:

点评 回复

强叔侃墙
强叔侃墙 官方号 发表于 2014-5-8 20:30:22 已赞(0) 赞(0)

引用 16 楼

防火墙上要怎么配置?

hujinlong123 发表于 2014-05-07 22:12

需要根据实际情况选择开启或关闭,在防火墙上使用firewall session link-state命令,具体的用法可以参考我们各个型号的产品文档手册,里面有详细的说明。比如访问这里,下载USG9000系列V300R001C20版本的产品文档;访问这里,下载USG6600系列V100R001版本的产品文档。

  • x
  • 常规:

点评 回复

sofardware
sofardware   发表于 2014-7-1 10:26:09 已赞(0) 赞(0)

        “当Web服务器回应给PC的报文到达防火墙后,防火墙会把报文中的信息与会话中的信息进行比对,发现报文中的信息与会话中的信息相匹配,并且符合协议规范对后续包的定义,则认为这个报文属于PC访问Web服务器行为的后续回应报文,直接允许这个报文通过”


       强叔,你好,针对这段话有个疑问:如果是分布式高端防火墙(有多块防火墙板),PC发出的请求报文在A墙上建立了会话,但是web服务器回应给PC的报文上了B墙,找不到请求报文建立的会话,这时候怎办?

  • x
  • 常规:

点评 回复

风吹菜花
风吹菜花  新锐 发表于 2014-7-1 11:35:42 已赞(0) 赞(0)

回复 22 楼

什么叫根墙?

  • x
  • 常规:

点评 回复

dingbao2012
dingbao2012   发表于 2014-5-12 11:28:26 已赞(0) 赞(0)

学习了,多谢
  • x
  • 常规:

点评 回复

强叔侃墙
强叔侃墙 官方号 发表于 2014-7-1 20:21:20 已赞(0) 赞(0)

回复 26 楼

对问题有点疑问,分布式高端防火墙,即使有多块防火墙板,整体也是一台设备,不会出现A墙和B墙的概念啊。如果指的是双机热备,主备防火墙之间会通过心跳线来备份会话表,即使主用防火墙down掉了,备用防火墙上有会话信息,所以也能顺利接替主用防火墙。

  • x
  • 常规:

点评 回复

sofardware
sofardware   发表于 2014-7-3 09:49:07 已赞(0) 赞(0)

引用 28 楼

对问题有点疑问,分布式高端防火墙,即使有多块防火墙板,整体也是一台设备,不会出现A墙和B墙的概念啊。如果指的是双机热备,主备防火墙之间会通过心跳线来备份会话表,即使主用防火墙down掉了,备用防火墙上有会话信息,所以也能顺利接替主用防火墙。

强叔侃墙 发表于 2014-07-01 20:21

       这个问题,还请强叔帮忙去请教一下“墙大爷”或者“墙爷爷”,如果多块防火墙板,会话的创建肯定是在某一块防火墙板上,请求报文和应答报文有可能上到不同的防火墙板。

  • x
  • 常规:

点评 回复

周中斌
周中斌   发表于 2014-8-20 15:20:11 已赞(0) 赞(0)

public --> public  是不是指public到public区域的流向?
  • x
  • 常规:

点评 回复

强叔侃墙
强叔侃墙 官方号 发表于 2014-8-20 16:19:27 已赞(0) 赞(0)

回复 31 楼

这个指的是VPN实例,public表示根防火墙,public->public就表示的是根防火墙上的会话信息。
  • x
  • 常规:

点评 回复

发表回复
您需要登录后才可以回帖 登录 | 注册

警告 内容安全提示:尊敬的用户您好,为了保障您、社区及第三方的合法权益,请勿发布可能给各方带来法律风险的内容,包括但不限于政治敏感内容,涉黄赌毒内容,泄露、侵犯他人商业秘密的内容,侵犯他人商标、版本、专利等知识产权的内容,侵犯个人隐私的内容等。也请勿向他人共享您的账号及密码,通过您的账号执行的所有操作,将视同您本人的行为,由您本人承担操作后果。详情请参看“隐私声明
如果附件按钮无法使用,请将Adobe Flash Player 更新到最新版本!
登录参与交流分享

登录参与交流分享

登录