内容
align="center">
<img src="docs/assets/soc-stack-banner.jpg" alt="soc-stack banner" width="900">
</p>
<h1 align="center">安全运营中心栈</h1>
<p align="center">
<strong>在Proxmox主机上执行一条命令,即可构建一个完整、可自托管的安全运营中心实验室,约需30分钟。</strong>
</p>
<p align="center">
a href="https://lidless.dev/soc-stacklidless.dev/soc-stack</strong></a>
</p>
<p align="center">
<img src="https://img.shields.io/github/actions/workflow/status/lidabs/soc-stack/ci.yml?branch=main&-badge&label=ci" alt="CI状态 <img src="https://img.shields.io/github/v/release/lidless-labs/soc-stack?style=for-the=release" alt="最新版本">
<https://img.shields.io/badge/license-MIT-green-the-badge" alt许可证">
</p>
<p align="center">
src="https.shields.io/badge/x_VE-LXC-E57000?style=for-the-badge&logo=proxmox&logoColor=white" alt="Proxmox VE L <img://img.shields.io/badge/Wazuh-SIEM%2FXDR-4DAA50?style=for-the-badge" alt="Wazuh">
<img src="https://img.shields.io/badge/TheHive_%2B_Cortex-Case_%2B_SOAR-f59e0b?style=for-the-badge"TheHive和Cortex">
<img src="https://img.shields.io/badge/MISP-Threat_Intel-7c3aed?style=for-the-badge" alt="MISP">
<img src="https://img.shields/Zeek_%2B_Suricata-NSM%2FIDS-2a5db0?style=for-the-badge" alt="Zeek和Suricata">
<img src="https://img.shields.io/badge/MCP-9_servers-555?style=for-the-badge" alt="MCP服务器">
<img src="https://img.shields.io/badge/Docker_Compose-stacks-2496ED?style=for-the-badge&logo=docker&logoColor=white" alt="Docker Compose栈">
<img src="https://img.shields.io/badge/Bash-installers-4EAA25?style=for-the-badge&logo=gnubash&logoColor=white" alt="Bash安装程序">
</p>
SOC Stack是一个一键安装程序,能够在单个Proxmox主机上建立一个完整、开源的安全运营中心:Wazuh、TheHive + Cortex、MISP、Zeek + Suricata、仪表板和一行MCP服务器,所有这些都连接在一起。您想要一个现实的安全运营中心来进行训练、测试检测或作为家庭实验室,但手动组装六种工具并集成它们需要几天时间。与每个工具的指南堆积不同,它将整个栈视为一个声明式、幂等、代理友好的部署:每个工具都是一个自包含的LXC组件,组件间的集成会自动连接,并且整个运行都是非交互式的,带有JSON输出,以便AI代理可以SSH进入并一次性执行。
**网站:** [lidless.dev/soc-stack](https://lidless.dev/soc-stack)
> **项目状态。** v1.0.0已标记,完整栈xmox VE.x/8.x/9部署并到端绿色测试。它是一个积极开发的、者的实验室工具,适用于家庭实验室、培训和运营中心复制,而不是固的多租户生产部署。有关威胁模型,请参见[SECURITY.mdCURITY.md),有关正在进行的内容,请参见[CHANGELOG](CHANGELOG.md)。
## 功能
SOC Stack是一个自托管的安全运营中心实验室构建工具,适用于家庭实验室和安全培训。在Proxmox VE主机上运行一个命令,约30分钟后,您将拥有一个可用的安全运营中心:
- **Wazuh**EM / XDR(警报、、漏洞检测、代理管理)
- **TheHive + 用于案例管理和SOAR(分析器、响应程序、可观察性丰富)
- **MISP** 用于威胁情报(IOC共享、源、关联 **Zeek +** 用于网络安全监控和入侵检测(NSM + IDS/IPS)
- **自定义仪表板** (Bro Hunter + Play)位于nginx后面
- **9个MCP服务器**,以便AI代理可以通过单个MCP配置查询Wazuh、TheHive、Cortex、MISP、Zeek、Suricata、MITRE ATT&CK、Rapid7和Sophos
每个工具都在其自己的专用、无特权的LXC中运行。编排器处理VMID分配、网络设置、幂等性、密钥生成和组件间集成线路。整个是非交互式的,并发出结构化JSON,因此人员或代理可以按需复制相同的实验室。
关键词:安全运营中心实验室、安全运营中心、Proxmox家庭实验室、Wazuh SIEM、TheHive、Cortex SOAR、MISP威胁情报、Suricata IDS、Zeek NSM、蓝队训练、检测工程、自托管安全、MCP安全工具服务器。
## 快速开始
**完整栈**(每个组件,合理的默认值):
```bash
curl -sSL https://raw.githubusercontent.com/solomonneas/soc-stack/main/install.sh | sudo bash
```
当从本地TTY以`sudo bash install.sh`运行时,如果未传递`--components`或`--manifest`,安装程序会打开一个组件选择器。管道、CI和代理驱动的安装保持非交互式,并默认为完整栈。
**自定义子集:**
```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
```
**代理驱动**(完全非交互式,结构化输出):
```bash
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
```
更喜欢在运行前阅读?克隆仓库并在本地执行相同的编排器;行为相同:
```bash
git clone https://github.com/solomonneas/soc-stack.git
cd soc-stack
sudo bash install.sh --components all --dry-run # 验证 + 计划,仅部署
```
安装后:
- `/root/soc-stack.json` 列出了每个组件及其LXC VMID、IP、端口、端点、警告和密钥文件路径。默认情况下,原始密码和API令牌被遮蔽;仅当自动化工作流明确需要它们时,才传递`--include-secrets-json`。
- `/root/mcp-clients.json` 是一个可以直接粘贴到Claude Desktop、OpenClaw或任何MCP客户端的`mcpServers`配置块。它包含承载令牌,由root用户写入。
- `/var/lib/soc-stack/state/` 包含每个组件的状态文件,用于幂等重新运行。
- `/var/lib/soc-stack/secrets/` 包含每个生成的凭证(模式060用户专用)用于。
用`--force`重新运行相同的命令以重新部署已,或使用`--components <one>`将单个现有的安装## 组件
| 组件 | LXC(最小) | 端口 |
| --- --- | --- |
| **wazuh** | Wazuh管理器、索引器、仪表板 | 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+通过集成转发到TheHive作为警报(`/var/ossec/integrations/custom-thehive.py`)。
- **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服务器的env文件都使用其对应工具的URL + API密钥从对等方状态填充。
## 已完成安装的样子
`/root/soc-stack.json`是部署内容的真实来源。默认情况下,机密被遮蔽,完整栈运行报告每个组件、其LXC、其端点和任何警告(IP地址和令牌是占位值,来自[RFC 5737](https://datatracker.ietf.org/doc/html/rfc5737)文档范围):
```json
{
"version": "1.0.0",
"preset": "minimal",
"status": "deployed",
"components": [
{
"component": "wazuh",
"status": "deployed",
"vmid": 9001,
"ip": "192.0.2.11",
"endpoints": { "dashboard": "https://192.0.2.11:443", "api": "https://192.0.2.11:55000" },
"credentials": { "user": "admin", "password": "REDACTED" }
},
{
"component": "mcp",
"status": "deployed",
"vmid": 9006,
"ip": "192.0.2.16",
"endpoints": { "wazuh_sse": "http://127.0.0.1:3001/sse", "thehive_sse": "http://127.0.0.1:3002/sse" }
}
],
"integrations": [
{ "from": "wazuh", "to": "thehive", "status": "wired" },
{ "from": "misp", "to": "suricata", "status": "wired" }
]
}
```
确切的结果JSON模式在[`docs/design/specs/2026-05-15-soc-stack-unification-design.md`](docs/design/specs/2026-15-soc-stack-unification-design.md)中有文档记录。
## 代理
设计使AI代理能够SSH到Proxmox主机并安全运营中心。完整的代理接口:
- **标准输入在`curl | sudo bash`下关闭**;安装程序自动检测到这一点并启用`--non-interactive`模式。每个提示符都变成一个标志,每个默认值都变成一个答案。
- **退出代码是稳定的**:0 = 成功,1 = 预检查(主机不良), 验证(标志3 = 组件失败,4 = 集成失败,5 = 混合状态。
- **结果JSON模式**在[`docs/design/specs/2026-05-15-soc-stack-unification-design.md`](docs/design/specs/2026-05-15-soc-stack-unification-design.md)中有文档记录。
- **幂等性**:使用相同的标志重新运行,如果所有内容都已部署,则在几秒钟内退出(状态为`deployed`)。`--force`触发重新部署。
- **清单模式**:不要使用数十个标志,而是编写一个JSON清单并传递`--manifest <path>`。在顶部应用的CLI标志各个清单字段。
## 标志参考
```
--components LIST 组件列表或"all"(默认:all)
--preset NAME 最小|标准|生产()
--bridge NAME Proxmox网桥(默认:vmbr0)
--storage NAME 存储池(默认:自动检测)
--ip-mode MODE dhcp或static(默认:dhcp)
--ip-range CIDR 如果--ip-mode=static,则需要(例如,198.51.100/24)
--vlan TAG 可LAN标签
--vmid-start N 分配的第一个VMID(默认:下一个可用)
--manifest PATH JSON清单(替代标志)
--state-dir PATH 状态目录(默认:/var/lib/soc-stack)
--json-out PATH 结果JSON路径(默认:/root/soc-stack.json)
--mcp-config-out PATH MCP客户端配置(默认:/root/mcp-clients.json)
--log-file PATH 安装日志(默认:/var/log/soc-stack-install.log)
--dry-run 仅验证+计划,不部署
--force 重新部署已标记为已部署的组件
--no-integrate 跳过组件间线路阶段
--non-interactive 在提示时硬失败(在stdin不是TTY时自动)
--include-secrets-json
在结果JSON中包含原始凭证(默认:已遮蔽)
--mcp-bind-host HOST MCP SSE绑定主机(默认:127.0.0.1;使用0.0.0.0公开)
--version 打印版本并退出
```
## 仓库结构
```
soc-stack/
├── install.sh # curl|bash的仓库根目录包装器
├── scripts/
│ ├── install.sh # 编排器(约430行)
│ ├── lib/ # 8个共享的bash模块(经过bats测试)
│ │ ├── logging.sh
│ │ ├── secrets.sh
│ │ ├── json-out.sh
│ │ ├── idempotency.sh
│ │ ├── network.sh
│ │ ├── manifest.sh
│ │ ├── preflight.sh
│ │ └── lxc.sh
│ └── components/
│ ├── wazuh/ # 清单.jsonc + 每个组件的5个脚本
│ ├── thehive-cortex/
│ ├── misp/
│ ├── zeek-suricata/
│ ├── dashboards/
│ └── mcp/ # 9个MCP服务器 + mcp-proxy SSE桥接
├── tests/
│ ├── unit/ # 105个bats测试,模拟Proxmox二进制文件
│ └── integration/ # 每个组件 + 组件间断言
├── docs/
│ ├── design/specs/ # 设计规范(结果JSON模式位于此处)
│ ├── gotchas.md
│ ├── adding-a-component.md # 组件合约演练
│ └── architecture/
├── playbooks/ # 事件响应剧本
├── cases/ # 案例研究证据
└── mcp-servers/
└── README.md # 9个捆绑MCP服务器的文档
```
## 工作原理
每个组件都是`scripts/components/<name>/`下的自包含文件夹,具有固定的接口:
| 文件 | 在哪里运行 | 目的 |
| --- | --- | --- |
| `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/<name>.json` 是幂等性的真实来源。重新运行 `install.sh` 会检查每个组件的状态,如果已经部署(状态中的 `status: "deployed"`),则跳过它。失败时,状态文件记录 `status: "failed"` 和一个 `error` 字符串;编排器继续处理剩余的独立组件,并报告混合状态退出代码 5。
## 先决条件
- Proxmox VE 7.x 或 8.x 或 9.x 主机
- Proxmox 主机上的根访问权限
- 一个桥接器(默认:`vmbr0`)和一个存储池(默认:自动检测,备用:`local-lvm`)
- 出站 HTTPS 用于安装程序下载(Docker,Wazuh 安装程序,MCP 服务器仓库等)
- 约 12 GB 和约 150 GB 免费磁盘用于完整栈在最小预设下
安装程序在缺少时会自动安装 `jq`、`curl`、`wget` 和 `openssl`。
## 操作
**重新运行单个组件:**
```bash
sudo bash install.sh --components misp --force
```
**重新运行集成阶段(在修复对等方后):**
```bash
sudo bash install.sh --components all
```
已经部署的组件会被幂等性检查跳过,因此纯粹的重新运行会直接进入跨组件线路。
**在不部署的情况下验证:**
```bash
sudo bash install.sh --components all --dry-run
```
**删除单个组件:**
```bash
sudo bash scripts/components/misp/destroy.sh
```
这会停止并销毁组件的LXC,并删除其状态文件。其他组件继续运行;如果对等方应该断开与其的连接,请在对等方重新运行安装程序。
**拆除所有组件:**
```bash
for comp in mcp dashboards zeek-suricata misp thehive-cortex wazuh; do
sudo bash scripts/components/${comp}/destroy.sh
done
sudo rm -rf /var/lib/soc-stack /root/soc-stack.json /root/mcp-clients.json
```
最终的 `rm` 删除状态、生成的密钥和发出的 JSON;如果您希望稍后恢复密钥,请跳过它。
**升级:**
```bash
curl -sSL https://raw.githubusercontent.com/solomonneas/soc-stack/main/install.sh | sudo bash
```
从较新的检查点重新运行安装程序是升级路径:已经部署的组件保持不变,新组件部署,集成重新连接。要获取新版本的单个组件,请销毁它并使用 `--components <name>` 重新运行。
## 为什么不用其他工具?
- **为什么不用手动安装每个工具?** 你可以,而且Wazuh、TheHive、MISP和Suricata的官方文档非常好。但是,六个安装加上它们之间的集成(警报转发、分析器线路、IOC源、日志传输)是一个多天的项目,当你下次重建时就会中断。SOC Stack使整个过程成为一个可复制的命令。
- **为什么不用单个一体化SIEM虚拟机(SecurityOnion、Wazuh OVA等)?** 那些优秀且专门构建。SOC Stack在设计上有所不同:每个工具都生活在自己的LXC中,您可以独立扩展、快照或销毁,组件是真正的上游项目(不是分支),跨工具集成是显式和可检查的,而不是内置于一个设备中。
- **为什么不用Ansible或Terraform?** 没有什么能阻止你,而且基于配置管理器的重写是一个合理的发展方向。当前设计倾向于简单的、可审计的bash,你可以从上到下阅读,并且`curl | sudo bash`路径一个代理可以在不需要额外主机工具的情况下驱动。状态文件,而不是后端状态,驱动幂等性。
- **为什么不在Docker / Kubernetes上直接运行?** 几个组件已经使用Docker Compose在LXC内部运行。Proxmox LXC层为每个工具提供隔离、自己的IP和容器级别的快照/回滚,这与家庭实验室SOC的实际操作方式相符。
## 什么是SOC Stack?
- **不是一个加固的生产SOC。** 它是一个实验室和培训工具。它假设一个受信任的Proxmox主机和一个受信任的内部网桥。不在不受信任的网络上公开组件IP,没有防火墙、VLAN和前置TLS终止。完整的威胁模型在[SECURITY.md](SECURITY.md)中。
- **不是托管或托管服务。** 没有SaaS,没有遥测,也没有电话回家。所有内容都在您控制的硬件上运行。
- **不是上游工具的分支或重新包装。** 它从实际源部署Wazuh、TheHive、Cortex、MISP、Zeek和Suricata,使用的版本已固定;它不会修改它们。
- **不是自动更新程序。** 安装程序固定版本,从不静默升级正在运行的组件;更新发生在您的日程安排上。
- **不是多主机。** 它以单个Proxmox主机为目标。今天,多节点功能不在考虑范围内。
## 添加新组件
参见 [docs/adding-a-component.md](docs/adding-a-component.md) 了解组件合约演练,以及 [docs/design/specs/2026-05-15-soc-stack-unification-design.md](docs/design/specs/2026-05-15-soc-stack-unification-design.md) 了解完整设计。
## 贡献
欢迎贡献。新组件遵循六文件合约,每个库函数都有bats测试,CI在每个PR上运行shellcheck和bats。 从[CONTRIBUTING.md](CONTRIBUTING.md)和[Code of Conduct](CODE_OF_CONDUCT.md)开始。
## 安全
默认凭证会在部署时轮换和验证,机密仅限root用户访问,默认情况下结果JSON会被遮蔽,MCP服务器绑定到localhost,除非您另有指示。完整的威胁模型、已加固和故意接受的内容都在[SECURITY.md](SECURITY.md)中。如果发现漏洞,请在GitHub上使用私有漏洞报告。
## 许可证
[MIT](LICENSE). 版权所有 (c) 2026 Solomon Neas.
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器