1、包过滤防火墙
包过滤是最早使用的一种防火墙技术,它的第一代模型是“静态包过滤”,使用包过滤技术的防火墙通常工作在OSI模型中的网络层上,后来发展更新的“动态包过滤”,简而言之,包过滤技术工作的方法就是基于各种头部、协议、地址、端口、类型等信息进行分析,并与预先设定好的防火墙过滤规则进行核对,一旦发现某个或多个部分与过滤规则匹配并且条件为“阻止”的时候,这个包会被丢弃。
2、应用代理防护墙
由于包过滤技术无法提供完善的数据保护措施,而且一些特殊的报文攻击仅仅使用过滤的方法并不能消除危害(如SYN攻击、ICMP洪水等),代理防护墙应运而生,这种防火墙实际上就是一台小型代用数据检测过滤功能的透明代理服务器,但是它并不是单纯在一个代理设备嵌入包过滤技术,而是一种被称为“应用协议分析”的新技术,它工作在OSI模型的最高层——应用层。
3、状态检测防火墙
这是继“包过滤”技术和“应用代理”技术后发展的防火墙技术,它通过采用一种被称为“状态监视”的模块,对网络通信各个层次实现监测,并根据各种过滤规则作出安全策略。“安全监视”技术在保留了对每个数据包的头部、协议、地址、端口、类型等信息就那些分析的基础上,进一步发展了“会话过滤”功能,在每个链接建立时,防护墙会对这个连接构造一个会话状态,里面包含了这个连接数据包的所有信息,以后这个连接都基于这个状态信息进行。
状态防火墙的优势状态检测防火墙出现是防火墙发展历史上里程碑的事件,而其所使用的状态检测和会话机制,目前已经成为防火墙产品的基本功能,也是防火墙实现安全防护的基础技术。
在状态检测防火墙出现之前,包过滤防火墙只根据设定好的静态规则来判断是否允许报文通过,它认为报文都是无状态的孤立个体,不关注报文产生的前因后果,这就要求包过滤防火墙必须针对每一个方向上的报文都配置一条规则,转发效率低下而且容易带来安全风险。
而状态检测防火墙的出现正好弥补了包过滤防火墙的这个缺陷。状态检测防火墙使用基于连接状态的检测机制,将通信双方之间交互的属于同一连接的所有报文都作为整个的数据流来对待。在状态检测防火墙看来,同一个数据流内的报文不再是孤立的个体,而是存在联系的。例如,为数据流的第一个报文建立会话,数据流内的后续报文就会直接匹配会话转发,不需要再进行规则的检查,提高了转发效率。
先看一个简单的网络环境,如下图所示,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服务器行为的后续回应报文,直接允许这个报文通过,如下图所示。