Hamronov/Wazuh-Journal
GitHub: Hamronov/Wazuh-Journal
一款基于 Wazuh 的 SOC 告警调查工作台,提供 AI 辅助告警分诊与检测规则草稿生成能力。
Stars: 0 | Forks: 0
# Wazuh Journal
[](LICENSE)
[](https://nodejs.org/)
Wazuh Journal 将 Wazuh 告警流转化为专注的调查工作流。告警被分组为五分钟的批次,单个事件可以发送到兼容 OpenAI 的 API 进行误报分诊,而生成的 XML 规则在操作员明确添加之前将作为草稿保留。
界面默认为英语,并包含一个持久的 `EN / RU` 语言切换。它不会捏造演示事件:当 Wazuh 不可用时,UI 会显示集成错误,而不是伪造数据。
## 目录
- [核心亮点](#highlights)
- [架构](#architecture)
- [环境要求](#requirements)
- [快速开始](#quick-start)
- [配置说明](#configuration)
- [生产环境部署](#production-deployment)
- [可用脚本](#available-scripts)
- [安全性](#security)
- [当前限制](#current-limitations)
- [贡献指南](#contributing)
- [License](#license)
## 核心亮点
- 通过服务端 SSH 桥接获取实时的 Wazuh 告警推送。
- 五分钟告警批次分组,包含严重程度、主机、时间和规则元数据。
- 支持按严重程度、时间范围、已标记告警和已跳过告警进行过滤。
- 通过任何兼容 OpenAI 的 `/chat/completions` endpoint 进行单条告警 AI 分析。
- 提供误报概率、解释、摘要和 XML 规则草案审查。
- 带有未读状态的分析历史记录,可快速返回原始告警。
- 本地 Wazuh 规则编辑器,具有 XML 范围保护和保存时备份功能。
- 可选的 LDAP/Active Directory 兼容身份验证流程。
- 本地设置面板,用于配置 Wazuh、堡垒机、LDAP 和 AI 集成参数。
- 英语优先的 UI,并支持俄语本地化。
- 兼容 Cloudflare Sites 的构建配置。
## 架构
本项目是一个基于 Next.js/React 的应用程序,包含服务端集成路由:
```
Browser
│
├── Feed, filters, language switch, analysis history
│
▼
Next.js API routes
├── Wazuh SSH bridge ──► Wazuh Indexer
├── Authentication ─────► Wazuh / LDAP / AD-compatible identity source
├── AI analysis ────────► OpenAI-compatible API
└── Rule operations ────► Protected Wazuh Manager workflow
```
密钥仅在服务端读取和使用。它们绝不会被包含在客户端 bundle、`public/` 或浏览器存储中。设备本地浏览器存储仅用于保存 UI 偏好设置、标记、已跳过的告警以及未读分析状态。
## 环境要求
- Node.js `>=22.13.0`
- npm
- 可访问的 Wazuh 部署,用于获取实时数据
- 具备 Wazuh 命令所需最低权限的 SSH 凭据
- 如果需要 AI 分析,需准备兼容 OpenAI 的服务商
## 快速开始
```
git clone https://github.com/Hamronov/Wazuh-Journal.git
cd Wazuh-Journal
npm ci
cp .env.example .env.local
npm run dev
```
打开开发服务器输出的本地 URL。使用配置好的 Wazuh/域账户登录,然后打开 **Settings** 验证集成情况。
AI 分析是可选的。如果未配置 `OPENAI_*` 变量,告警推送仍然可用,AI 面板会提示该集成尚未配置。
## 配置说明
`.env.example` 是一个安全的模板。将其复制到 `.env.local` 用于本地开发,并将每个值替换为符合当前环境的具体设置。切勿提交 `.env_LOCAL` 或真实的凭据信息。
### Wazuh 和 SSH
| 变量 | 用途 |
| --- | --- |
| `WAZUH_SSH_HOST` | Wazuh SSH 主机或隧道 endpoint。 |
| `WAZUH_SSH_PORT` | SSH 端口,通常为 `22`。 |
| `WAZUH_SSH_USER` | 用于 Wazuh 桥接的 SSH 用户。 |
| `WAZUH_SSH_PRIVATE_KEY` | 私钥内容;仅限在服务端保存。 |
| `WAZUH_SSH_PRIVATE_KEY_PATH` | 服务端私钥文件的路径。 |
| `WAZUH_SSH_PASSWORD` | 私钥的替代密码方案。 |
| `WAZUH_SSH_JUMP_HOST` | 可选的堡垒机/跳板机。 |
| `WAZUH_SSH_JUMP_PORT` | 可选的堡垒机端口。 |
| `WAZUH_SSH_JUMP_USER` | 可选的堡垒机用户。 |
### 身份验证和目录服务
| 变量 | 用途 |
| --- | --- |
| `AUTH_SESSION_SECRET` | 会话签名密钥。在生产环境中必填;请使用至少 32 个字符的随机值。 |
| `AD_TENANT_ID` | 可选的 Active Directory 租户标识符。 |
| `AD_CLIENT_ID` | 可选的目录应用程序标识符。 |
| `AD_CLIENT_SECRET` | 可选的目录应用程序密钥。 |
| `LDAP_SERVER_URIS` | 以逗号分隔的 LDAP/LDAPS 服务器 URI。 |
| `LDAP_BASE_DN` | 目录基础 DN。 |
| `LDAP_BIND_DN` | 服务绑定 DN。 |
| `LDAP_BIND_PASSWORD` | 服务绑定密码。 |
| `LDAP_USERS_DNS` | 以分号分隔的用户搜索 DN。 |
| `LDAP_GROUPS_DN` | 组搜索 DN。 |
| `LDAP_CA_CERT` | 可选的 CA 证书,用于 LDAPS 验证。 |
### AI 服务商
| 变量 | 用途 |
| --- | --- |
| `OPENAI_BASE_URL` | 服务商基础 URL,例如 `https://api.openai.com/v1`。 |
| `OPENAI_API_KEY` | 服务商 API key;切勿暴露给浏览器。 |
| `OPENAI_MODEL` | 用于单条告警分析的模型名称。 |
分析 endpoint 仅将选定的告警(或明确选定的批次)发送给已配置的服务商。它不会发送整个数据流。
## 生产环境部署
使用标准的 Node.js 工作流进行构建和运行:
```
npm ci
npm run build
npm start
```
对于 Cloudflare Sites,请将 `.openai/hosting.json` 保留在代码库中,并在托管环境中配置运行时密钥,而不是通过 Git。在允许用户登录之前,请设置 `AUTH_SESSION_SECRET` 以及部署所需的所有 Wazuh/目录/AI 参数。
在发布构建之前,请运行:
```
npm run lint
npm test
```
## 可用脚本
| 命令 | 描述 |
| --- | --- |
| `npm run dev` | 启动本地开发服务器。 |
| `npm run build` | 创建生产环境构建。 |
| `npm start` | 运行生产环境服务器。 |
| `npm run lint` | 运行 ESLint 和生产数据安全检查。 |
| `npm test` | 构建项目并运行渲染/源码契约测试。 |
| `npm run check:production-data` | 确保应用程序代码中不包含禁止的测试数据标记。 |
| `npm run db:generate` | 在需要进行数据库 schema 工作时生成 Drizzle 元数据。 |
## 安全性
在配置集成之前,请阅读 [SECURITY.md](SECURITY.md)。
- 切勿提交 `.env.local`、私钥、密码、API key 或证书。
- 将 Wazuh、LDAP、AD 和 AI 凭据保留在服务端。
- 在生产环境中使用高强度随机的 `AUTH_SESSION_SECRET`。
- 将生成的 XML 视为草稿:在将其应用到 Wazuh 之前,验证其语法、范围和影响。
- 审计生产环境的规则写入操作,并限制规则管理后端使用的账户权限。
- 在将意外暴露的凭据从文件或历史记录中删除之前,请先对其进行轮换。
## 当前限制
本代码库是一个可部署的基础设施,而不是一个完全托管的 SOC 平台。根据目标环境的不同,以下内容仍需要进行运维设置:
- Wazuh SSH 桥接连接和最小权限命令配置;
- 生产环境的 LDAP/Active Directory 授权和访问策略;
- 持久化的分析历史记录存储和数据库迁移;
- 通过受保护的后端进行的经审计的生产规则写入;
- 特定于服务商的 AI 隐私、数据留存和模型策略。
当 Wazuh 不可用时,系统不会替换为测试告警。
## 贡献指南
1. 从 `main` 分支创建一个新分支。
2. 切勿将密钥和特定于组织的基础设施详细信息包含在提交中。
3. 保持英语优先的界面,并在添加面向用户的文案时同步更新俄语翻译。
4. 在发起 pull request 之前运行 `npm run lint` 和 `npm test`。
5. 描述集成变更对安全性和部署的影响。
## License
Wazuh Journal 在自定义的 [Wazuh Journal Non-Commercial License](LICENSE) 下提供源码,可用于个人、教育、研究和其他非商业用途。
商业用途,包括 SaaS、付费产品、托管服务和商业运营,需获得版权持有人的另行书面许可。
标签:MITM代理, Petitpotam, 内存分配, 自动化攻击