随着网上银行、手机银行、电子商城等互联网及移动金融应用的兴起,针对WEB类应用的攻击手段也层出不穷,据统计,2019年出现攻击方式中,针对WEB类的攻击占到85.4%左右,相对而言遥遥领先于其他攻击手段。面对如此多的互联网攻击威胁,传统的通过运维发现、开发项目组从代码层面进行修复漏洞的效率已经远远低于漏洞被利用的效率,于是,一种新的专用于WEB防护的安全产品由此而生——WAF(WEBAPPLICATION FIREWALL),也叫应用防火墙。
虽然WAF应用防火墙叫做防火墙,可是其工作原理和传统防火墙截然不同。传统防火墙主要工作在网络层和传输层,针对源目的地址,源目的端口和网络协议这五元组进行规则匹配过滤。而应用防火墙工作在应用层,其主要通过中间代理的方式,截取网络通信中的HTTP流量,再通过其过滤规则进行分析和拦截,这里要提醒的是,其防护效果取决于对应用逻辑的理解,与应用逻辑结合越是紧密,防护效果越好,WAF应用防火墙是应用层面安全防护的首道防线。
二 WAF应用防火墙部署难题WAF应用防火墙虽然可以极大地提升应用的安全等级,但是如何部署却让很多网络架构涉及者犯难,实际部署过程中面临的问题主要有三点:
- 与其他安全设备旁路部署的方式不同,应用防火墙的工作原理要求其必须串行部署在Web服务器前面;对于网站启用SSL加解密的,需要部署在SSL解密设备之后、WEB服务器之前,而这样的部署会极大的增加网络的复杂度,对应急排错造成困难; 对于存量的WEB类互联网系统,新进行串联部署WAF设备,意味着要将现有网络连接通路断开,在变更的过程中可能带来业务的中断,对变更的方案设计和实施工艺也带来很大的挑战性; 应用防火墙和应用逻辑结合紧密,如果策略配置不当,或者WAF应用防火墙本身产品BUG,很容易造成正常数据包被误拦截的情况,导致业务影响事件。
首先介绍一下WAF应用防火墙的工作模式、原理和典型部署架构。
1.旁路镜像方式旁路镜像模式通过镜像方式将请求流量吐给WAF应用防火墙,而WAF只能对访问流量进行检测和报警,无法实时拦截。由于失去了主动验证和拦截的能力,旁路部署的WAF应用防火墙防护能力大大降低,一般不建议这么部署。但是从运维的角度说,旁路部署是最安全的部署方式,如果只是想学习和测试WAF应用防火墙对WEB流量的检测机制,可以尝试旁路方式。典型部署如下:
图1.旁路方式部署WAF应用防火墙
2.二层透明模式部署WAF应用防火墙可以网桥方式工作在二层网络,通过截取请求流量来获取访问信息。WAF应用防火墙本身不需要配置IP地址,前端请求可以直接发到后端服务器,WAF设备对两者是透明的,可以当作一根网线,这种部署方式简单,零配置,如果设备故障可以进行bypass旁路直通,非常适合简单网络部署。
但是一般大型互联网企业网络都是全冗余架构,意味着从客户端到服务器绝不会只有一条网络路径,那么如果要按照二层代理方式会存在三个问题:一是每条路径都需要部署WAF应用防火墙将极大地提升成本;二是前后请求可能从不同的路径经过不同的WAF应用防火墙,而WAF应用防火墙之间的数据并没有同步机制,那么与上下文相关的策略将会失效,导致防护能力降低;三是网络路径确定了,设备数量就确定了,无法再进行灵活的扩容。
二层代理方式部署,主要考虑部署在网络流量的集中点或者WEB服务器前端,因此可以考虑部署在负载均衡前面或者WEB服务器前面:
(1)部署在负载均衡前端,WAF应用防火墙需要串联在交换机和负载均衡的物理链路上,由于一般网络中部署多台负载均衡集群,每台负载均衡与交换机可能有多条链路连接,因此需要串联多台WAF应用防火墙。负载均衡备机前端串联的WAF设备由于没有流量经过,成为了热备机,形成一定的资源浪费。
(2)WEB服务器前端,WAF应用防火墙串联部署在交换机和WEB服务器的物理链路上,WAF应用防火墙设备需要与WEB服务器一一对应,由于WAF应用防火墙设备价格远高于WEB服务器,这种部署将带来投入成本增加,也不利于后续的服务器扩容。
图3.二层部署架构二
3.代理模式代理模式是将真实服务器的地址映射到代理服务器上,客户端看起来,访问的就是代理服务器的地址,此种模式下,WAF应用防火墙分别与客户端和后面的服务器建立TCP连接,所有流量通过前端网络连接发送给WAF应用防火墙,在WAF处理后再通过后端连接转发到后台服务器。
代理模式的典型部署架构如下,采用多层负载均衡实现SSL、WAF和WEB的集群部署,可以降低三层设备之间的耦合性,提供灵活扩容的能力。
图4.反向代理模式的典型部署架构
(1)反向代理部署反向代理模式下,WAF应用防火墙与交换机之间仅需单VLAN互联,WAF防火墙与WEB服务器部署在同一VLAN,默认路由指向前端负载均衡。WEB服务器从网络层仅能观察到WAF接口的地址,无法直接观察到客户端源地址,建议SSL或者负载均衡层面在HTTP头中插入XFF字段,将源地址插入进去。
图5.反向代理模式下WAF的连接方式
(2)路由代理部署在某些情况下,服务器需要从网络层观察到客户端的IP地址,这时候需要用到路由代理模式,路由代理依然属于代理模式的一种。WAF应用防火墙通过出入两个VLAN与交换机连接,WAF应用防火墙需要配置出入向的路由,使得流量经过WAF后通过路由方式到达后端WEB服务器。此时,WAF转发流量将保留源地址,使得WEB服务器可以直接观察到客户端的IP地址。
图6.路由代理模式下WAF的连接方式
由于负载均衡、SSL、WAF均可以工作在代理模式,目前市场上不乏多功能合一的产品,于是其架构部署也有一些变种的方式:
- 负载均衡具备SSL加解密功能,直接可以省略掉SSL层,问题是SSL不再具备横向扩展能力,随着业务量的增加,瓶颈将出现在负载均衡设备上;
图7.负载均衡具备SSL加解密能力
- SSL具备负载均衡功能,SSL可以直接给后面的WAF做负载,省略掉一层负载均衡。问题是要求WAF产品需要具备二层原路返回功能(autolasthop),如果无此能力,将会出现来回路径不一致的情况。另外,路径较为复杂,排错定位比较困难。
图8.SSL具备负载均衡能力
- 同时具备负载均衡、SSL、WAF能力,那么可以直接给WEB服务器做负载,架构极为简单,但是由于SSL加解密和WAF规则过滤都极其消耗设备性能,故只能对小业务量应用进行部署。
图9.全功能负载均衡
另外想说明的是,虽然所有WAF产品都自称具备SSL加解密能力,但是因为性能的原因以及实际部署时候解耦的要求,通常WAF厂商不会推荐在自身产品上启用SSL功能,所以这种方式仅推荐功能测试时使用。
四 负载均衡策略设计考虑到模型的通用性,我们还是推荐将WAF应用防火墙部署在路由代理模式下,回到其经典代理部署架构,要将WAF加入到现有的环境中,其实是在SSL集群层和WEB集群层中间新增WAF集群层,可以通过切换第二层负载均衡关联的地址池实现WAF集群的部署,这种方式切换可以基本实现业务零中断。
图10.二层集群变三层集群
其中,第一层和第三层负载均衡因为没有架构变化,故策略保持不变。第二层负载均衡,由原先的直接给WEB服务器做负载,改为给WAF集群做负载,这里为了考虑WAF集群整体故障而需要快速隔离的情况,在WAF集群中还添加了WEB服务器集群逃生通道,其中WAF应用防火墙的优先级为高,WEB服务器的优先级低,这样在WAF故障时,负载均衡可以自动切换到二层负载均衡的方式,直接给WEB做负载,因此负载均衡方式采用优先级+最小连接数的策略。
健康检查方面,建议使用TCP直接监控WAF的业务端口,这里仅需要考虑监控到WAF层面,没有必要通过HTTP监控到业务层面。由于本层考虑到可能需要直接给WEB服务器做负载,故建议会话保持策略与第三层负载均衡保持一致即可。
该架构主要是通过网络层面调整调整策略支持WAF的接入,但是在日常运维排错中涉及到网络、应用SSL加解密、安全WAF策略、应用WEB服务器等过多领域,排错仍然稍显复杂,结合运维实践,主要有以下三点建议:
- 在每一层集群前部署监控,探测每一层的页面返回状态,故障时可以快速定位到具体出现问题的集群; 如短时间内无法快速定位到故障点,提前准备预案,优先通过负载均衡隔离WAF集群,降低问题排查维度; WAF应用防火墙需要具备完整的拦截日志和设备状态监控,便于后续的问题深入分析和策略持续优化。
至此,我们介绍完了互联网边界网络的重要组成部分—WAF应用防火墙的网络部署架构和具体实现方法,主要还是针对硬件WAF应用防火墙,一些基于虚拟化环境部署的软WAF部署也更加灵活;另外本文主要是说明WAF应用防火墙网络部署架构,后续大家如果对策略部署感兴趣,将会考虑对WAF部署策略进行介绍,欢迎大家交流探讨。