防火墙发展历史
第一代:包过滤防火墙
第二代:代理防火墙
第三代:状态监测防火墙(发展史上的里程碑)
第四代:统一威胁管理(简称UTM)
第五代:下一代防火墙(简称NG)
NOTE:
1) 我们现在常见的防火墙都是第五代防火墙。
2) 第五代防火墙的名字就叫“下一代防火墙”,没有指代之意。
第一代和第二代防火墙
第一代防火墙是1989年产生的,仅能实现简单的访问控制。
第二代防火墙是代理防火墙,在应用层代理内部网络和外部网络之间的通信。代理防火墙的安全较高,但是处理速度较慢,而且对每一个应用都要开发一个代理服务很难做到,因此只能对少量的应用提供代理支持。
我们下面描述一下第一代防火墙和第二代防火墙的工作过程:
如上图所示,PC和WEB服务器位于不同的网络,分别与防火墙相连,PC与WEB服务器之间的通信受到防火墙的控制。
当PC需要访问WEB服务器网页时,在防火墙上必须配置下表当中列出的一条规则:允许PC访问访问WEB服务器的报文通过。这里说的规则其实就是指防火墙上的安全策略。只不过本节重点讲解状态检测和会话机制,安全策略不是重点,所以通过规则来简化描述。关于安全策略的内容我们将在后面的文章当中讲解。
在这条规则当中,源端口处的ANY表示任意端口,这是因为PC在访问WEB的时候端口是操作系统随机指定的,并不是确定的,所以这里设定为任意端口。
配置了这条规则之后,PC发出的报文就可以顺利的通过防火墙,到达WEB服务器,然后WEB服务器会向PC发送回应报文,这个报文也要穿过防火墙,在第三代防火墙(状态监测防火墙)出现之前,第一代和第二代防火墙还必须配置下表当中的规则,允许反方向的报文通过防火墙。
在规则2当中,目的端口也没有设定为任意端口,因为我们无法确定PC访问WEB到底用的哪个端口,要想使得WEB服务器的回应报文顺利通过防火墙到达PC,只能将规则2当中的目的端口设定为任意端口。
任意端口其实也就是所有端口,这样会有很大的安全隐患,外部的恶意报文者伪装成WEB服务器,就可以畅通无阻的穿过防火墙,PC将会面临严重的安全风险。
我们好好看一下,其实造成安全隐患的原因就是防火墙不知道PC访问WEB服务器的源端口到底是哪个?为了保证通信,不得以放行了在入方向的任意端口。那么我们可不可以想办法让防火墙知道PC访问WEB服务器用的到底是哪个端口,然后让WEB服务器的回应包回复之前自动添加规则放行源IP是PC出方向的目标IP,源端口是PC的目的端口,目标端口就是PC的源端口。当然可以实现,其实状态监测机制就是这样实现的。那么我们下面再看一看有了第三代防火墙的状态检测机制之后,两者的访问过程是怎样的?
使用状态检测防火墙之后
还是以上面的网络环境为例,首先还是需要在防火墙设定规则1,允许PC访问WEB服务器的报文通过。当报文到达防火墙之后,防火墙允许报文通过,同时还会针对PC访问WEB服务器的这个行为建立会话,会话当中包含PC发出的报文信息如地址和端口等。
当WEB服务器回应PC的报文到达防火墙后,防火墙会把报文中的信息与会话中的信息进行比对。如果发现报文当中的信息与会话当中的信息相匹配,并且该报文符合HTTP协议规定的规范,则认为这个报文属于PC访问WEB服务器行为的后续回应报文,直接允许这个报文通过,如下图所示:
还是以上面的网络环境为例,首先还是需要在防火墙设定规则1,允许PC访问WEB服务器的报文通过。当报文到达防火墙之后,防火墙允许报文通过,同时还会针对PC访问WEB服务器的这个行为建立会话,会话当中包含PC发出的报文信息如地址和端口等。
当WEB服务器回应PC的报文到达防火墙后,防火墙会把报文中的信息与会话中的信息进行比对。如果发现报文当中的信息与会话当中的信息相匹配,并且该报文符合HTTP协议规定的规范,则认为这个报文属于PC访问WEB服务器行为的后续回应报文,直接允许这个报文通过,如下图所示:
为了便于说明,在本节当中我们将PC和WEB服务器与防火墙之间直接相连。实际环境当中,如果PC、WEB服务器与防火墙之间跨网络相连,则必须要防火墙上配置路由,保证PC和WEB服务器两者之间相互路由可达。即使WEB服务器回应给PC的报文已经匹配了会话,防火墙也必须存在去往PC的的路由,这样才能保证回应报文正常发送到PC。
恶意报文即使伪装成WEB服务器向PC发起访问,由于这类报文不属于PC访问WEB服务器行为的后续报文,防火墙就不会允许这些报文通过,这样即保证了PC可以正常访问WEB服务器,也避免了大范围开放端口带来的风险。
总结一下,在状态检测防火墙出现之前,包过滤防火墙只会根据设定好的静态规则为判断是否允许报文通过,它认为报文都是无状态的孤立个体,不关注报文产生的前因后果,这就要求包过滤防火墙都必须针对每一个方向的报文都配置一条规则,转发效率低而且容易带来安全风险。
而状态检测防火墙的出现正好弥补了包过滤防火墙这个缺陷。状态检测防火墙使用基于连接状态的检测机制,将通信双方之间交互的属于同一连接的所有报文都作为整体的数据流来对待。在状态状态防火墙看来,同一个数据流内的报文不再是孤立的个体,而是存在联系的。例如,为数据流的第一个报文建立会话,数据流内的后续报文就会直接匹配会话转发,不需要再进行规则的检测,提高了转发效率和安全性。
包过滤防火墙认为数据包之间是割裂的个体,更网络更容易受到入侵。而状态监测防火墙认为报文与报文之间是存在联系的,从而寻求数据包之间的“合作发展”,最后实现高效率、高安全、可持续发展,现在也的确是状态监测防火墙的天下了,但并不是说包过滤防火墙就不好,它还是有它的“用武之地”的,我们有机会再细说。
现代防火墙
第一代防火墙和第二代防火墙在制定策略的时候除了制定从内向外连接的安全策略,还要制定从外向内的策略,这样制定策略存在严重安全隐患,所以诞生了第三代防火墙,也就状态监测防火墙,第三代防火墙通过状态监测的机制将数据流视为一个整体,为数据流的第一个报文建立会话,数据流内的后续报文就会直接匹配会话转发,不需要再进行规则的检测,直接穿过防火墙,提高了转发效率和安全性。
第三代防火墙实现了状态监测,但是其功能比较单一,于是,人们给状态监测防火墙上集成了VPN、防病毒、邮件过滤关键字过滤等功能,目的是想实现对网络统一地、全方位地保护,渐渐形成了第四代防火墙:UTM(统一威胁管理)。
统一威胁管理防火墙的确实现了对网络全方位的保护,但是由于其多个防护功能一起运行,导致效率不高,而且统一威胁管理防火墙并没有集成深度报文检测功能,所以对数据包深度检测不足,于是又发展出了第五代防火墙:下一代防火墙。下一代防火墙就是目前最常见的防火墙,下一代防火墙解决了统一威胁管理防火墙效率不足和报文深度检测能力不足的弱点。