1.4 WAF 网页防火墙实战
一句话判断
WAF 不是“开了就安全”的开关,而是“先观察、再拦截、勤看记录”的持续调优过程。最稳的上线路线:全局开关 → 网站开关 → 观察模式跑两天 → 看命中记录微调 → 切防护模式。
先纠正三个常见误解
误解一:“社区版没有 WAF。” 错。社区版可以用 WAF 基础防护,包括黑白名单、网站设置和全局设置中的基础规则,不需要任何许可证。专业版/企业版多的是报表、拦截记录和高级规则。
误解二:“开了 WAF 就挡得住所有攻击。” WAF 降低的是常见 Web 攻击和恶意扫描带来的风险——参数注入、XSS、扫描器乱扫。应用自身的漏洞(比如你写的代码里有 SQL 拼接)WAF 能挡一部分,不是全部。代码安全和 WAF 是两条防线,不是替代关系。
误解三:“规则越严越好。” 拦截规则可能影响正常业务。最严的配置往往最先崩的是自己的用户——登录请求被拦、上传被拦、支付回调被拦。
使用前提和入口
官方列的三个前提,缺一不可:
- 已通过应用商店安装并运行 OpenResty;
- OpenResty 版本满足 WAF 页面提示的最低版本;
- 用网站设置前,至少已创建一个网站。
页面检测到 OpenResty 没装或版本太低时,会直接给你安装/升级入口。另外要记住:OpenResty 一停,网站和 WAF 防护同时失效——WAF 的规则是靠 OpenResty 执行的。
入口在左侧菜单 WAF。社区版有首页、黑白名单、网站设置、全局设置;导入专业版/企业版许可证后多出攻击报表、拦截记录、封锁记录。
生效范围:一个必须理清的逻辑
这是 WAF 最容易搞不懂的地方,官方原话是:
WAF 总开关和网站开关需要同时开启。
画成图就是:
全局总开关(开) + 网站开关(开) → 该网站受保护
全局总开关(开) + 网站开关(关) → 该网站不受保护
全局总开关(关) → 所有网站都不受保护(规则不删)
还有一条关于“网站标识”的规则:
全局设置中带有【网站】标识的项目是新建网站的默认配置;已有网站仍需在【网站设置】中单独确认。网站设置只影响当前选中的网站。
翻译成大白话:全局设置改了,不会自动覆盖已有网站。老站得逐个去网站设置里确认。这个设计是为了防止“一刀切”误伤,但很多人不知道,以为全局关了某规则就全关了,结果老站没生效。
四步上线法
官方给的建议顺序,我加上实战注解:
第一步:全局设置开总开关。 先把基础规则按默认值启用。
第二步:网站设置里开目标网站的 WAF。 别一次全开,先挑一个非核心站点。
第三步:观察模式跑起来。 观察模式的定义是“记录命中结果但不阻断请求”。这是 WAF 最有价值的功能——让你在不影响任何用户的前提下,看到“如果开了防护会拦错什么”。
第四步:验证关键请求。 重点验证四类:
| 请求类型 | 为什么容易中招 |
|---|---|
| 登录 | 表单里有用户名密码,参数规则可能误判 |
| 上传 | 文件内容里可能含敏感字符串 |
| API | JSON 参数多、长,规则容易误命中 |
| 回调(Webhook/支付) | 第三方来的请求,UA 和参数都不像正常用户 |
观察模式至少跑两天,覆盖一个完整的业务周期(周末和工作日流量特征不同)。
版本能力对照表
直接上官方的对照表(精简版),决定你要不要付费:
| 功能 | 社区版 | 专业版 / 企业版 |
|---|---|---|
| 黑白名单(IP、URL、User-Agent、IP 组) | 支持 | 支持 |
| 网站开关、防护/观察模式、检测强度 | 支持 | 支持 |
| 访问频率、攻击频率、404 频率限制 | 支持 | 支持 |
| URL 频率限制 | 不支持 | 支持 |
| 默认规则(参数/URL/HTTP/Cookie/Header/UA、SQL 注入、XSS) | 支持 | 支持 |
| 漏洞防御、应用规则 | 不支持 | 支持 |
| 文件上传限制、CDN 真实 IP | 支持 | 支持 |
| 自定义规则(ACL)、地区访问限制 | 不支持 | 支持 |
| 恶意 IP 组、蜘蛛 IP 池、IP 地址库 | 支持 | 支持 |
| 自定义拦截页面、日志配置 | 不支持 | 支持 |
| 首页统计、攻击报表、拦截记录、封锁记录 | 不支持 | 支持 |
怎么选:个人/小站,社区版的黑白名单 + 基础规则 + 频率限制已经挡住绝大多数扫描器;企业或有合规要求,专业版/企业版的 ACL、地区限制和拦截记录才是刚需。价格以官网为准。
频率限制:四个限制四种用途
这是 WAF 里最实用的防线,区分清楚:
| 限制 | 统计什么 | 典型用途 |
|---|---|---|
| 访问频率限制 | 单位时间内某 IP 的请求总数(全局)或单 URL 请求数(URL 模式) | 防爬虫、防刷接口 |
| 攻击频率限制 | 同一 IP 命中 WAF 规则的次数 | 自动封“一直在试规则”的攻击者 |
| 404 频率限制 | 同一 IP 触发 404 的次数 | 封扫描器(特征就是狂请求不存在的路径) |
| URL 频率限制(付费) | 指定 URL 的周期/阈值/封锁时间 | 精确保护关键接口(如登录、验证码) |
封锁行为是临时的:封锁时间到期自动解除,重启 OpenResty 也会清除所有临时封锁。要长期封,得进 IP 黑名单。
实战建议:404 频率限制是性价比最高的一条——扫描器一启动就狂 404,几乎零误伤(正常用户不会一分钟请求几十个不存在的页面)。
黑白名单:规则不多,但要想清楚用
进入 WAF → 黑白名单,可以配全局 IP、URL、User-Agent 黑白名单,还能维护可复用的 IP 组。
| 规则 | 黑名单 | 白名单 |
|---|---|---|
| IP | 拒绝匹配来源 | 跳过后续所有 WAF 检查 |
| URL | 阻止匹配路径 | 让匹配路径跳过后续检查 |
| User-Agent | 拦截扫描器 UA | 放行可信客户端 |
IP 组是好东西:集中维护一组 IP/CIDR,在黑白名单里重复引用,支持导入导出。CDN 出口 IP、办公网 IP、监控系统 IP,都适合做成 IP 组,一处维护处处生效。
三个必须记住的坑:
坑一:User-Agent 能伪造。 官方明确说“User-Agent 可以被客户端伪造,不能单独作为身份认证依据”。别把安全押在 UA 上。
坑二:白名单是“跳过后续所有检查”。 所以白名单范围一定要最小化。官方警告:“白名单不应作为长期规避规则问题的默认方案。”——发现误拦截,正确做法是调规则或缩小匹配范围,不是把整个 URL 加白名单。
坑三:过宽的黑名单断自己业务。 封 IP 段的时候想清楚这个段里有没有你的用户。
拦截记录:付费版最值钱的功能
拦截记录展示被 WAF 记录的请求,可按网站、命中规则、处理动作、URL、来源 IP 筛选。处理动作有三种:允许、拦截、观察。
它最值钱的地方不是“看”,而是可以直接从记录反向操作:
- 选中记录,把来源 IP 或 IP 段加入黑名单;
- 选中记录,把 URL 加入白名单;
- 按筛选条件创建导出任务;
- 查看请求详情(点【查看】)。
这就是调优的完整闭环:观察模式记录 → 看哪些是误伤 → 误伤的加白名单/调规则 → 真攻击的加黑名单 → 切防护模式。
封锁记录页是专门看“被频率限制临时封的 IP”的,可以单独解除封锁,也可以把临时封锁升级成长期黑名单。注意官方的提醒:
解除封锁只影响当前状态,如果触发条件仍然存在,该 IP 可能再次被封锁。
调优的真实案例:某站切了防护模式后,客服反馈部分用户登录失败。去拦截记录按 URL 筛登录接口,发现某条参数规则把密码里的特殊字符当成了注入特征。处理方式:把这条规则在该网站单独停用(不是关掉整个默认规则),观察一天,问题消失。这就是“最小调整”原则。
真实 IP:CDN 场景的生死线
如果你的站点套了 CDN 或在反向代理后面,WAF 看到的来源 IP 全是 CDN 的出口 IP。这时候黑白名单和频率限制全部失效——你封的是 CDN,等于封了所有用户。
解决方式是在全局/网站设置的 CDN 项里配置真实 IP 获取方式:从指定请求头、常用请求头列表或 X-Forwarded-For 中取。
官方的警告必须严肃对待:
只有在请求确实经过可信 CDN 或反向代理时才启用 CDN 配置,并确认代理会覆盖客户端传入的同名请求头。错误信任来源 IP 请求头可能导致黑白名单和频率限制被绕过。
判断标准:你的 CDN/代理会不会覆盖客户端传来的同名头?会,才安全。不会,攻击者就能伪造 X-Forwarded-For 绕过你的一切 IP 限制。
网站配置里也有一个真实 IP设置(配置客户端 IP 获取方式及可信 IP 来源),两者目的一致,配合使用。
三个全局配置项的实用价值
| 配置 | 干什么 | 建议 |
|---|---|---|
| 恶意 IP 组 | 启用并更新 1Panel 提供的恶意 IP 数据 | 建议开,免费的威胁情报 |
| 蜘蛛 IP 池 | 选择允许的搜索引擎蜘蛛 | 开,避免把百度/Google 蜘蛛封了 |
| IP 地址库 | 更新 IP 地理位置数据 | 用地区访问限制前必须更新 |
蜘蛛 IP 池值得单独说:SEO 站点最怕误封搜索引擎蜘蛛。开了蜘蛛 IP 池,白名单里就等于自动有了主流蜘蛛,配合频率限制使用,既挡爬虫又不挡搜索引擎。
上线前检查清单
环境检查
□ OpenResty 已安装且版本满足要求
□ OpenResty 正在运行
□ 目标网站已创建
开关与模式
□ 全局 WAF 总开关已开启
□ 目标网站 WAF 开关已开启
□ 先用【观察模式】跑 2 天
□ 检测强度默认【标准】(严格模式需先在全局默认规则开启)
规则确认
□ 四类关键请求已验证(登录、上传、API、回调)
□ 拦截记录里无大量误伤
□ 误伤已用最小范围白名单/规则调整处理
□ CDN 场景已配置真实 IP
切防护模式后
□ 持续观察 24 小时拦截记录
□ 客服/用户反馈渠道通畅
□ 确认蜘蛛 IP 池已开启
□ 保留回滚方案(可随时切回观察模式或关网站开关)
最后一句:WAF 的价值在于持续运营,不是配一次就完事。业务变了、规则更新了、攻击手法变了,都要回来看一眼拦截记录。把它当成“需要定期照看的安全设备”,而不是“装完就行的保险丝”。
更完整的规则说明见 《1Panel 官方文档:功能手册》 的 WAF 系列章节。
下一章:网站讲完了,我们进入第二章——数据库进阶,那是另一套“平时不起眼、出事要人命”的系统。
