Skip to content

网络防护 (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 CRSOWASP 核心规则集SQL 注入、XSS、路径遍历、命令注入等
IP 黑名单拦截已知恶意 IP已知攻击源 IP
扫描器检测检测并拦截常见漏洞扫描工具Nmap、sqlmap、Nikto 等扫描器

配置步骤

第一步:为站点启用 WAF

  1. 确保已在 网站服务 中配置了 Caddy 站点
  2. 进入 网络防护 页面,点击 新建
  3. 填写名称,选择要保护的站点
  4. 运行模式选择 检测(初期建议)
  5. 勾选 OWASP CRS 规则集
  6. 点击保存

第二步:观察检测日志

运行一段时间后,点击规则组的 日志 按钮,查看是否有误报:

  • 若日志中出现正常业务请求被标记,需添加例外规则
  • 若日志中只有真实攻击请求,可切换到拦截模式

第三步:切换拦截模式

确认无误报后,将运行模式改为 拦截,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 并添加例外

调整防护策略:

  1. 误报率高 → 降低规则敏感度或添加例外
  2. 漏报(攻击未被检测)→ 添加自定义规则或启用更多规则集
  3. 性能影响大 → 禁用不必要的规则集,保留核心规则

安全最佳实践

先检测后拦截

新部署 WAF 时,务必先在检测模式下运行至少 1-2 周,充分观察日志,确认无误报后再切换到拦截模式

定期更新规则集

OWASP CRS 规则集会定期更新以应对新型攻击。关注 OWASP CRS 官网 获取最新规则。

结合防火墙使用

WAF 主要防御应用层攻击(CC 攻击),对于网络层 DDoS(如 SYN Flood)效果有限。大规模 DDoS 需要联系上游服务商进行流量清洗。

误拦截风险

OWASP CRS 规则集可能会误拦截正常请求(误报)。建议先在检测模式下运行一段时间,观察日志,确认无误报后再切换到拦截模式


常见问题

Q:WAF 开启后网站访问变慢?

WAF 对每个请求进行规则匹配,会有轻微性能开销。可以禁用不必要的规则集(如扫描器检测),只保留 OWASP CRS 核心规则,减少匹配开销。

Q:正常用户被拦截(误报)怎么办?

  1. 查看日志,找到触发的规则 ID
  2. 在自定义规则中添加例外:SecRuleRemoveById <规则ID>
  3. 或针对特定路径/参数添加例外规则

Q:WAF 能防御 DDoS 攻击吗?

WAF 主要防御应用层攻击(CC 攻击),对于网络层 DDoS(如 SYN Flood)效果有限。大规模 DDoS 需要联系上游服务商进行流量清洗。

Q:自定义规则语法错误怎么排查?

检查 NetPanel 系统日志,WAF 引擎会输出规则解析错误信息。常见错误:规则 ID 重复、缺少必要参数、语法格式不正确。

基于 GPL-3.0 许可证发布