SOC Stack
One-shot Proxmox installer for a complete Security Operations Center.
在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糊状物准备好了吗mcpServersClaude Desktop、OpenClaw或任何MCP客户端的配置块。/var/lib/soc-stack/state/具有用于幂等重运行的每个组件状态文件。/var/lib/soc-stack/secrets/具有用于审核恢复的每个生成的凭据(模式0600,仅限root)。
用以下命令重新运行相同的命令 --force 重新部署已完成的组件,或 --components 将单个组件添加到现有安装中。
组件
| 组件 | 服务 | LXC预设(最小) | 端口 |
|---|---|---|---|
| 瓦祖 | Wazuh管理器、索引器、仪表板 | 2个vCPU、2 GB RAM、30 GB | 443、1514、1515、55000 |
| 肝皮质 | Hive 5.4、Cortex 3.1.8、Elasticsearch 7.17、Cassandra 4.1 | 2 vCPU、4 GB RAM、30 GB | 9000、9001 |
| mist | MISP、MariaDB 10.11、Redis 7、MISP模块 | 1 vCPU、2 GB RAM、20 GB | 443 |
| 泽克·苏里卡塔 | Zeek(NSM)、Suricata(IDS/IPS) | 1 vCPU、2 GB RAM、20 GB | 47760 |
| 仪表盘 | nginx后面的Bro Hunter+Playbook Forge | 1个vCPU,1 GB RAM,10 GB | 80、5174、5177 |
| 主控程序 | 9台MCP服务器(wazuh、thehe、cortex、misp、zeek、suricata、mitre、rapid7、sophos)通过以下方式包装为SSE mcp-proxy | 1个vCPU,1 GB RAM,10 GB | 3001-3009 |
每个组件都在自己的专用LXC中运行。组件可以单独部署或一起部署。编排器处理VMID分配、网络设置、幂等性和跨组件集成布线。
跨组件集成
所有组件部署后自动配置:
- 华住→ The Hive:级别8+的Wazuh警报通过自定义Python集成作为警报转发给TheWive(
/var/ossec/integrations/custom-thehive.py). - The Hive↔ 皮质:Hive的Cortex连接器使用组织级API键指向本地Cortex。
- MISP → 沼狸属:每小时cron从MISP中提取Snort/Suricata规则
restSearch终点纳入苏里卡塔的更新。 - Zeek → Wazuh:Wazuh代理在zeek suricata LXC中运行,并将conn.log、dns.log、http.log、ssl.log、notice.log转发给Wazuh管理器。
- MCP服务器← 所有同行:每个MCP服务器的env文件都填充有来自对等状态的相应工具的URL+API密钥。
状态
v0.9-0-rc1 (当前):在真实的Proxmox VE上验证了6个组件中的4个。参见 已知问题 在......下面标记2026-05-16。
v0.5.0 (2026-05-15):基础-共享bash库,每个组件模块合同,Wazuh部署经过端到端验证,最小编排器 --manifest 模式。
v1.0.0 (计划中):Proxmox上的自托管CI,删除旧路径,所有6个组件和5个集成的全烟测试绿色。
已知问题
- zeek suricata:LXC DHCP竞赛在繁忙的主机上,180秒
lxc_wait_network可以在DHCP完成之前超时,从而阻止部署。解决方法:重新运行install.sh --components zeek-suricata网络稳定后,或暂停超时scripts/lib/lxc.sh. - mcp:SSE探测定时MCP组件干净地部署,并将9个端点URL+令牌写入结果JSON,但如果
assert-mcp.sh安装后立即运行,mcp-proxy可能尚未绑定端口。解决方法:安装后等待30-60s再进行探测。 - 跨组件集成级联当一个组件发生故障时,下游集成跳过接线。Wazuh→ The Hive,MISP→ 苏里卡塔和泽克→ Wazuh都要求首先部署目标对等体。
代理商友好合同
设计为AI代理可以SSH到Proxmox主机,并一次性访问SOC。完整的代理界面:
- Stdin已关闭 在...之下
curl | sudo bash;安装程序会自动检测到这一点并启用--non-interactive模式。每个提示都变成了一个标志,每个默认值都变成了答案。 - 退出代码 稳定:0=成功,1=飞行前(主机故障),2=验证(标志错误),3=组件失败,4=集成失败,5=混合状态。
- 结果JSON模式 记录在
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 | (声明性) | 预设、端口、deps、提供 |
lxc-spec.sh | Proxmox主机 | 发射 pct create 每个预设的标志 |
deploy.sh | LXC | Idempotent安装程序内部;写入状态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主机上的根访问权限
- 桥接(默认值:
vmbr0)以及存储池(默认:自动检测,回退到local-lvm) - 用于安装程序下载的出站HTTPS(Docker、Wazuh安装程序、MCP服务器存储库等)
- 约12 GB的可用RAM和约150 GB的可用磁盘,适用于全栈
--preset minimal
安装程序自动安装 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/超级能力/规格/2026-05-15-oc-stack-统一设计.md 对于完整的设计。
传统路径
该仓库仍然包含v0.5.0之前的部署路径:
proxmox/ct/*.sh-每个工具一行LXC脚本(community-scripts.org风格),仅用于大脑皮层和mispscripts/create-vm.ps1,cloud-init/,reference/hyper-v/-Hyper-V虚拟机自动化路径
这些路径仍然有效,但统一 install.sh 是未来的规范入口点。v1.0.0中将删除旧路径。
许可证
麻省理工学院
