网络防护 (WAF)
网络防护功能集成了 Coraza WAF(Web Application Firewall),可对经过 NetPanel 的 HTTP/HTTPS 流量进行规则过滤和拦截,防御常见的 Web 攻击。
技术原理
Web 应用防火墙工作原理
WAF 工作在应用层(OSI 第七层),对 HTTP/HTTPS 请求和响应进行深度检测,识别并拦截恶意流量:
客户端请求
│
▼
┌─────────────────────────────────────┐
│ WAF 检测引擎 │
│ │
│ 1. 解析 HTTP 请求 │
│ ├─ 请求头(Headers) │
│ ├─ 请求路径(URI) │
│ ├─ 请求参数(Query/Body) │
│ └─ Cookie │
│ │
│ 2. 规则匹配 │
│ ├─ OWASP CRS 规则集 │
│ ├─ IP 黑名单规则 │
│ ├─ 扫描器检测规则 │
│ └─ 自定义规则 │
│ │
│ 3. 执行动作 │
│ ├─ 检测模式 → 记录日志,放行 │
│ └─ 拦截模式 → 记录日志,返回 403 │
└─────────────────────────────────────┘
│
▼
转发到后端服务 / 返回 403 拦截页面常见攻击类型与防御
| 攻击类型 | 说明 | WAF 防御方式 |
|---|---|---|
| SQL 注入 | 在输入中插入 SQL 语句,操控数据库 | 检测 SQL 关键字和特殊字符组合 |
| XSS 跨站脚本 | 注入恶意 JavaScript 代码 | 检测 <script>、javascript: 等特征 |
| 路径遍历 | 使用 ../ 访问系统敏感文件 | 检测路径中的 ../ 序列 |
| 命令注入 | 在参数中注入系统命令 | 检测 shell 命令特征符号 |
| 扫描器探测 | 使用工具扫描漏洞 | 检测已知扫描器的 User-Agent |
| CC 攻击 | 高频请求耗尽服务器资源 | 速率限制和频率检测 |
Coraza WAF 引擎
NetPanel 集成的 Coraza 是一个开源的 Go 语言 WAF 引擎,完全兼容 OWASP ModSecurity 规则集:
- 高性能:基于 Go 语言实现,处理延迟极低
- 规则兼容:支持 ModSecurity SecRule 语法
- OWASP CRS:内置 OWASP 核心规则集(Core Rule Set)
功能概述
- 基于 Coraza WAF 引擎,兼容 OWASP ModSecurity 规则集
- 支持自定义 SecRule 规则
- 可配置拦截模式(检测/拦截)
- 实时查看拦截日志
- 支持规则例外配置(白名单)
配置说明
进入 网络防护 页面,点击 新建 按钮:
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| 名称 | 字符串 | ✅ | — | WAF 规则组名称 |
| 启用 | 布尔 | ✅ | true | 是否启用 |
| 绑定站点 | 选择 | ✅ | — | 关联的 Caddy 站点 |
| 运行模式 | 枚举 | ✅ | 检测 | 检测(仅记录)或 拦截(记录并拦截) |
| 规则集 | 多选 | ❌ | — | 启用的规则集 |
| 自定义规则 | 文本 | ❌ | — | 自定义 SecRule 规则 |
运行模式说明
| 模式 | 行为 | 适用场景 |
|---|---|---|
| 检测模式 | 仅记录匹配的请求,不拦截 | 初期调试、观察误报情况 |
| 拦截模式 | 记录并拦截匹配的请求,返回 403 | 正式防护,确认无误报后启用 |
内置规则集
| 规则集 | 说明 | 防御范围 |
|---|---|---|
| OWASP CRS | OWASP 核心规则集 | SQL 注入、XSS、路径遍历、命令注入等 |
| IP 黑名单 | 拦截已知恶意 IP | 已知攻击源 IP |
| 扫描器检测 | 检测并拦截常见漏洞扫描工具 | Nmap、sqlmap、Nikto 等扫描器 |
配置步骤
第一步:为站点启用 WAF
- 确保已在 网站服务 中配置了 Caddy 站点
- 进入 网络防护 页面,点击 新建
- 填写名称,选择要保护的站点
- 运行模式选择 检测(初期建议)
- 勾选 OWASP CRS 规则集
- 点击保存
第二步:观察检测日志
运行一段时间后,点击规则组的 日志 按钮,查看是否有误报:
- 若日志中出现正常业务请求被标记,需添加例外规则
- 若日志中只有真实攻击请求,可切换到拦截模式
第三步:切换拦截模式
确认无误报后,将运行模式改为 拦截,WAF 开始主动防护。
配置示例
示例 1:基础 WAF 防护
为 Caddy 站点启用基础 WAF 防护:
| 字段 | 值 |
|---|---|
| 名称 | 基础防护 |
| 绑定站点 | 选择已配置的 Caddy 站点 |
| 运行模式 | 检测(初期建议先用检测模式) |
| 规则集 | OWASP CRS |
示例 2:自定义规则
阻止特定 User-Agent(如 sqlmap 扫描工具):
SecRule REQUEST_HEADERS:User-Agent "@contains sqlmap" \
"id:1001,phase:1,deny,status:403,msg:'SQLMap detected'"阻止访问特定路径:
SecRule REQUEST_URI "@beginsWith /admin" \
"id:1002,phase:1,deny,status:403,msg:'Admin path blocked'"限制请求体大小(防止大文件上传攻击):
SecRequestBodyLimit 10485760
SecRequestBodyNoFilesLimit 131072阻止特定国家/地区 IP(需配合 IP 地址库):
SecRule REMOTE_ADDR "@ipMatch 1.2.3.0/24" \
"id:1003,phase:1,deny,status:403,msg:'Blocked IP range'"示例 3:添加规则例外(白名单)
如果某条规则导致误报,可以添加例外:
# 禁用规则 ID 942100(SQL 注入检测)对特定路径的检测
SecRule REQUEST_URI "@beginsWith /api/query" \
"id:9001,phase:1,pass,nolog,ctl:ruleRemoveById=942100"
# 完全禁用某条规则
SecRuleRemoveById 942100查看和分析拦截日志
在 WAF 规则列表中,点击 日志 按钮可查看详细日志:
| 字段 | 说明 |
|---|---|
| 触发时间 | 请求发生的时间戳 |
| 来源 IP | 发起请求的客户端 IP |
| 请求方法 | GET / POST / PUT 等 |
| 请求路径 | 被请求的 URL 路径 |
| 匹配规则 ID | 触发的规则编号 |
| 规则描述 | 规则的说明信息 |
| 处理结果 | 检测(放行)或拦截(403) |
日志分析方法
识别攻击模式:
- 同一 IP 频繁触发规则 → 可能是自动化扫描,将该 IP 加入防火墙黑名单
- 多个 IP 触发相同规则 → 可能是分布式攻击,检查规则是否需要加强
- 正常用户触发规则 → 可能是误报,检查规则 ID 并添加例外
调整防护策略:
- 误报率高 → 降低规则敏感度或添加例外
- 漏报(攻击未被检测)→ 添加自定义规则或启用更多规则集
- 性能影响大 → 禁用不必要的规则集,保留核心规则
安全最佳实践
先检测后拦截
新部署 WAF 时,务必先在检测模式下运行至少 1-2 周,充分观察日志,确认无误报后再切换到拦截模式。
定期更新规则集
OWASP CRS 规则集会定期更新以应对新型攻击。关注 OWASP CRS 官网 获取最新规则。
结合防火墙使用
WAF 主要防御应用层攻击(CC 攻击),对于网络层 DDoS(如 SYN Flood)效果有限。大规模 DDoS 需要联系上游服务商进行流量清洗。
误拦截风险
OWASP CRS 规则集可能会误拦截正常请求(误报)。建议先在检测模式下运行一段时间,观察日志,确认无误报后再切换到拦截模式。
常见问题
Q:WAF 开启后网站访问变慢?
WAF 对每个请求进行规则匹配,会有轻微性能开销。可以禁用不必要的规则集(如扫描器检测),只保留 OWASP CRS 核心规则,减少匹配开销。
Q:正常用户被拦截(误报)怎么办?
- 查看日志,找到触发的规则 ID
- 在自定义规则中添加例外:
SecRuleRemoveById <规则ID> - 或针对特定路径/参数添加例外规则
Q:WAF 能防御 DDoS 攻击吗?
WAF 主要防御应用层攻击(CC 攻击),对于网络层 DDoS(如 SYN Flood)效果有限。大规模 DDoS 需要联系上游服务商进行流量清洗。
Q:自定义规则语法错误怎么排查?
检查 NetPanel 系统日志,WAF 引擎会输出规则解析错误信息。常见错误:规则 ID 重复、缺少必要参数、语法格式不正确。