4.1 WAF 进阶与网站监控
一句话判断
WAF 的社区版是“门锁”,专业版的两把利器是 ACL 自定义规则和地区访问限制——前者能按任意条件精准拦请求,后者能一刀切掉整个地区的流量;网站监控则是“摄像头”,用 OpenResty 访问日志给你画出 PV/UV/状态码/蜘蛛的整套台账。
承上:1.4 节讲过的不再重复
社区版 WAF 的玩法(黑白名单、防护/观察模式、基础频率限制、默认规则)在 1.4 节讲过了。本节只讲两个新东西:
- 专业版/企业版多出来的能力(ACL、地区限制、URL 频率限制、漏洞防御、应用规则、拦截记录、攻击报表、自定义拦截页面、日志配置);
- 网站监控(专业版/企业版)。
先复习一条没变的核心规则:WAF 总开关和网站开关必须同时开启,规则才生效。全局设置里带「网站」标识的是新建网站的默认值,已有网站要去网站设置里逐个确认——改全局默认值不会自动覆盖已有网站。
ACL 自定义规则:从“开关”到“条件语句”
默认规则是“按特征匹配”,ACL 是“按条件匹配”。官方定义:
自定义规则(ACL):按 URL、IP、Header、Host 等条件匹配请求,并设置允许、拒绝、人机验证等动作。
“人机验证”这个动作值得单独记。它不是直接拦,而是让访客过一道验证——对付扫描器有效,对付真人客户基本无感。这是 ACL 比黑白名单高级的地方:黑白名单只有放行和拦截两档,ACL 有灰度档。
几个典型用法:
| 场景 | 条件 | 动作 |
|---|---|---|
| 保护后台登录接口 | URL 匹配 /admin/* 且非办公网 IP |
人机验证 |
| 封掉某个一直刷的 UA | User-Agent 包含某个特征 | 拒绝 |
| 只允许指定 IP 调 API | URL 前缀 /api/ 且 IP 不在白名单 |
拒绝 |
| 限制特定 Host 访问 | Host 不符合预期 | 拒绝 |
“保护后台登录接口”这条最实用。 扫描器最喜欢扫 /admin、/wp-login.php,直接拉黑人机验证,正常用户多点一步,扫描器基本就放弃了。
ACL 的坑:条件写得越细,漏掉正常请求的可能越大。上线 ACL 必须走观察模式(记录命中但不阻断),跑两天看拦截记录里有没有正常请求,再切防护模式。这条纪律在 1.4 节立过,ACL 时代同样适用,而且更重要——ACL 的条件是你自己写的,错只有你自己能发现。
地区访问限制:一刀切的艺术
地区访问限制按国家、地区或省份允许或拒绝访问。专业版/企业版功能。
什么场景值得开:
| 场景 | 建议 |
|---|---|
| 公司内网系统,员工都在国内 | 拒绝境外地区 |
| 面向本地客户的城市服务 | 只允许本省/本国 |
| 面向全球的电商 | 别开,会误伤 |
为什么不建议无脑开:地区限制依赖 IP 地址库识别归属,而 IP 库会过期。官方在全局设置里提供了 IP 地址库更新入口——开了地区限制,记得定期更新地址库,否则新分配的 IP 段归属可能是错的,误判的就可能是你的客户。
还有一个绕不开的话题:地区限制拦不住代理池和 VPN。它是降低噪音的手段,不是铜墙铁壁。 真搞你的攻击者会用全球代理,地区限制最多让他们成本高一点。
URL 频率限制:给单个接口上紧箍咒
全局的访问频率限制(社区版就有)是按 IP 统计对全站的请求数;URL 频率限制(专业版)可以为指定 URL 单独设置周期、阈值和封锁时间。
为什么需要它:有些接口天生请求量大(比如心跳、轮询),按全站统一阈值要么误伤、要么形同虚设。分接口设阈值,才能做到“正常用户无感、刷接口的被封”。
三种频率限制的分工:
| 限制 | 统计口径 | 版本 |
|---|---|---|
| 访问频率限制(全局/URL 模式) | IP 对全站或单 URL 的请求总数 | 全部版本 |
| 攻击频率限制 | 同一 IP 多次命中 WAF 规则 | 全部版本 |
| 404 频率限制 | 同一 IP 多次访问不存在的资源 | 全部版本 |
| URL 频率限制 | 指定 URL 单独的周期/阈值 | 专业版/企业版 |
一条机制提醒:临时封锁到期会自动解除,重启 OpenResty 也会清除临时封锁。所以“重启大法”能解封,但也会把所有临时封锁清零——刚挡住的攻击者会一起被放出来。
拦截记录与攻击报表:看得见才调得准
社区版调 WAF 的痛苦在于“看不见命中了什么”——只能靠网站访问结果和 OpenResty 日志排查。专业版/企业版给了三只眼睛:
| 页面 | 看什么 | 调优价值 |
|---|---|---|
| 拦截记录 | 每条命中规则的请求详情 | 判断误伤的唯一依据 |
| 封锁记录 | 被临时封锁的 IP | 看频率限制的效果 |
| 攻击报表 / 首页统计 | 攻击趋势汇总 | 给老板看,也给自己定调 |
调规则的闭环:改规则 → 看拦截记录 → 区分正常/恶意 → 调整条件 → 再看。没有拦截记录,专业版的钱就白花了。
企业版的权限提醒:普通用户需要 WAF 查看权限才能看这些记录,修改规则需要 WAF 管理权限。
WAF 的全局配置:三个免费的隐藏好物
全局设置的“配置”分组里,有几个社区版也能用的东西容易被忽略:
| 功能 | 作用 | 建议 |
|---|---|---|
| 恶意 IP 组 | 启用 1Panel 提供的恶意 IP 数据 | 建议开,零成本 |
| 蜘蛛 IP 池 | 选择允许访问的搜索引擎蜘蛛 | 想被收录就开 |
| IP 地址库 | 更新 IP 地理位置数据 | 用地区限制时必更新 |
蜘蛛 IP 池说细致点:搜索引擎爬虫和扫描器在日志里长得很像,开了蜘蛛池后可以识别合法蜘蛛放行——既不被 WAF 误伤,又保住 SEO。
网站监控:流量的台账
网站监控通过 OpenResty 访问日志统计网站请求情况。入口是 高级功能 → 网站监控,仅专业版和企业版,需要许可证和网站监控权限,依赖受支持版本的 OpenResty。
先说清楚它是什么、不是什么:
| 它是 | 它不是 |
|---|---|
| 服务器端请求统计(PV/UV/IP/状态码) | 百度统计(客户端 JS 分析) |
| 运维视角的流量台账 | 转化分析工具 |
| 基于访问日志的离线统计 | 实时监控系统(如 Prometheus) |
这一点期望管理很重要:网站监控是给运维看的,不是给运营看的。它回答的是“这个站有没有流量、有没有异常状态码、蜘蛛来没来”,不是“用户从哪来、点了什么”。
页面结构
| 页面 | 内容 |
|---|---|
| 首页 | 核心访问指标和趋势摘要 |
| 访问统计 | 按来源域名、浏览器、操作系统、设备和状态码排行 |
| 趋势统计 | 按时间看请求变化 |
| 请求日志 | 筛选和查看单条请求,可创建导出任务 |
| 网站列表 | 按网站查看 PV、UV、IP、流量和蜘蛛访问量 |
| 设置 | 采集、保留和排除规则 |
启用顺序
- 确认 OpenResty 已安装运行且版本符合要求;
- 进入设置,在全局设置中启用监控;
- 按需在网站设置中为指定网站调整采集规则;
- 等新请求产生后看数据。
第 4 步别漏:监控只统计启用之后的请求,历史日志不会被回溯统计。刚打开看到空白是正常的。
设置项的讲究
| 设置 | 说明 |
|---|---|
| 日志保留天数 / 大小 | 两个条件共同限制保留范围 |
| 排除状态码 / 扩展名 / URI / IP / User-Agent | 匹配的数据不进统计 |
| CDN 配置 | 从指定请求头提取真实客户端 IP |
CDN 配置是网站监控的“真实 IP”问题:你的站在 CDN 后面,日志里记的就全是 CDN 节点 IP,UV/IP 统计全废。配置从指定请求头提取真实 IP 才能恢复有效统计。
官方的安全警告很到位:只有请求确实经过可信 CDN 或代理时才应信任其转发头,配置错误可能导致访问来源被伪造——伪造的 IP 会同时污染统计和安全分析。WAF 的 CDN 配置和监控的 CDN 配置是同一个逻辑,两处要一起配,口径一致。
日志导出
请求日志支持按方法、状态码、蜘蛛等条件筛选并创建导出任务。导出是后台任务,完成后从任务记录下载结果。 大站别在高峰导全量日志,慢慢跑。
WAF + 监控的联动套路
两个功能联起来用,能形成一个有用的闭环:
安全运营小循环
1. 网站监控看状态码分布(404 突增?500 异常?)
2. 请求日志里筛出异常 IP 的请求明细
3. 判断是扫描还是误伤
4. WAF 加规则(ACL / 频率限制 / 地区限制)
5. 观察模式确认拦截记录无误伤
6. 切防护模式,监控看 404 是否回落
这套循环每周跑一次,小站的安全水位能超过 90% 的个人站长。
本节要点
- ACL 的条件是自己写的,错只有自己能发现——上线必须走观察模式;
- 人机验证是 ACL 的灰度档,适合保护登录类接口;
- 地区限制依赖 IP 地址库,开了就要定期更新,且拦不住代理池;
- URL 频率限制(专业版)给单个接口单独设阈值;
- 重启 OpenResty 会清除所有临时封锁;
- 拦截记录是判断误伤的唯一依据,没有它调规则全靠猜;
- 网站监控是服务端统计,不是百度统计,且不回溯历史日志;
- CDN 后面的站必须配置真实 IP 提取,否则 UV/IP 统计全废。
WAF 与网站监控的完整规则说明见 《1Panel 官方文档:功能手册》 的“WAF”与“网站监控”章节,第 1 章的 1.4 节讲了社区版 WAF 的基础玩法,可以对照着看。
下一节:网站安全说完,往上看一层——多台服务器的统一管理:节点管理与资源同步,见 4.2 节。
