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 许可证发布