Orangewarrior/KrakenWaf
GitHub: Orangewarrior/KrakenWaf
一个基于 Rust 的高性能 Web 应用防火墙,通过多引擎检测与异步架构提升安全性与吞吐。
Stars: 0 | Forks: 0
# KrakenWaf 2.7.37
## 🚀 概述
KrakenWaf 是一个用 Rust 编写的现代高性能 Web 应用防火墙(WAF)。
它专为实际部署而设计,结合了安全性、性能和简洁性。

## 🧠 架构概述
KrakenWaf 基于以下技术构建:
- **Tokio(异步运行时)** → 高并发、非阻塞 I/O
- **反向代理模型** → 部署在应用前端
- **流式检查管道** → 分块分析请求
- **模块化 WAF 引擎** → 基于规则 + 高级检测引擎
- **模块化自定义 DFA** → 用于检测异常
### 流程
客户端 → TLS(KrakenWaf)→ 检查 → 上游服务 → 响应
## ⚡ 检测引擎
KrakenWaf 支持多层检测机制:
### 🔹 正则表达式引擎
- 灵活的规则检测
### 🔹 Aho-Corasick
- 快速关键词匹配
### 🔹 Vectorscan(基于 Hyperscan)
- SIMD 优化
- 极快的多模式匹配
- 用于 Suricata 等工具中的高速模式匹配
### 🔹 自定义 DFA(确定性有限自动机)
- SQL 注入注释绕过检测
- 溢出攻击检测
- SSTI 检测
- SSI 注入检测
- ESI 注入检测
### 🔹 libinjection
- 检测 SQLi 和 XSS
- 以注入检测为重点的行业标准方法
## 🏗️ 构建选项
默认构建:
```
cargo build --release
```
启用 Vectorscan:
```
cargo build --release --features "vectorscan-engine"
```
## 🔐 TLS 配置
### 生成证书
```
openssl req -x509 -newkey rsa:4096 \
-keyout blog.key \
-out blog.crt \
-days 365 \
-nodes
```
### 配置 SNI
文件:
```
rules/tls/sni_map.csv
```
示例:
```
blog.local,/opt/certs/blog.crt,/opt/certs/blog.key,true
```
### `sni_map.csv` 工作原理
每一行将主机名映射到证书和私钥:
```
hostname,cert_path,key_path,is_default
```
示例:
```
blog.local,/opt/certs/blog.crt,/opt/certs/blog.key,true
```
含义:
- `hostname` → 客户端访问的域名
- `cert_path` → 该域名的证书文件
- `key_path` → 该域名的私钥文件
- `is_default` → `true` 表示未匹配 SNI 时使用的备用证书
### 自定义阻断页面
自定义阻断页面的参数为:
```
--blockmsg ./blockpages/blocked.html
```
当 KrakenWaf 阻断请求时,会返回该文件的内容而不是默认的错误响应体。
这适用于:
- 品牌化安全页面
- 事件参考编号
- 内部帮助台说明
- 被策略阻断的合法用户的友好提示
示例 `blocked.html`:
```
Request Blocked
Request blocked by KrakenWaf
Your request matched a security policy.
If you believe this is a mistake, contact the administrator.
``` ## 🧪 示例:保护 DVWA 用于测试攻击 启用 Vectorscan: ``` git clone https://github.com/Orangewarrior/KrakenWaf cd KrakenWaf cargo clean cargo build --release --features "vectorscan-engine" ``` 准备证书: ``` mkdir certs openssl req -x509 -nodes -days 365 -newkey rsa:4096 -keyout certs/key.pem -out certs/cert.pem -config rules/tls/localhost.cnf ``` 设置 `rules/tls/sni_map.csv` 如下: ``` cat rules/tls/sni_map.csv localhost,./certs/cert.pem,./certs/key.pem,true ``` DVWA 容器示例: ``` docker run -d --name dvwa -p 8080:80 vulnerables/web-dvwa ``` ## 在 DVWA 前运行 KrakenWaf 用于本地 DVWA 实验室的确切命令: ``` target/release/krakenwaf \ --listen 127.0.0.1:8443 \ --upstream http://127.0.0.1:8080 \ --rules-dir ./rules \ --sni-map ./rules/tls/sni_map.csv \ --blockmsg ./alert/blockalert.html \ --verbose \ --allow-private-upstream \ --enable-vectorscan \ --enable-libinjection-sqli \ --enable-libinjection-xss \ --dfa-load ./rules/dfa/config.yaml \ --real-ip-header X-Forwarded-For \ --trusted-proxy-cidrs 127.0.0.1/32 ``` 访问保护的应用: ``` https://localhost:8443 ``` 登录账号:admin,密码:password。 ## 规则模型 KrakenWaf 加载三组规则: - `rules/rules.json`:用于 URI、头部和主体的关键词规则 - `rules/regex/*.json`:Rust 正则规则 - `rules/Vectorscan/strings2block.json`:**字面量** Vectorscan 规则 - 这有助于验证: - XSS 检测 - SQL 注入检测 - 正则规则命中 - 关键词规则命中 - 自定义阻断响应 - 日志和指标行为 ## 📊 指标 ``` curl -k https://localhost/metrics ``` ## ❤️ 健康检查 ``` curl -k https://localhost/__krakenwaf/health ``` ## 🗄 日志 - `logs/krakenwaf.log` - `logs/json/krakenwaf.jsonl` - `logs/raw/critical.log` 示例展示 JSONL 日志片段: ``` cat logs/json/krakenwaf.jsonl.2026-04-06 | tail -10 {"timestamp":"2026-04-06T01:18:56.145800Z","level":"INFO","fields":{"message":"request blocked","title":"Remote payload downloader","severity":"high","cwe":"CWE-494","engine":"vectorscan","ip":"127.0.0.1","method":"POST","uri":"/vulnerabilities/xss_s/","fullpath_evidence":"/vulnerabilities/xss_s/","rule":"wget http","rule_source":"Vectorscan/strings2block.json:10","reference_url":"https://owasp.org/www-community/attacks/Command_Injection"},"target":"krakenwaf"} {"timestamp":"2026-04-06T01:19:26.146276Z","level":"ERROR","fields":{"message":"connection timed out: deadline has elapsed"},"target":"krakenwaf"} ``` SQLite: ``` logs/db/vulns_alert.db ``` 检查数据库: ``` $ sqlite3 logs/db/vulns_alert.db "SELECT id,title,severity,engine,http_method,request_uri,fullpath_evidence,rule_match,reference_url,occurred_at FROM vulnerabilities ORDER BY id DESC LIMIT 10;" 1|Remote payload downloader|high|vectorscan|POST|/vulnerabilities/xss_s/|/vulnerabilities/xss_s/|wget http|https://owasp.org/www-community/attacks/Command_Injection|2026-04-06T01:18:56.145777535+00:00 ``` 注意:如果需要检查完整请求,请参考 `request_payload` 字段。在 SQL 查询中使用它:`SELECT ...` ## ⚙️ CLI 参数 | 参数 | 描述 | |------|------| | `--listen` | KrakenWaf 绑定的地址和端口,例如 `0.0.0.0:443` | | `--upstream` | 后端源 URL,例如 `https://192.168.0.2` 或 `http://127.0.0.1:8080` | | `--rules-dir` | 包含规则文件、阻断列表、正则规则和 TLS 文件的根目录 | | `--sni-map` | 用于将主机名映射到证书和密钥文件的 TLS SNI CSV 文件路径 | | `--blocklist-ip` | 启用 IP 和 CIDR 阻断列表强制 | | `--allow-private-upstream` | 允许私有或本地上游目标(如 RFC1918 地址) | | `--enable-libinjection-sqli` | 启用基于 libinjection 的 SQLi 检测 | | `--enable-libinjection-xss` | 启用基于 libinjection 的 XSS 检测 | | `--enable-vectorscan` | 启用 Vectorscan 快速多模式匹配 | | `--rate-limit-per-minute` | 每个客户端 IP 每分钟允许的最大请求数 | | `--upstream-timeout-secs` | 上游请求的超时秒数 | | `--connection-timeout-secs` | WAF 接受的客户端连接的超时秒数 | | `--max-connections` | WAF 允许的最大并发连接数 | | `--internal-header-name` | 添加到转发请求中以标记由 KrakenWaf 处理的可选头部 | | `--blockmsg` | 阻断请求时返回的自定义 HTML 或文本文件路径 | | `--verbose` | 启用更详细的运行时日志 | | `--help` | 显示 CLI 帮助并退出 | | `--version` | 打印当前 KrakenWaf 版本并退出 | | `--header-protection-injection` | 加载规则以向所有响应注入自定义 HTTP 头部,可在 /rules/headers_http/ 查看 | | `--dfa-load` | 加载自定义 DFA,参见 ./rules/dfa/config.yaml 以启用或禁用每个 DFA | | `--real-ip-header`[1] | 指定 KrakenWaf 应使用的原始客户端 IP 的 HTTP 头部 | | `--trusted-proxy-cidrs`[2] | 指定 KrakenWaf 应信任为代理的源 IP | 更多信息请参考 [1][2] 的 [真实 IP 和代理 CIDR 选项](https://github.com/Orangewarrior/KrakenWaf/blob/main/docs/real-ip-header-and-trusted-proxy-cidrs.md) ## 🚀 为何选择 KrakenWaf? - Rust 内存安全 - 异步 Tokio 架构 - 高性能反向代理设计 - 现代检测引擎 - 操作简洁 - 易于在真实应用前端部署 ## 🔥 注意事项 KrakenWaf 适用于: - 系统管理员 - 渗透测试人员 - 开发者 - 自托管用户 - 希望使用小型可审计 Rust WAF 的蓝队 在几分钟内部署并用基于 Rust 的现代安全性保护您的应用。 ## SQLite 架构 KrakenWaf 会自动在 `logs/db/vulns_alert.db` 中创建 `vulnerabilities` 表: ``` SQLite version 3.50.2 2025-06-28 14:00:48 Enter ".help" for usage hints. sqlite> .schema CREATE TABLE vulnerabilities ( id INTEGER PRIMARY KEY AUTOINCREMENT, title VARCHAR(256) NOT NULL, severity VARCHAR(32) NOT NULL, cwe VARCHAR(128) NOT NULL, description TEXT NOT NULL, reference_url TEXT NOT NULL, occurred_at TIMESTAMP NOT NULL, rule_match TEXT NOT NULL, rule_line_match VARCHAR(256) NOT NULL, client_ip VARCHAR(64) NOT NULL, http_method VARCHAR(16) NOT NULL, request_uri TEXT NOT NULL, fullpath_evidence TEXT NOT NULL, engine VARCHAR(32) NOT NULL, request_payload TEXT NOT NULL ); ``` ## 目录结构 ``` KrakenWaf/ ├── Cargo.toml ├── certs/ ├── logs/ │ ├── db/ │ ├── json/ │ └── raw/ ├── rules/ │ ├── Vectorscan/ │ │ └── strings2block.json │ ├── regex/ │ │ ├── body_regex.json │ │ ├── header_regex.json │ │ └── path_regex.json │ ├── blocklist_ip.txt │ ├── rules.json │ └── tls/ │ └── sni_map.csv ├── src/ └── tests/ ``` ## 主规则格式 `rules/rules.json` ``` { "blocked_ip_prefixes": [ "10.10.10.", "192.0.2." ], "uri_keywords": [ { "enable": 1, "title": "SQL Injection probe", "severity": "critical", "cwe": "CWE-89", "description": "Detects common UNION SELECT probes in the request target.", "url": "https://cwe.mitre.org/data/definitions/89.html", "rule_match": "union select" }, { "enable": 1, "title": "Boolean SQL injection probe", "severity": "critical", "cwe": "CWE-89", "description": "Detects classic boolean-based SQL injection probes in the URI query string.", "url": "https://cwe.mitre.org/data/definitions/89.html", "rule_match": "' or '1'='1" }, etc... ``` ## 正则表达式格式 `rules/regex/body_regex.json` ``` { "rules": [ { "enable": 1, "title": "Command injection separators body", "severity": "critical", "cwe": "CWE-78", "description": "Detects shell metacharacters combined with common execution primitives in request bodies.", "url": "https://cwe.mitre.org/data/definitions/78.html", "rule_match": "(?i)(?:;\\s*(?:wget|curl|bash|sh|python|perl|php|powershell|cmd)|\\|\\|?\\s*(?:wget|curl|bash|sh|python|perl|php|powershell|cmd)|&&\\s*(?:wget|curl|bash|sh|python|perl|php|powershell|cmd))" }, { "enable": 1, "title": "Command substitution body", "severity": "critical", "cwe": "CWE-78", "description": "Detects command substitution in body payloads.", "url": "https://cwe.mitre.org/data/definitions/78.html", "rule_match": "(?i)(?:\\$\\((?:id|whoami|uname|curl|wget|bash|sh)|`(?:id|whoami|uname|curl|wget|bash|sh))" }, { "enable": 1, "title": "Shell downloader body", "severity": "high", "cwe": "CWE-78", "description": "Detects common downloader command chains in body content.", "url": "https://cwe.mitre.org/data/definitions/78.html", "rule_match": "(?i)(?:wget\\s+https?://|curl\\s+-[fsSLoO].*https?://|powershell(?:\\.exe)?\\s+-enc|certutil(?:\\.exe)?\\s+-urlcache\\s+-split\\s+-f)" }, { "enable": 1, "title": "Reverse shell body", "severity": "critical", "cwe": "CWE-78", "description": "Detects reverse shell primitives in body content.", "url": "https://cwe.mitre.org/data/definitions/78.html", "rule_match": "(?i)(?:nc\\s+-e|bash\\s+-i\\s*>&|/dev/tcp/\\d{1,3}(?:\\.\\d{1,3}){3}/\\d+|python(?:3)?\\s+-c\\s+[\"\\'].*socket)" }, { "enable": 1, "title": "LFI file disclosure body", "severity": "high", "cwe": "CWE-22", "description": "Detects direct references to sensitive files in body content.", "url": "https://cwe.mitre.org/data/definitions/22.html", "rule_match": "(?i)(?:/etc/passwd|/etc/shadow|/proc/self/environ|boot\\.ini|win\\.ini|\\\\windows\\\\system32)" }, { "enable": 1, "title": "Traversal body encoded", "severity": "high", "cwe": "CWE-22", "description": "Detects traversal sequences in body payloads.", "url": "https://cwe.mitre.org/data/definitions/22.html", "rule_match": "(?i)(?:\\.\\./|\\.\\.\\\\|%2e%2e(?:%2f|/|%5c|\\\\)|%252e%252e%252f)" }, ... etc ``` 相同的架构也用于: - `rules/regex/path_regex.json` - `rules/regex/header_regex.json` - `rules/Vectorscan/strings2block.json` - KrakenW 拥有 80 条或更多带 DFA 的规则…… ## 注意事项 - 每个公共函数都有 Rust 文档注释,因此 `cargo doc` 可以渲染 API 文档。 - 正则规则在启动时编译一次。 - 主规则格式为 JSON,通过 `rules/rules.json` 提供。 - Vectorscan 和 libinjection 可通过 CLI 标志在运行时切换,并通过 Cargo 特性在编译时可选。 - 自定义阻断页面是可选的;省略时,KrakenWaf 会返回纯文本的默认阻断消息。 - - DOcs 关于 DFA https://github.com/Orangewarrior/KrakenWaf/blob/main/docs/dfa/schema.md ## 操作说明 - 速率限制现在会为单节点重启保留快照,但集群/全局强制仍需要共享后端(如 Redis)。 - SNI CSV 可选包含第四列(`true`/`false`)以选择默认证书。 - 发送 `SIGHUP` 可在不重启进程的情况下热重载规则文件。 - `/metrics` 公开 Prometheus 文本计数器,`/__krakenwaf/health` 公开存活端点。 标签:Aho-Corasick, AppImage, DFA, ESI注入, Hyperscan, KrakenWaf, libinjection, Rust, SIMD优化, SNI, Sni映射, SQL注入检测, SSI注入, SSRF, SSTI, TCP/UDP协议, TLS终止, Tokio, Vectorscan, WAF, Web应用防火墙, XSS检测, 云计算, 关键词匹配, 反向代理, 可视化界面, 向量扫描, 多模式匹配, 安全开源, 底层编程, 开源WAF, 异步, 异步架构, 有限状态机, 模块化引擎, 正则引擎, 注入攻击, 流式检测, 溢出攻击, 网络流量审计, 自定义请求头, 规则引擎, 证书管理, 通知系统, 高并发