跳转到内容

PRX-WAF

PRX-WAF 是一个 Web 应用防火墙,构建为基于 Cloudflare Pingora 代理框架的 7-crate Rust 工作区。它通过 17 阶段检测流水线检查 HTTP 流量,支持 YAML、ModSecurity 和 JSON 规则格式。

PRX-WAF 组织为包含七个 crate 的 Rust 工作区:

Crate角色
prx-waf-corePingora 集成、请求/响应生命周期、阶段编排
prx-waf-rules规则解析(YAML、ModSecurity、JSON)、规则引擎
prx-waf-detection所有 17 个阶段的检测逻辑
prx-waf-adminVue 3 管理面板和管理 API
prx-waf-notification告警投递(Webhook、Telegram、邮件)
prx-waf-cluster基于 QUIC 的集群同步
prx-waf-cli命令行界面

每个 HTTP 请求按顺序通过这些阶段。任何阶段的匹配都可以使用配置的操作终止处理。

阶段名称说明
1IP 白名单允许来自受信任 IP 的请求(跳过所有后续阶段)
2IP 黑名单阻止来自已知恶意 IP 的请求
3URL 白名单允许对受信任 URL 路径的请求
4URL 黑名单阻止对禁止 URL 路径的请求
5CC/DDoS速率限制和连接洪泛检测
6扫描器检测识别自动化漏洞扫描器(Nikto、sqlmap 等)
7Bot 检测区分机器人和人类(指纹识别、验证挑战)
8SQL 注入检测参数、头和请求体中的 SQLi 载荷
9XSS检测跨站脚本攻击载荷
10RCE检测远程代码执行尝试(命令注入、SSRF)
11目录遍历检测路径遍历尝试(../、编码变体)
12自定义规则 (Rhai)使用 Rhai 脚本语言编写的用户自定义检测逻辑
13OWASP CRSOWASP 核心规则集兼容层
14敏感数据检测响应中的敏感数据(信用卡号、SSN、API 密钥)
15防盗链防止未授权嵌入你的资源
16CrowdSec与 CrowdSec 社区黑名单集成
17GeoIP按国家/地区阻止或允许流量

PRX-WAF 支持三种规则格式,允许团队使用偏好的语法或导入现有规则集:

- id: sql-injection-union
phase: 8
description: "Detect UNION-based SQL injection"
match:
field: args
pattern: "(?i)union\\s+(all\\s+)?select"
action: block
severity: critical
SecRule ARGS "@rx (?i)union\s+(all\s+)?select" \
"id:1001,phase:2,deny,status:403,msg:'SQL Injection'"
{
"id": "xss-script-tag",
"phase": 9,
"match": {"field": "args", "pattern": "<script[^>]*>"},
"action": "block"
}

PRX-WAF 附带 50+ 规则文件,覆盖所有检测阶段的常见攻击模式。

当规则匹配时,PRX-WAF 可以执行以下操作之一:

操作说明
block返回 403 响应并终止请求
allow明确允许请求(跳过剩余阶段)
log记录匹配但允许请求继续
redirect将客户端重定向到指定 URL

操作按规则配置,可被全局策略覆盖。

PRX-WAF 在检测到威胁时推送实时告警:

渠道配置
Webhook向任意端点发送 JSON 载荷的 HTTP POST
TelegramBot API,带聊天 ID
EmailSMTP,可配置发件人/收件人

通知包含匹配的规则、请求详情(IP、URL、头)、严重程度和采取的操作。

PRX-WAF 支持 WebSocket 实时流用于实时监控:

  • 带检测结果的实时请求日志
  • 攻击频率指标
  • 被阻止的顶级 IP 和攻击类型

管理面板连接到这些流以获得实时安全概览。

对于多节点部署,PRX-WAF 节点通过 QUIC 同步状态:

  • 共享 IP 黑名单和速率限制计数器
  • 规则更新传播到所有节点
  • 一致的 GeoIP 和 CrowdSec 数据

Vue 3 管理面板提供:

  • 实时流量和威胁可视化
  • 规则管理(创建、编辑、启用/禁用)
  • IP 白名单/黑名单管理
  • 检测阶段配置
  • 通知渠道设置
  • 集群节点状态
Terminal window
# 构建所有 crate
cargo build --release
# 使用配置运行
./target/release/prx-waf --config /etc/prx-waf/config.yaml
# CLI:用示例请求测试规则
./target/release/prx-waf-cli test-rule --rule rules/sqli.yaml --request sample.http