防火墙详解(发展史、概念、应用、包过滤技术、状态监测包过滤技术)
一、防火墙的发展史
防火墙自上世纪80年代末期开始发展,至今已有近30年的历史,在这段时间内,防火墙的发展大致可分为三个重要阶段。
阶段一:1989-1994年
1、1989年,第一款基于访问控制列表(包过滤)的防火墙被开发,被称为第一代防火墙
2、之后,出现了基于ALG的第二代防火墙:令防火墙拦截从客户端向服务器发起的所有请求报文,由防火墙代理访问服务器,在将服务器的相应报文回传至客户端;安全级别较高,但处理速度较慢;同时,ALG很难针对网络中的每种应用单独开发独立的代理服务程序,因此仅仅只能够代理某些访问请求。
3、1994年,出现了基于状态化检测的第三代防火墙:通过分析报文的当前状态来执行不同的拦截操作。
阶段二:1995-2004年
1、在这一时期,状态化检测防火墙得到了长足的发展与进步,同时人们针对状态化检测防火墙增加了许多增值性功能:VPN、NAT等
2、一些专业设备也在这一时期出现了雏形,例如专门保护web服务器安全的WAF(web application firewall)设备
阶段三:2005-至今
业界提出了UTM(united threat managemetn)统一威胁管理概念,将传统防火墙、入侵检测、防病毒、URL过滤、应用程序控制、邮件过滤等功能融合到一台防火墙上,实现全面的安全防护
二、防火墙的基本概念
1、防火墙的概念最早源于建筑领域,意在不让火势从一个区域蔓延至另一个区域
2、而后防火墙的概念被引用到通信领域,目的是在逻辑上阻止一个网络有针对性的对另一个网络发起攻击
3、防火墙包括软件和硬件
4、在条件允许的情况下,尽量不要让防火墙成为面向网络的第一层设备,最好让一台边界路由器直接面向互联网,防火墙工作在边界路由器下层
5、建议将防火墙打造成一台三宿主堡垒主机,令防火墙可以清楚的区分安全区、非安全区、DMZ区。
三、为什么需要防火墙
防火墙主要用于保护一个网络区域免受来自另一个网络区域的网络攻击和网络入侵行为;其隔离、防守的属性,灵活应用于网络边界、子网隔离等位置,如企业网络出口,大型网络内部子网隔离,数据中心边界等。
四、典型企业的网络安全拓扑图
如下图所示,不安全区即我们的外网区域,安全区就是我们的内网区域,还有DMZ区,在每个区域的边界上连接防火墙设备。通过防火墙设备,我们可以实现网络的区域隔离,不允许外网访问内网,也不允许内网访问外网,保证安全性。同时如果我们企业的业务需要暴露在外网中,比如公司官网,这时候就要用到DMZ区。外网和DMZ区可以相互访问,内网也可以访问DMZ区,但是我们可以在防火墙上设置不允许DMZ区访问内网,从而保证了内网的安全性。这样通过DMZ区,既保证了公司内网不暴露在外网中,也能时业务和外网正常交互。
五、防火墙与路由器、交换机的对比
路由器、交换机的本质是根据MAC地址表/路由表进行数据帧/数据包的转发/路由
防火墙的本质是在一个已经连通的网络中对传输的数据进行控制,以达到防治网络病毒攻击的目的
防火墙默认所有的流量都不让通过,如果想让某些流量通过,则需要进行配置,加入白名单;相反,路由器默认是所有流量都可以通过,如果不想让某些流量通过,则通过ACL进行控制。那么我们可以看到,防火墙控制流量访问是不是也用了ACL这种技术呢?不是的,ACL这种技术最大的弊端就是它都是双向访问的,如果我允许你访问为,那么我也能访问你,如果我拒绝你访问我,那么我也不能访问你,这就是ACL,没办法做到单通。防火墙对ACL技术进行了升级,可以限制流量单向访问。另外,路由器只能对下四层进行流量控制,而防火墙可以做到对整个7层进行流量控制(例如防火墙上配置允许doc文件通过,docx文件不通过,这就是在第七层应用层进行控制)。
六、安全区域
防火墙中引入了安全区域的概念,目的是为了在防火墙上区分不同的网络
安全区域是一个或多个接口的集合,是防火墙区别于路由器的主要特性
防火墙通过安全区域来划分网络、标识数据流动的路线,当数据在不同的安全区域之间流动时,才会受到控制
防火墙通过接口来连接网络,将接口划分到安全区域后,通过接口就把安全区域和网络关联起来
比如下图所示,我让防火墙上一个接口连接一个交换机,然后把这个接口加入到安全区,那么这个时候这个接口下边连接的所有整个网络都属于安全区了
通过把防火墙上的接口划分至不同的安全区域中,便可以在防火墙上划分出不同的网络。在防火墙上,一个接口同一个时间内仅可加入至一个安全区域
七、Local 区域
华为防火墙默认提供三个安全区域:trust 、untrust、dmz;另外防火墙使用local区域,标识防火墙本身;若某一流量是从某区域进入,访问防火墙本身的流量,则该流量进入的就是防火墙的local区域;由防火墙主动发出的数据均可认为是从local区域中发出;需要防火墙响应并处理(而非转发)的数据均可认为是由local区域接收。
local区域不能添加任何接口进去,因为默认情况下,防火墙上所有的接口都隐含与local区域。
八、安全区域、受信任程度与安全级别
受信任程度:local > trust > dmz > untrust
安全域间、安全策略与数据流动方向
安全域间用来描述流量的传输通道,其为两个区域之间的唯一道路。即流量从这个区域出来,要访问另一个区域,那么这两个区域之间的传输通道就称为安全域间
若希望对经过这条通道的流量进行控制,则必须在通道上设立关卡,即安全策略
任意两个安全区域都构成二个安全域间(双向传输),并具有单独的安全域间视图,大部分的安全策略都需要在安全域间视图下配置
当两个安全区域在通信时,数据在两个安全区域之间流动时的规则:
数据由低级别的安全区域向高级别的安全区域流动时,为入方向(inbound),例如untrust到DMZ
数据由级高别的安全区域向低级别的安全区域流动时,为出方向(outbound),例如 DMZ 到 untrust
九、包过滤技术
我们知道第一代最简单的防火墙是基于包过滤的,实现包过滤的核心技术是访问控制列表
包过滤防火墙只根据设定好的静态规则来判断是否允许数据通过
但是这种技术有一个很大的缺点,例如在上述案例中,在客户端访问web服务器的过程中,客户端随机生成一个大于1024的高位端口号码,通过此端口号码来向服务器的80端口发起连接,web服务器使用自身的80端口来向客户端随机生成的该高位端口号回传数据;若希望防火墙放行web流量,若防火墙使用这种最基本的包过滤技术的话,则防火墙需要放开客户端方向的所有端口;也就意味着来自untrust区域的web服务器可以针对该客户端的任意端口发起连接;这样的操作相当于在防火墙上打开了一个过大的口子,几乎丧失掉了安全性。
十、状态检测包过滤技术
若规则允许通过,则防火墙将属于同一个连接的所有数据当作一个整体的数据流会话进行对待,而非单独检测每一个数据报文
在防火墙上开启ASPF(application specific packet filter)应用级特定的包过滤功能后,防火墙将能够识别七层应用,根据分析整段数据流的第一个报文,来判断出后续报文的应用层类型,从而创建一张server-map表。(注:server-map表并不是当前连接的状态,而是防火墙预判出的后续报文的状态,当防火墙接收到一个数据时,其先检查自身的会话表项,若没有找到会话表项,则查找server-map表,若能找到server-map表,则根据server-map表创建会话表项;若防火墙能够找到server-map表项,命中server-map表项的数据不再受安全策略的控制)
状态检测防火墙是这样解决包过滤技术的不足的:
首先我们还是要在防火墙上设定规则,允许PC访问web服务器的报文通过
当报文到达防火墙后,防火墙允许报文通过,同时还会针对PC访问web服务器的这个行为建立会话(session),会话中包含了PC发出的报文信息,如地址和端口等;
当web服务器回应给PC 的报文到达防火墙后,防火墙会把报文中的信息与会话中的信息进行比对,发现报文中的信息与会话中的信息匹配,并且符合协议规范对后续包的定义,则认为这个报文属于PC访问web服务器行为的后续回应报文,直接允许这个报文通过。