4.1 WAF 进阶与网站监控

一句话判断

WAF 的社区版是“门锁”,专业版的两把利器是 ACL 自定义规则和地区访问限制——前者能按任意条件精准拦请求,后者能一刀切掉整个地区的流量;网站监控则是“摄像头”,用 OpenResty 访问日志给你画出 PV/UV/状态码/蜘蛛的整套台账。

承上:1.4 节讲过的不再重复

社区版 WAF 的玩法(黑白名单、防护/观察模式、基础频率限制、默认规则)在 1.4 节讲过了。本节只讲两个新东西:

  1. 专业版/企业版多出来的能力(ACL、地区限制、URL 频率限制、漏洞防御、应用规则、拦截记录、攻击报表、自定义拦截页面、日志配置);
  2. 网站监控(专业版/企业版)。

先复习一条没变的核心规则: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、流量和蜘蛛访问量
设置 采集、保留和排除规则

启用顺序

  1. 确认 OpenResty 已安装运行且版本符合要求;
  2. 进入设置,在全局设置中启用监控;
  3. 按需在网站设置中为指定网站调整采集规则;
  4. 等新请求产生后看数据。

第 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 节。