DNC2004/Soc-Menu
GitHub: DNC2004/Soc-Menu
一个为安全运营中心(SOC)构建的Web门户,提供基础设施监控工具的集中访问和CAPEv2恶意软件分析报告的可视化展示与管理。
Stars: 1 | Forks: 0
# SOC Dashboard — ENIDH LEIC 2026
一个为三年级毕业设计“实时恶意软件实验室”构建的安全运营中心(SOC)Web 门户,提供基础设施监控工具的中心化枢纽和 CAPEv2 恶意软件分析仪表盘。
## 目录
- [概述](#overview)
- [功能](#features)
- [技术栈](#technologies)
- [架构](#architecture)
- [项目结构](#project-structure)
- [工作流](#workflow)
- [快速开始](#getting-started)
- [前置条件](#prerequisites)
- [克隆仓库](#clone-the-repository)
- [使用 Docker Compose 运行](#run-with-docker-compose)
- [本地运行(不使用 Docker)](#run-locally-without-docker)
- [API 参考](#api-reference)
- [配置](#configuration)
## 概述
SOC Dashboard 是一个内部 Web 门户,它汇集了关键的安全工具,并在一个干净、可过滤的界面中展示 CAPEv2 恶意软件分析报告。它被设计为运行在内部网络上由 Proxmox 托管的 LXC 容器内。
## 功能
- **主门户 (`index.html`)** — 基于磁贴的启动器,链接到 Proxmox、Wazuh Manager、CAPE Dashboard 和辅助模块。
- **CAPE 仪表盘 (`dashboard.html`)** — 显示存储的 CAPEv2 JSON 报告,具有风险评分、过滤、分页以及上传新报告的功能。
- **辅助模块 (`aux_mod.html`)** — 实用工具和文档(例如,日志转换器)。
- **自动刷新** — 仪表盘每 5 分钟轮询一次新数据。
- **文件上传** — 分析师可以直接从浏览器推送新的 `.json` 报告文件。
- **风险分类** — 报告会自动分类为高风险(评分 ≥ 7)、可疑(评分 4–6)或低风险(评分 < 4)。
## 技术栈
| 层级 | 技术 |
|---|---|
| 前端 | HTML5, CSS3, Vanilla JavaScript |
| 后端 | Node.js 20, Express 5 |
| 文件上传 | Multer |
| 反向代理 | Nginx |
| 容器化 | Docker, Docker Compose |
| 基础设施 | Proxmox VE (LXC container) |
| 版本控制 | Git / GitHub |
| 字体 | Google Fonts (Inter) |
## 架构
```
Proxmox Host
│
└── Debian 12 LXC Container (soc-menu)
│
├── Docker Compose
│ │
│ ├── soc-menu (nginx container)
│ │ ├── Serves static frontend files
│ │ └── Proxies /api/* → soc-backend:3000
│ │
│ └── soc-backend (Node.js/Express container)
│ ├── GET /api/analyses → reads JSON files from /Private
│ └── POST /api/upload → saves new JSON reports to /Private
│
└── /opt/soc-menu (Git repository, mounted into containers)
```
两个容器共享同一个内部 Docker 网络(`soc-network`)。后端从不直接暴露给主机——所有流量都通过 Nginx 反向代理到达。
## 项目结构
```
Soc_Dashboard/
│
├── docker/
│ ├── compose.yml # Docker Compose service definitions
│ └── nginx/
│ └── default.conf # Nginx reverse proxy configuration
│
├── soc_backend/
│ ├── Dockerfile # Node.js 20 Alpine image
│ ├── package.json # Dependencies: express, multer, cors
│ ├── server.js # Express API server
│ └── Private/ # JSON report storage (database)
│ └── _report.json
│
└── soc_frontend/
├── index.html # Main portal / module launcher
├── dashboard.html # CAPEv2 analysis dashboard
├── aux_mod.html # Auxiliary modules page
├── Scripts/
│ └── dashboard.js # Dashboard logic (fetch, filter, render, upload)
├── Styles/
│ ├── main_style.css # Main portal styles
│ └── dashboard.css # Dashboard styles
├── Images/ # Logos and icons
└── Files/ # Downloadable agent installers and scripts
├── wazuh_agent.sh
├── wazuh_agent.bat
├── linux_per.sh
└── power_shell.bat
```
## 工作流
```
Developer Machine
│
├── Edit files locally
├── git add .
├── git commit -m "message"
└── git push
│
▼
GitHub Repository
│
└── (SSH into LXC) git pull
│
▼
/opt/soc-menu (on LXC)
│
▼
Docker Compose (auto-mounts directory)
│
▼
soc-menu nginx container serves updated files
```
因为前端目录作为只读卷挂载到 Nginx 容器中,所以在主机上执行 `git pull` 就足以部署更改——无需重启容器。
## 快速开始
### 前置条件
- [Git](https://git-scm.com/)
- [Docker](https://docs.docker.com/get-docker/) 和 [Docker Compose](https://docs.docker.com/compose/)
- Node.js 20+(仅在不用 Docker 进行本地开发时需要)
### 克隆仓库
```
git clone https://github.com/DNC2004/Soc_Dashboard.git
cd Soc_Dashboard
```
### 使用 Docker Compose 运行
```
cd docker
docker compose up -d
```
该门户将通过 `http://localhost` 访问。
停止服务:
```
docker compose down
```
查看日志:
```
docker compose logs -f
```
### 本地运行(不使用 Docker)
**后端:**
```
cd soc_backend
npm install
node server.js
# API 可通过 http://localhost:3000 访问
```
**前端:**
使用任何静态文件服务器来托管 `soc_frontend` 目录,例如:
```
npx serve soc_frontend -l 8080
# 站点可通过 http://localhost:8080 访问
```
## API 参考
后端暴露了两个 endpoint,都通过 Nginx 在 `/api/` 下进行代理。
### `GET /api/analyses`
返回存储在 `soc_backend/Private/` 中的所有 CAPEv2 JSON 报告的数组。
**响应:** `200 OK` — 包含报告对象的 JSON 数组。
```
[
{
"info": { "id": 37, "score": 8.5, "started": "2026-06-02T12:05:00Z" },
"target": { "file": { "name": "malware.exe", "sha256": "abc123..." } },
"signatures": [ ... ]
}
]
```
### `POST /api/upload`
将新的 `.json` 报告文件上传到 `soc_backend/Private/`。
**请求:** `multipart/form-data`,包含一个 `file` 字段。
**响应:** `200 OK`
```
{ "success": true }
```
## 配置
### Nginx (`docker/nginx/default.conf`)
- 监听 80 端口。
- 从 `/usr/share/nginx/html` 提供静态文件(映射到 `soc_frontend/`)。
- 将所有 `/api/*` 请求代理到 `soc-backend:3000`。
- `client_max_body_size` 设置为 **50 MB**,以适应大型报告的上传。
### Docker Compose (`docker/compose.yml`)
| 服务 | 镜像 | 端口 | 卷 |
|---|---|---|---|
| `soc-menu` | nginx | 80:80 | `soc_frontend/` → `/usr/share/nginx/html` (只读) |
| `soc-backend` | Node.js 20 Alpine (本地构建) | 仅限内部 | `soc_backend/Private/` → `/app/Private` |
两个服务通过内部的 `soc-network` 桥接网络进行通信。
*ENIDH — LEIC 2026 — 三年级毕业设计*
标签:CAPEv2, DAST, Docker, Express, GNU通用公共许可证, Node.js, Web门户, 后端开发, 安全运营中心, 安全防御评估, 恶意软件分析, 版权保护, 网络映射, 请求拦截