Orangewarrior/kraken-ui

GitHub: Orangewarrior/kraken-ui

Kraken UI 是一个用 Rust 编写的安全加固型 Web 管理面板,用于操作和监控 KrakenWAF 部署,提供实时攻击监控、规则管理和多角色访问控制。

Stars: 0 | Forks: 0

# Kraken UI **当前版本:0.19.0** Kraken UI 是一个小型且经过安全强化的 Web 应用程序,用于操作 KrakenWAF 部署:管理操作员、实时监控被拦截的攻击,以及通过纯 TLS 控制台读取实时的 WAF 指标。它使用 Rust 编写,并结合了 [Axum](https://github.com/tokio-rs/axum)、[Askama](https://github.com/askama-rs/askama) 和 [SeaORM](https://www.sea-ql.org/SeaORM/),不携带任何 CDN 资源,也不运行任何内联 JavaScript。 - **默认安全。** 强制使用 TLS,session 和 CSRF cookies 使用 `__Host-` 前缀,严格的 Content-Security-Policy 禁止内联脚本和样式。登录受速率限制并经过时间均衡处理,session 可持久化且可撤销,使用 SQLite 或 Redis 的 GCRA 请求限制保护每一个路由。 - **密码的深度防御。** Argon2id 哈希(兼容 libsodium)封装在带有基于用户的 AAD 的 XChaCha20-Poly1305 信封中,因此哈希值永远无法重放到另一个账户;明文保存在 `Zeroizing` 中。 - **可选的双因素认证。** 任何操作员都可以使用 TOTP 验证器应用和一次性恢复代码保护其账户。密钥和代码密封在与密码相同的基于用户的信封中。请参阅 [docs/mfa.md](docs/mfa.md)。 - **可审计。** 认证和操作员管理事件会写入专门的 `audit.jsonl`,并且 WAF 指标通道会绑定到您配置的证书,并使用 KrakenWAF 的共享 bearer token 进行身份验证。 - **实时规则管理。** 管理员和操作员可以在运行时通过 **Rule management → CMC rules** 菜单启用或禁用 KrakenWAF CMC 检测模块。UI 代理到 KrakenWAF 的规则管理 API,并使用基于请求的 *Rorschach* token(一种时间窗口化的 BLAKE2b-256 密钥 MAC)对每个请求进行身份验证,因此浏览器永远不会持有密钥。在 **Rule management → Regex rules** 中,他们还可以在语法高亮编辑器中查看和替换 regex 和关键字规则文件(`body_regex`, `path_regex`, `header_regex`, `vectorscan_list`, `scanners`)的内容;每次提交在到达 WAF 之前都会验证其规则结构。请参阅 [docs/rule-management.md](docs/rule-management.md)。 - **管理员控制的稳定更新。** 管理员可以从 Updates 菜单下载、验证、编译并安装最新发布的 Kraken UI 版本。运行时数据库和本地配置保持不变。 - **依赖树中无意外。** 每个传递性许可证例外都被固定在 `deny.toml` 中,并且 CI 在每次推送时都会运行 Clippy、Semgrep、CodeQL、cargo-audit、cargo-deny 和 OSV Scanner。 ## 为什么选择 Kraken UI? 大多数管理面板依赖于大量的 JavaScript 和宽松的安全态势。Kraken UI 采取了相反的方法:最小且合理的攻击面、浏览器中没有第三方运行时,以及失效即关闭的安全控制。如果安全头文件有拼写错误,服务器将拒绝启动。如果未配置加密密钥,它将无法启动。如果不满足密码策略,则永远不会创建该账户。 如果您运行 KrakenWAF 并且想要一个可以端到端推理的控制台,它是一个很好的选择。 ## 快速开始 您需要 **Rust 1.95 或更高版本**(2024 edition)和用于生成密钥的 OpenSSL。`rust-toolchain.toml` 固定了经过测试的编译器。 **1. 配置 `conf/setup.yaml`**,包含您的证书、私钥、TLS 地址、UI 自身的数据库以及 KrakenWAF 警报数据库: ``` cert-ca: certs/ca.pem key: certs/key.pem listen: "127.0.0.1:3443" db-ui: db/kraken-ui.sqlite db-waf-alerts: "../KrakenWAF/logs/db/vulns_alert.db" waf-endpoint: "https://127.0.0.1:4343" waf-cert-ca: "../KrakenWAF/certs/cert.pem" log-dir: log session-timeout-minutes: 30 ``` **2. 检查 `conf/ratelimit.yaml`。** 默认设置启用了本地的 `axum-governor` GCRA 以及持久化的 SQLite 状态(位于 `db/kraken-ui-ratelimit.sqlite`)。同一个文件还控制持续速率、突发、基于 IP 的并发、TLS 握手超时和接受的请求超时。Redis 可以协调多个副本,并且需要 TLS 以及基于文件优先的 ACL 凭据。请参阅 [Rate limiting](docs/rate-limiting.md)。 **3. 提供一个 32 字节的 XChaCha20-Poly1305 密钥**(格式为 Base64)。对于本地开发,使用环境变量即可: ``` export KRAKEN_UI_PASSWORD_KEY="$(openssl rand -base64 32)" export KRAKEN_UI_PASSWORD_KEY_ID='primary-v1' ``` **4. 提供 KrakenWAF 可观测性 bearer token。** KrakenWAF 在端口 `4343` 上的专用监听器和 Kraken UI 必须解析为相同的值: ``` export BEARER_PASSWORD="$(openssl rand -hex 32)" ``` 解析顺序为 `BEARER_PASSWORD_FILE`、`/run/secrets/krakenwaf/BEARER_PASSWORD`,然后是 `BEARER_PASSWORD`。当两个服务运行在同一主机上时,它们可以读取相同的挂载密钥或 systemd 凭据。有关文件、systemd 和故障排除的示例,请参阅 [WAF bearer authentication](docs/waf-bearer-auth.md)。 对于生产环境中的 UI 加密密钥,建议使用权限为 `0600` 的文件(应用程序拒绝可被组或其他用户读取的密钥文件): ``` openssl rand -base64 32 > /secure/path/kraken-ui-password.key chmod 600 /secure/path/kraken-ui-password.key export KRAKEN_UI_PASSWORD_KEY_FILE=/secure/path/kraken-ui-password.key ``` 在生产环境中,还需要设置一个**稳定的会话签名密钥**(≥ 64 字节,Base64),以便 session 在重启后依然存在并能在副本间进行验证: ``` export KRAKEN_UI_SESSION_KEY="$(openssl rand -base64 64)" ``` **5. 创建第一个管理员**并运行应用程序: ``` export KRAKEN_UI_ADMIN_PASSWORD='Use-A-Unique!Strong9Password' export KRAKEN_UI_ADMIN_EMAIL='admin@example.invalid' cargo run ``` 初始用户名为 `admin`。密码使用 Argon2id 进行哈希处理,静态加密且绝不写入日志。 不想将密码放在环境中?当 operators 表为空时,您可以从 localhost 引导一次。一旦存在任何操作员,该端点将返回 `410 Gone`。 Release 构建**需要** bootstrap token,因此请设置一个并在请求中发送(debug 构建中它是可选的): ``` export KRAKEN_UI_FIRST_TIME_TOKEN="$(openssl rand -hex 32)" curl --cacert certs/ca.pem \ --data-urlencode 'username=admin' \ --data-urlencode 'email=admin@example.invalid' \ --data-urlencode 'user_type=admin' \ --data-urlencode 'password=Use-A-Unique!Strong9Password' \ --data-urlencode "token=$KRAKEN_UI_FIRST_TIME_TOKEN" \ https://127.0.0.1:3443/kraken_ui/auth/first_time ``` 然后在 `https://host:port/kraken_ui/login` 登录。 ## 内部详情 | 区域 | Endpoints | |-------------|-----------| | Dashboard | `/kraken_ui/auth/admin_panel`, `/kraken_ui/auth/dashboard` | | Operators | `/kraken_ui/auth/insert_user`, `/delete_user`, `/edit_user`, `/show_user_table` | | 监控 | `/kraken_ui/auth/show_attacks`, `/kraken_ui/auth/view_waf_request/?id=` | | 规则管理 | `/kraken_ui/auth/rule_management/cmc`, `/kraken_ui/auth/api/rule_management/cmc`, `/kraken_ui/auth/rule_management/cmc/update`, `/kraken_ui/auth/rule_management/regex`, `/kraken_ui/auth/rule_management/regex/edit`, `/kraken_ui/auth/rule_management/regex/update` | | 账户 | `/kraken_ui/auth/update_password`, `/kraken_ui/auth/mfa` | | 更新 | `/kraken_ui/auth/update_kraken_ui` (仅限管理员) | | 双因素 | `/kraken_ui/auth/mfa_challenge`, `/kraken_ui/auth/mfa_verify` (登录挑战) | ### 角色 | 角色 | 可以登录 | 可见内容 | |------|-------------|------| | `admin` | 是 | 所有内容:dashboard、攻击、单次攻击详情视图(**包括明文的敏感参数值**)、完整的 ACL 菜单、Updates、Rule management 以及自助账户设置。 | | `operator` | 是 | 与管理员相同的 dashboard、攻击表、攻击详情视图、**Rule management** 和账户设置——但**没有** ACL 和 Updates 菜单,并且攻击详情视图中的**敏感参数值会被掩码**。 | | `auditor` | 是 | 只读。Dashboard、攻击监控器(表格和单次攻击详情视图,其中**敏感参数值会被掩码**)及其自身的账户设置(更改密码、管理双因素)以及登出——**没有** Rule management、ACL 或 Updates。 | 侧边栏在 `src/view/templates/admin_sidebar.html` 中定义一次;ACL 和 Updates 部分仅在控制器传递 `show_acl = true`(管理员)时才会渲染,而 Rule management 部分仅在传递 `show_rule_management = true`(管理员和操作员,绝不包含审计员)时才会渲染。 ### 单次攻击详情视图 点击攻击表中的 **ID** 或 **client IP** 列会在新标签页中打开 `view_waf_request`。它显示了完整的发现结果——标题、颜色编码的严重程度、CWE、描述、参考、人类可读的时间戳、规则匹配、client IP、URI 和全路径证据——最后是浅色主题、语法高亮的代码框中的 WAF `request_payload`。该 payload 通过模板默认的 HTML 转义进行渲染——从未经过 Ammonia 清理,因此保留了攻击者的确切字节——并且通过仅构建 DOM 节点(不使用 `innerHTML`)在客户端进行高亮处理,因此它在严格的 CSP 下保持惰性。 捕获的请求/响应证据——URI、全路径证据和匹配的 payload——通常带有凭据(`password=…`, `token=…`, `senha=…`)。只有**管理员**能看到这些字节的明文:对于操作员或审计员,任何以众所周知的秘密命名的参数值(涵盖多种语言)在页面渲染之前都会被替换为 `+++++`。请参阅 [docs/sensitive-data-redaction.md](docs/sensitive-data-redaction.md)。 ## 截图 控制台快速导览——纯 TLS、无 CDN 资源且无内联 JavaScript。 ### 安全控制台登录 强化的登录:`__Host-` session 和 CSRF cookies,受速率限制和时间均衡的认证,以及在前端和后端都强制执行的最少 14 个字符的密码策略。 ![Kraken UI 安全控制台登录](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/fd291c8965131549.png) ### WAF 可观测性 Dashboard 来自 KrakenWAF 的实时 HTTPS 指标和 SQLite 聚合:已检查和已拦截的请求、平均延迟、每个 CMC 模块的检测、每个模块的拦截,以及主要的拦截国家和 IP——全部以本地 SVG 绘制成图表。 ![Kraken UI WAF 可观测性 Dashboard](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/43067fc5e1131554.png) ### 单次攻击详情视图 通过点击攻击的 **ID** 或 **client IP** 从攻击表中打开:包含颜色编码的严重程度、CWE、描述、规则匹配、URI 以及经过 HTML 转义和语法高亮的请求/响应 payload 的完整发现。 ![Kraken UI 单次攻击的请求和响应详情](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/efda166323131558.png) ## 项目布局 ``` src/ ├── routes/ # endpoint declarations ├── controllers/ # HTTP handlers: CSRF, sessions, rendering, pagination ├── models/ # SeaORM entities, repositories and the session store ├── services/ # password crypto, WAF metrics and rule-management boundaries ├── security/ # sanitisation, password policy, headers, CSRF, rate limiting ├── middleware/ # auth, global security headers and the per-IP rate limiter └── view/ # Askama templates and local assets ``` 如需了解更宏观的视角,请参阅 [`docs/`](docs/) 目录: - [架构](docs/architecture.md) — 各个组件是如何组合在一起的。 - [可视化架构](docs/visual-architecture.md) — 可编辑的 draw.io 图表,包含 SQLite 和 Redis GCRA 部署、HTTP 处理和 KrakenWAF 集成。 - [WAF bearer authentication](docs/waf-bearer-auth.md) — 共享 token 加载、端口 `4343`、systemd 和故障排除。 - [规则管理](docs/rule-management.md) — CMC 控制平面、Rorschach token、共享密钥和 `rorschach_keygen` 工具。 - [源码更新](docs/source-updates.md) — 仅限管理员的稳定版本更新、保留的文件、构建要求和恢复。 - [安全性](docs/security.md) — 安全控制及其存在的原因。 - [敏感数据脱敏](docs/sensitive-data-redaction.md) — 攻击详情视图中非管理员的敏感参数值是如何被掩码的。 - [安全审查](docs/security-review.md) — 常见发现及其状态。 - [数据库与 ACL](docs/database.md) — schema、sessions 和路由。 - [双因素认证](docs/mfa.md) — TOTP 注册、登录和恢复。 - [运维操作](docs/operations.md) — 配置、环境变量、日志和限制。 - [依赖许可证](docs/dependency-licenses.md) — 许可证策略。 ## 构建和测试 ``` cargo fmt --check cargo test cargo clippy --all-targets -- -D warnings ``` 这三项测试必须在合并更改之前通过——它们正是 CI 所运行的。 ## 安全 发现了漏洞?请**不要**公开提 issue。请私下给维护者发送电子邮件,以便我们在披露之前修复它。威胁模型和实施的控制措施记录在 [docs/security.md](docs/security.md) 中,而已知缺失的持续审查记录在 [docs/security-review.md](docs/security-review.md) 中。 ## 许可证 Kraken UI 基于 [MIT](LICENSE) 许可证发布。
标签:AppImage, Rust, WAF, Web安全, Web应用防火墙, Web管理界面, 可视化界面, 安全测试工具, 搜索引擎查询, 网络流量审计, 蓝队分析, 运维管理系统, 通知系统