solomonneas/soc-stack
GitHub: solomonneas/soc-stack
这是一个一键部署完整安全运营中心(SOC)的工具包,集成了多种安全工具并自动化配置,解决了手动部署复杂性的难题。
Stars: 1 | Forks: 0
SOC 堆栈
用于构建完整安全运营中心的一键 Proxmox 安装程序。
在 Proxmox 主机上运行一条命令(或让代理执行),大约 30 分钟后,您将获得 Wazuh (SIEM)、TheHive + Cortex (案件管理 + SOAR)、MISP (威胁情报)、Zeek + Suricata (NSM + IDS)、自定义仪表板以及 9 个相互连接并通信的 MCP 服务器。默认非交互式。幂等设计。为代理提供 JSON 输出。专为复制部署而构建。
## 快速开始
**完整堆栈**(所有组件,合理默认配置):
```
curl -sSL https://raw.githubusercontent.com/solomonneas/soc-stack/main/install.sh | sudo bash
```
**自定义子集:**
```
curl -sSL https://raw.githubusercontent.com/solomonneas/soc-stack/main/install.sh | sudo bash -s -- \
--components wazuh,thehive-cortex,misp \
--preset standard \
--bridge vmbr0 --storage local-lvm
```
**代理驱动**(完全非交互式,结构化输出):
```
curl -sSL https://raw.githubusercontent.com/solomonneas/soc-stack/main/install.sh | sudo bash -s -- \
--components all \
--preset minimal \
--bridge vmbr0 --storage local-lvm --ip-mode dhcp \
--json-out /root/soc-stack.json \
--mcp-config-out /root/mcp-clients.json
```
安装后:
- `/root/soc-stack.json` 列出了每个组件及其 LXC VMID、IP、端口、端点和轮换后的凭据。
- `/root/mcp-clients.json` 是一个可直接粘贴的 `mcpServers` 配置块,适用于 Claude Desktop、OpenClaw 或任何 MCP 客户端。
- `/var/lib/soc-stack/state/` 包含用于幂等重新运行的按组件状态文件。
- `/var/lib/soc-stack/secrets/` 包含所有生成的凭据(模式 0600,仅限 root),用于审计恢复。
使用 `--force` 重新运行相同命令以重新部署已完成的组件,或使用 `--components <组件名>` 向现有安装添加单个组件。
## 组件
| 组件 | 服务 | LXC 预设(最小) | 端口 |
|---|---|---|---|
| **wazuh** | Wazuh Manager, Indexer, Dashboard | 2 vCPU, 2 GB RAM, 30 GB | 443, 1514, 1515, 55000 |
| **thehive-cortex** | TheHive 5.4, Cortex 3.1.8, Elasticsearch 7.17, Cassandra 4.1 | 2 vCPU, 4 GB RAM, 30 GB | 9000, 9001 |
| **misp** | MISP, MariaDB 10.11, Redis 7, misp-modules | 1 vCPU, 2 GB RAM, 20 GB | 443 |
| **zeek-suricata** | Zeek (NSM), Suricata (IDS/IPS) | 1 vCPU, 2 GB RAM, 20 GB | 47760 |
| **dashboards** | Bro Hunter + Playbook Forge (nginx 后端) | 1 vCPU, 1 GB RAM, 10 GB | 80, 5174, 5177 |
| **mcp** | 9 个 MCP 服务器 (wazuh, thehive, cortex, misp, zeek, suricata, mitre, rapid7, sophos),通过 `mcp-proxy` 封装为 SSE | 1 vCPU, 1 GB RAM, 10 GB | 3001-3009 |
每个组件在其专属的 LXC 中运行。组件可以独立部署或一起部署。编排器处理 VMID 分配、网络设置、幂等性和跨组件集成布线。
## 跨组件集成
所有组件部署后自动配置:
- **Wazuh → TheHive**: Wazuh 级别 8+ 的告警通过自定义 Python 集成 (`/var/ossec/integrations/custom-thehive.py`) 作为告警转发到 TheHive。
- **TheHive ↔ Cortex**: TheHive 的 Cortex 连接器使用组织范围内的 API 密钥指向本地 Cortex。
- **MISP → Suricata**: 每小时 cron 任务从 MISP 的 `restSearch` 端点拉取 Snort/Suricata 规则到 Suricata 的 update.d 目录。
- **Zeek → Wazuh**: Wazuh 代理在 zeek-suricata LXC 中运行,并将 conn.log、dns.log、http.log、ssl.log、notice.log 转发到 Wazuh 管理器。
- **MCP 服务器 ← 所有对等节点**: 每个 MCP 服务器的环境文件都填充了其对应工具的 URL 和来自对等节点状态的 API 密钥。
## 状态
**v1.0.0**(当前版本,2026-05-16):所有 6 个组件 + 5 个跨组件集成已在 Proxmox VE 上端到端验证。自托管 CI 在每个 PR 上运行(shellcheck、bats、清单验证、按组件集成矩阵)并在合并到 main 时运行(全栈集成)。完整历史请参见 [更新日志](CHANGELOG.md)。
## 代理友好契约
设计用于让 AI 代理能够通过 SSH 登录到 Proxmox 主机并一键部署 SOC。完整的代理接口:
- 在 `curl | sudo bash` 下**标准输入关闭**;安装程序自动检测此情况并启用 `--non-interactive` 模式。每个提示都变为一个标志,每个默认值都变为一个答案。
- **退出代码**稳定:0 = 成功,1 = 预检(主机问题),2 = 验证(标志问题),3 = 组件失败,4 = 集成失败,5 = 混合状态。
- **结果 JSON 模式**记录在 [`docs/superpowers/specs/2026-05-15-soc-stack-unification-design.md`](docs/superpowers/specs/2026-05-15-soc-stack-unification-design.md) 中。
- **幂等性**:使用相同标志重新运行时,如果一切均已部署(状态中 `status: "deployed"`),则几秒钟内退出。`--force` 触发重新部署。
- **清单模式**:无需使用数十个标志,而是编写一个 JSON 清单并传递 `--manifest <路径>`。CLI 标志会覆盖清单中的各个字段。
## 标志参考
```
--components LIST CSV of components or "all" (default: all)
--preset NAME minimal | standard | production (default: standard)
--bridge NAME Proxmox bridge (default: vmbr0)
--storage NAME Storage pool (default: auto-detect)
--ip-mode MODE dhcp or static (default: dhcp)
--ip-range CIDR Required if --ip-mode=static (e.g., 10.0.50.10/24)
--vlan TAG Optional VLAN tag
--vmid-start N First VMID to allocate (default: next free)
--manifest PATH JSON manifest (alternative to flags)
--state-dir PATH State directory (default: /var/lib/soc-stack)
--json-out PATH Result JSON path (default: /root/soc-stack.json)
--mcp-config-out PATH MCP client config (default: /root/mcp-clients.json)
--log-file PATH Install log (default: /var/log/soc-stack-install.log)
--dry-run Validate + plan only, no deploy
--force Redeploy components already marked deployed
--no-integrate Skip cross-component wiring phase
--non-interactive Hard-fail on prompts (auto when stdin is not a TTY)
--version Print version and exit
```
## 仓库结构
```
soc-stack/
├── install.sh # repo-root wrapper for curl|bash
├── scripts/
│ ├── install.sh # orchestrator (~430 lines)
│ ├── lib/ # 8 shared bash modules (bats-tested)
│ │ ├── logging.sh
│ │ ├── secrets.sh
│ │ ├── json-out.sh
│ │ ├── idempotency.sh
│ │ ├── network.sh
│ │ ├── manifest.sh
│ │ ├── preflight.sh
│ │ └── lxc.sh
│ └── components/
│ ├── wazuh/ # manifest.jsonc + 5 scripts per component
│ ├── thehive-cortex/
│ ├── misp/
│ ├── zeek-suricata/
│ ├── dashboards/
│ └── mcp/ # 9 MCP servers + mcp-proxy SSE bridge
├── tests/
│ ├── unit/ # 78 bats tests, mocked Proxmox binaries
│ └── integration/ # per-component + cross-component assertions
├── docs/
│ ├── superpowers/
│ │ ├── specs/ # design specs
│ │ └── plans/ # implementation plans
│ ├── gotchas.md
│ ├── adding-a-stack.md # to be renamed adding-a-component.md in v1.0.0
│ └── architecture/
├── playbooks/ # incident response playbooks
├── cases/ # case study evidence
└── mcp-servers/
└── README.md # index of the 9 MCP servers (each in its own repo)
```
## 工作原理
每个组件都是 `scripts/components/<名称>/` 下的一个自包含文件夹,具有固定的接口:
| 文件 | 运行位置 | 用途 |
|---|---|---|
| `manifest.jsonc` | (声明性) | 预设、端口、依赖项、提供项 |
| `lxc-spec.sh` | Proxmox 主机 | 根据预设输出 `pct create` 标志 |
| `deploy.sh` | LXC 内部 | 幂等安装程序;写入状态 JSON |
| `verify.sh` | LXC 内部 | 健康检查;健康则退出 0 |
| `integrate.sh` | Proxmox 主机 | 将此组件连接到对等节点(读取对等节点状态) |
| `destroy.sh` | Proxmox 主机 | 拆除 LXC + 状态 |
编排器 (`scripts/install.sh`) 仅通过此接口与组件通信。添加新组件只需放入一个新文件夹;无需更改其他内容。
`/var/lib/soc-stack/state/<名称>.json` 中的状态文件是幂等性的事实来源。重新运行 `install.sh` 会检查每个组件的状态并跳过任何已部署的组件(除非使用 `--force`)。失败时,状态文件记录 `status: "failed"` 和一个 `error` 字符串;编排器继续处理剩余的独立组件并报告混合状态退出代码 5。
## 前置条件
- Proxmox VE 7.x 或 8.x 或 9.x 主机
- Proxmox 主机的 root 访问权限
- 一个桥接网络(默认:`vmbr0`)和一个存储池(默认:自动检测,回退到 `local-lvm`)
- 安装程序下载需要出站 HTTPS(Docker、Wazuh 安装程序、MCP 服务器仓库等)
- 完整堆栈使用 `--preset minimal` 时需要约 12 GB 可用内存和约 150 GB 可用磁盘
如果缺少,安装程序会自动安装 `jq`、`curl`、`wget` 和 `openssl`。
## 操作
**重新运行单个组件:**
```
sudo bash install.sh --components misp --force
```
**仅重新运行集成阶段(修复对等节点后):**
```
sudo bash install.sh --components all --no-integrate=false
```
**验证而不部署:**
```
sudo bash install.sh --components all --dry-run
```
**拆除所有内容:**
```
for comp in mcp dashboards zeek-suricata misp thehive-cortex wazuh; do
sudo bash scripts/components/${comp}/destroy.sh
done
```
## 添加新组件
请参阅 [docs/adding-a-stack.md](docs/adding-a-stack.md) 了解组件契约演练,以及 [docs/superpowers/specs/2026-05-15-soc-stack-unification-design.md](docs/superpowers/specs/2026-05-15-soc-stack-unification-design.md) 了解完整设计。
## 许可证
MIT
标签:Docker Compose, Hyper-V, meg, Metaprompt, NIDS, NSM, Proxmox, SOAR, SOC部署, Windows内核驱动, 一键安装, 信息安全, 威胁情报, 安全响应, 安全运营中心, 容器化, 工具包, 幂等性, 应用安全, 开发者工具, 无人值守, 版权保护, 特权提升, 网络安全, 网络映射, 自动化部署, 虚拟化技术, 隐私保护, 集群部署, 非交互式