如果我们想实现一个简易的 WAF,我们实际上需要干什么?我们需要先了解什么是 WAF。

🐭 什么是 WAF

WAF 全称 Web Application Firewall,是一种工作在应用层(7 层)的防火墙,主要用于对应用层中的 HTTP 流量进行监测、过滤和阻止。主要适用于 Web 应用中存在的已知的安全漏洞,例如:SQL 注入、CSRF 跨站请求伪造攻击、XSS 跨站脚本攻击等。

其主要防护原理是基于规则匹配,通过预制的识别规则,对 HTTP 协议中提取出来的信息进行匹配,如果可以匹配,则该请求被认为是攻击行为。WAF 将会对其执行相关的操作(告警、阻断、记录日志)。

综上所诉,WAF 的基本原理如下:

image.png

那么回到问题,什么是 WAF 呢?

WAF 是一个工作在应用层,主要针对 HTTP 流量进行解析、检测的装置;其检测功能主要基于规则引擎,通过预制规则,对流量中的相关信息进行匹配,能够针对流量中的 SQL 注入、CSRF、XSS 等 Web 攻击行为进行识别与防护,防护手段主要有告警、阻断、记录日志。

🐮 WAF 通常部署在哪里

从形态上来讲, WAF 主要分为软件型 WAF 和硬件型 WAF

image.png

软件型 WAF 主要以嵌入的形式进行部署,一般部署在 Web 服务器中,常见的例如 nginx waf、apache waf、openresty waf 等。

硬件型 WAF 主要通过软件绑定硬件的方式,其部署方式多种多样,以下内容中的 WAF 默认指代硬件 WAF。

WAF 的部署模式通常有: 反向代理、透明代理、透明桥、流量镜像等方式。

反向代理

image.png

客户与 WAF 进行交互,WAF 将客户的请求直接转发至后端,后方的 Web Server 与 WAF 进行交互,不会直接暴漏给客户。

这样的架构可以有效的影藏后边的具体服务,防止直接针对 Web Server 的攻击。

透明代理

image.png 客户访问的对象为 Web Server,WAF 在链路中间对于客户来说是透明无感知的。

这样的架构对网络拓扑来说入侵性比较小,不需要单独为 WAF 划分 IP 资源。

流量镜像

image.png

WAF 直接对接的对象是路由器,通过路由器的流量镜像功能,把客户到 Web Server 的流量镜像复制一份到 WAF

这样的架构对网络没有任何入侵,可靠性更高,如果 WAF 出现稳定性问题也不会影响到业务流量。

各个模式对比

部署模式 部署位置 能否检测  HTTPS 经过  WAF  后是否会改变数据包 WAF  的部署会否影响原链路
反向代理 串联
透明代理 串联 轻微影响
流量镜像 旁路 - 不影响

🐯 WAF 能做什么不能做什么

✅ 能做什么

  1. 可以过滤 HTTP/HTTPS 流量
  2. 可以对 Web 应用流量进行安全审计
  3. 可以防止 CC 攻击
  4. 可以防止敏感信息泄露

❎ 不能做什么

  1. 不能过滤除了 HTTP/HTTPS 以外的其他流量
  2. 不能实现传统防火墙功能,例如地址映射
  3. 不能防病毒

总结

在本篇内容中,基本讲述了什么是 WAF 以及 WAF 的部署方式和能力范围。接下来我们将会开始从简易代码的角度了解,WAF 到底是怎么工作的。