如意面板 WAF 防护原理
一句话概括
WAF 就像一个门卫,检查每一个进入网站的请求,发现可疑的就拦住它。
工作流程
每个 HTTP 请求到达 Nginx 时,WAF 按以下顺序依次检查:
请求进入
│
├─ 1. IP 白名单 → 命中则直接放行,跳过所有检查
│
├─ 2. URL 黑白名单 → 命中黑名单则拦截;命中白名单则跳过后续检查
│
├─ 3. IP 黑名单 → 命中则拦截
│
├─ 4. UA 黑名单 → 命中则拦截(User-Agent 检查)
│
├─ 5. 请求限制 → HTTP 方法、请求体大小等
│
├─ 6. 地域封禁 → 按 IP 所在国家/地区拦截
│
├─ 7. CC 防护 → 频率限制、错误计数、攻击容忍度
│
├─ 8. 攻击规则检测 → SQL注入、XSS、命令注入等(异常评分模式)
│
└─ 全部通过 → 放行关键点:白名单优先级最高,命中即放行;任何一个环节命中黑名单/规则即拦截。
两种工作模式
| 模式 | 行为 | 适用场景 |
|---|---|---|
| 观察模式 | 只记录日志,不拦截 | 初次部署,先观察是否有误报 |
| 防护模式 | 记录日志 + 拦截请求(返回403) | 正式防护 |
每个网站可以独立设置模式。
攻击检测:异常评分机制
传统 WAF 的问题是:单条规则匹配就拦截,容易误报。如意面板采用异常评分机制(参考 OWASP CRS),更智能地判断攻击。
评分规则
每条规则有一个严重度分数:
| 严重度 | 分值 | 说明 |
|---|---|---|
| critical | 5 | 命中即拦截(单条就超阈值) |
| high | 4 | 命中即拦截 |
| medium | 3 | 需要多条规则叠加 |
| low | 1 | 需要多条规则叠加 |
不同检查位置有不同的权重:
| 位置 | 权重 | 说明 |
|---|---|---|
| URL 参数 | 1.0 | 最可信,权重最高 |
| POST Body | 1.0 | 最可信,权重最高 |
| Cookie | 0.8 | 较可信 |
| Header | 0.5 | 容易误报,权重最低 |
计算公式
单条规则得分 = 严重度分值 × 位置权重
累计得分 = 所有命中规则得分之和
是否拦截 = 累计得分 >= 阈值(5)举例
场景:用户提交了一个包含 SQL 注入的表单
- POST body 匹配 SQL注入规则(high=4) × 权重(1.0) = 4.0
- Header 中匹配了可疑关键词(low=1) × 权重(0.5) = 0.5
- 累计 = 4.5 < 5 → 不拦截(观察记录)
场景:用户提交了一个包含命令注入的请求
- POST body 匹配命令注入规则(critical=5) × 权重(1.0) = 5.0
- 累计 = 5.0 >= 5 → 立即拦截这种机制的好处:单独一条 low/medium 规则不会误拦,但多条规则叠加时能识别复杂攻击。
攻击规则分类
| 类别 | 说明 | 示例 |
|---|---|---|
| SQL 注入 | 检测 SQL 语句注入 | UNION SELECT、OR 1=1 |
| XSS | 检测跨站脚本攻击 | <script>alert(1)</script> |
| 命令注入 | 检测系统命令执行 | ;cat /etc/passwd |
| 路径遍历 | 检测目录穿越攻击 | ../../etc/passwd |
| 扫描器 | 检测漏洞扫描工具 | 特征 UA、扫描路径 |
| 恶意爬虫 | 检测恶意爬虫 | 爬虫 UA 特征 |
| 敏感文件 | 检测敏感文件访问 | .env、.git/config |
CC 防护
CC(Challenge Collapsar)防护用于抵御高频请求攻击,包含三个子模块:
1. 频率限制
规则:N 秒内同一 IP 请求超过 M 次 → 触发
示例:60 秒内请求超过 120 次2. 错误计数
规则:N 秒内同一 IP 触发 WAF 拦截超过 M 次 → 自动拉黑
示例:60 秒内被拦截 10 次 → 该 IP 进入黑名单3. 攻击容忍度
规则:N 秒内同一 IP 的攻击评分累计超过阈值 → 自动拉黑
用于识别低频但持续的攻击行为被 CC 拉黑的 IP 会进入临时黑名单,倒计时结束后自动解除。
黑白名单体系
IP 黑白名单
- 白名单:信任的 IP,跳过所有 WAF 检查(最高优先级)
- 黑名单:已知恶意 IP,直接拦截
- 支持手动添加 + CC 自动拉黑
- 支持临时封禁(带倒计时)和永久封禁
URL 黑白名单
- 白名单:不需要 WAF 检查的 URL(如 API 回调地址)
- 黑名单:禁止访问的 URL
UA 黑白名单
- 白名单:信任的 User-Agent(如搜索引擎爬虫)
- 黑名单:已知恶意 User-Agent
地域封禁
根据 IP 的地理位置(GeoIP),按国家/地区进行拦截或放行。
JSON 请求智能处理
对于 JSON 格式的 POST 请求(如 API 接口),WAF 会:
- 解析 JSON 结构,提取键值对进行检测
- 自动跳过长文本字段(>512字符),避免对正常内容误报
- 使用独立的置信度评分(阈值3),比普通检测更保守
这使得 WAF 能正确处理 AI 接口、文件上传 API 等包含大量文本的请求。
日志记录
每次触发 WAF 规则都会记录攻击日志,包含:
- 攻击时间、来源 IP、IP 归属地
- 攻击类型、严重度、匹配的规则
- 完整的 HTTP 请求(请求行 + Headers + Body)
- 采取的动作(拦截/观察)
- 关联的网站
日志支持按时间范围、攻击类型、严重度、IP 等条件筛选和导出。
