网络安全技术与实训-第8章-第3节-防火墙与WAF的分工
第8章 防火墙
“我们已经有防火墙了,为什么还会被 SQL 注入?”——这是初学者最常见的困惑之一。答案在于:防火墙和 WAF 管的根本不是同一个层面的东西。
一、一句话分工
防火墙管“楼层”(IP / 端口层),WAF 管“包裹内容”(应用层内容)。
- 防火墙决定“哪些门能开”——它看的是源 IP、目的 IP、端口、协议。它保证只有 80/443 端口对外开放,其他一律关闭。
- WAF(Web 应用防火墙)决定“包裹里装的是什么”——它工作在应用层,能看懂 HTTP 请求的内容,因此可以识别并拦截 SQL 注入、跨站脚本(XSS)、恶意文件上传这类攻击。
回头看上一节的例子:SQL 注入的请求走的是完全合法的 GET /login.php?id=1' or '1'='1——端口是 80,协议是 HTTP,源 IP 也是正常用户的 IP。从防火墙的视角看,这个请求毫无异常,必须放行。 只有 WAF 会打开这个“包裹”检查内容,发现里面夹带了构造过的 SQL 片段,才拦得下来。
二、两者的定位对比
| 对比项 | 防火墙 | WAF |
|---|---|---|
| 工作层次 | 网络层 / 传输层 | 应用层(HTTP / HTTPS) |
| 看得见什么 | IP、端口、协议、连接状态 | URL、参数、请求体、Cookie、响应内容 |
| 能拦什么 | 未授权访问、端口扫描、异常连接 | SQL 注入、XSS、命令注入、恶意上传、爬虫与 CC 攻击 |
| 拦不住什么 | 合法端口里的应用层攻击 | 非 HTTP 的攻击、绕过规则的变形攻击 |
| 典型产品 | 各类边界防火墙、防火墙设备 | 雷池 WAF、云 WAF 服务 |
结论是:两者互补,不是替代关系。 只有防火墙,Web 应用层的漏洞就是敞开的门;只有 WAF,网络层的暴露面还是一片混乱。正确做法是同时部署,各管一层。
三、一个重要考点:为什么 Web 服务器不放在内网?
这是本章的经典考题,答案藏在“外网 → DMZ → 内网”这个结构里。
如果 Web 服务器放在内网,就意味着必须从外网打通一条进入内网的通道(否则外部用户访问不到)。这条通道一旦存在,就等于给所有外来者配了一把能进办公室的钥匙——网站被攻破的时候,攻击者不是站在前台,而是已经在办公室里了。
而把 Web 服务器放在 DMZ,对外只开 80/443,加上“DMZ → 内网基本拒绝”的策略之后:网站被攻破,损失被限制在 DMZ 这一层,核心数据库和内部系统依然安全。
所以这道题的答案可以概括为一句话:把 Web 服务器放内网,等于给所有外人配了办公室钥匙。
四、WAF 也不是万能的
- 规则依赖更新:和 IDS 一样,WAF 主要靠特征规则,新出现的绕过手法需要时间收录。
- 可能被绕过:编码变形、分块传输等手法可以躲过部分规则。
- 会误拦正常业务:规则过严时,正常用户提交的内容都可能被拦——这也是为什么 WAF 需要“观察模式”先行运行一段时间。
- 不能替代代码层加固:真正的根治办法依然是参数化查询、输入校验这些开发层面的事。WAF 是安全网,不是修复方案。
记住这个层次关系:防火墙负责“只开必要的门”,WAF 负责“检查包裹内容”,代码层负责“根治漏洞”。三者是纵深防御里不同的层,任何一层都不能替代另外两层。
五、配套实训
本章对应 实训 14 · 雷池 WAF 安装与拦截,这是整个第 8 章最有“获得感”的一个实训:
- 先把 DVWA 或 sqli-labs 靶场部署好,确认攻击可以成功(没有 WAF 的情况下)。
- 再在靶场前面装一台雷池 WAF,把流量引导经过它。
- 重复同样的攻击,观察 WAF 的拦截日志,看它是根据什么特征判定并阻断的。
这一前一后的对比,比任何讲解都更能说明“应用层防护”到底在做什么。做完之后也请回答一个问题:如果攻击者把请求做了编码变形,WAF 还能拦住吗?(提示:可以用实训环境亲手试一下,这就是理解“WAF 不是万能”的最好方式。)

