如果我们想实现一个简易的 WAF,我们实际上需要干什么?我们需要先了解什么是 WAF。
🐭 什么是 WAF
WAF 全称 Web Application Firewall,是一种工作在应用层(7 层)的防火墙,主要用于对应用层中的 HTTP 流量进行监测、过滤和阻止。主要适用于 Web 应用中存在的已知的安全漏洞,例如:SQL 注入、CSRF 跨站请求伪造攻击、XSS 跨站脚本攻击等。
其主要防护原理是基于规则匹配,通过预制的识别规则,对 HTTP 协议中提取出来的信息进行匹配,如果可以匹配,则该请求被认为是攻击行为。WAF 将会对其执行相关的操作(告警、阻断、记录日志)。
综上所诉,WAF 的基本原理如下:
那么回到问题,什么是 WAF 呢?
WAF 是一个工作在应用层,主要针对 HTTP 流量进行解析、检测的装置;其检测功能主要基于规则引擎,通过预制规则,对流量中的相关信息进行匹配,能够针对流量中的 SQL 注入、CSRF、XSS 等 Web 攻击行为进行识别与防护,防护手段主要有告警、阻断、记录日志。
🐮 WAF 通常部署在哪里
从形态上来讲, WAF 主要分为软件型 WAF 和硬件型 WAF
软件型 WAF 主要以嵌入的形式进行部署,一般部署在 Web 服务器中,常见的例如 nginx waf、apache waf、openresty waf 等。
硬件型 WAF 主要通过软件绑定硬件的方式,其部署方式多种多样,以下内容中的 WAF 默认指代硬件 WAF。
WAF 的部署模式通常有: 反向代理、透明代理、透明桥、流量镜像等方式。
反向代理
客户与 WAF 进行交互,WAF 将客户的请求直接转发至后端,后方的 Web Server 与 WAF 进行交互,不会直接暴漏给客户。
这样的架构可以有效的影藏后边的具体服务,防止直接针对 Web Server 的攻击。
透明代理
客户访问的对象为 Web Server,WAF 在链路中间对于客户来说是透明无感知的。
这样的架构对网络拓扑来说入侵性比较小,不需要单独为 WAF 划分 IP 资源。
流量镜像
WAF 直接对接的对象是路由器,通过路由器的流量镜像功能,把客户到 Web Server 的流量镜像复制一份到 WAF
这样的架构对网络没有任何入侵,可靠性更高,如果 WAF 出现稳定性问题也不会影响到业务流量。
各个模式对比
部署模式 | 部署位置 | 能否检测 HTTPS | 经过 WAF 后是否会改变数据包 | WAF 的部署会否影响原链路 |
---|---|---|---|---|
反向代理 | 串联 | 能 | 是 | 是 |
透明代理 | 串联 | 能 | 是 | 轻微影响 |
流量镜像 | 旁路 | 否 | - | 不影响 |
🐯 WAF 能做什么不能做什么
✅ 能做什么
- 可以过滤 HTTP/HTTPS 流量
- 可以对 Web 应用流量进行安全审计
- 可以防止 CC 攻击
- 可以防止敏感信息泄露
❎ 不能做什么
- 不能过滤除了 HTTP/HTTPS 以外的其他流量
- 不能实现传统防火墙功能,例如地址映射
- 不能防病毒
总结
在本篇内容中,基本讲述了什么是 WAF 以及 WAF 的部署方式和能力范围。接下来我们将会开始从简易代码的角度了解,WAF 到底是怎么工作的。