Apurvabharoliya/sentinel-siem
GitHub: Apurvabharoliya/sentinel-siem
基于 React、Node.js 和 Supabase 构建的高性能全栈 SIEM 平台,提供实时威胁情报、日志管理和事件响应能力。
Stars: 0 | Forks: 0
# Sentinel SIEM
一个高性能、全栈的安全信息与事件管理(SIEM)平台,专为实时威胁情报、日志管理和事件响应设计 — 由 **Supabase** 提供支持。
## 功能
- **实时数据摄取与日志管理**:使用 UI 虚拟化(`react-window`)高效查看和过滤海量日志流。
- **启发式关联引擎**:智能日志解析和自动化安全事件关联。
- **交互式安全模块**:EDR/XDR、WAF 和事件响应仪表板。
- **实时事件模拟与 WebSockets**:由实时事件引擎和 Socket.IO 驱动的动态数据更新。
- **安全认证**:通过 Supabase Auth 进行基于 JWT 的身份验证。
- **3D 网络可视化**:沉浸式 Three.js 背景,包含粒子系统和动画数据流。
## 技术栈
### 前端
- **React 19** + **TypeScript** + **Vite**
- React Router(路由)
- Recharts(数据可视化)
- Socket.IO Client(实时事件)
- React-Window(UI 虚拟化)
- Three.js / @react-three/fiber(3D 背景)
- Lucide React(图标)
### 后端
- **Node.js** & **Express**(REST API)
- **Socket.IO**(WebSockets)
- **Supabase**(数据库、身份验证、实时功能)
### 数据库
- 通过 **Supabase** 使用 **PostgreSQL**
- 行级安全 (RLS)
- 实时订阅
## 项目结构
```
siem-/
├── src/ # Frontend React application
│ ├── components/ # UI components (Dashboard, Logs, Incidents, etc.)
│ ├── context/ # React context providers (Auth, GlobalState)
│ ├── index.css # Global cyber-themed styles
│ └── App.tsx # Root app with routing
├── server/ # Backend Node.js/Express application
│ ├── server.js # Express server with Supabase integration
│ └── .env.example # Backend env template
├── supabase/ # Database resources
│ └── schema.sql # Full schema + seed data for Supabase
├── .env.example # Frontend env template
└── README.md
```
## 快速开始
### 前置条件
- **Node.js** v18 或更高版本
- **一个 Supabase 账户**(在 [supabase.com](https://supabase.com) 提供免费套餐)
### 第 1 步:设置 Supabase
1. 访问 [supabase.com](https://supabase.com) 并创建一个新项目。
2. 创建完成后,转到 Supabase Dashboard 中的 **SQL Editor**。
3. 打开本项目中的 `supabase/schema.sql`,复制其内容,粘贴到 SQL Editor 中,然后点击 **Run**。
- 这将创建所有表(users、logs、threats、incidents、metrics)、索引、RLS 策略,并植入演示数据。
4. 转到 **Settings → API** 并复制您的:
- **Project URL**(类似于 `https://abc123.supabase.co`)
- **anon public key**
- **service_role key**(这是一个密钥 — 切勿将其暴露给前端!)
### 第 2 步:配置环境
**后端** — 根据模板创建 `server/.env`:
```
cp server/.env.example server/.env
```
使用您的 Supabase 凭据编辑 `server/.env`:
```
PORT=3001
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
```
**前端** — 根据模板创建 `.env`:
```
cp .env.example .env
```
默认的 `VITE_API_URL=http://localhost:3001` 应该可以直接开箱即用。
### 第 3 步:安装并运行
**安装所有依赖项:**
```
npm install
cd server && npm install && cd ..
```
**启动后端服务器:**
```
cd server
npm run dev
```
服务器在 `http://localhost:3001` 上启动。
**启动前端(在单独的终端中):**
```
npm run dev
```
Vite 前端可通过 `http://localhost:5173` 访问。
### 第 4 步:登录
在登录屏幕上点击 **Quick Demo Access**,即可立即以 `demo_user` / `demo_pass` 身份登录。
## API Endpoints
| Method | Path | Auth Required | Description |
|--------|-----------------------|---------------|------------------------------------|
| POST | `/api/auth/login` | No | 使用用户名和密码登录 |
| POST | `/api/auth/register` | No | 创建新账户 |
| POST | `/api/auth/demo-login`| No | 即时演示登录 |
| GET | `/api/health` | No | 健康检查 |
| GET | `/api/logs` | Yes (JWT) | 获取所有日志(最新优先) |
| GET | `/api/threats` | Yes (JWT) | 获取所有威胁(最新优先) |
| GET | `/api/incidents` | Yes (JWT) | 获取所有事件(最新优先) |
| GET | `/api/metrics` | Yes (JWT) | 获取仪表板指标 |
| POST | `/api/chat` | No | AI Copilot 聊天(模拟) |
## Auth 流程
1. **Login** 和 **Register** 页面调用后端 Express API。
2. 后端使用 Supabase Admin API (`service_role`) 创建用户并验证凭据。
3. 成功后,后端返回一个 **JWT**(来自 Supabase Auth)和一个用户配置文件。
4. 前端将 JWT 存储在 `localStorage` 中,并将其作为 `Bearer` token 附加到后续的 API 调用中。
5. 后端 middleware 使用 `supabase.auth.getUser()` 验证 JWT。
## 演示数据
`supabase/schema.sql` 在数据库中植入了:
- **1 个演示用户** (`demo_user` / `demo_pass`)
- **15 条示例日志**(各种级别和来源)
- **10 条示例威胁**(SQLi、XSS、Brute Force、DDoS 等)
- **7 个示例事件**(Open、Investigating、Resolved)
- **1 行指标数据**,包含实时仪表板统计数据
应用程序运行时,前端 **SimulationRunner** 组件还会每隔几秒钟在客户端生成额外的虚假日志/威胁/事件。
## 截图
| Dashboard | Log Explorer | Incidents |
|-----------|-------------|-----------|
| 实时 KPI、威胁时间线、攻击向量、实时信息流 | KQL 风格搜索、实时日志流、CSV 导出 | 事件分类、状态工作流、案例管理 |
怀着 ❤️ 为安全运营而构建。
标签:GNU通用公共许可证, MITM代理, Node.js, React, SIEM系统, Supabase, Syscalls, 安全事件响应, 安全运营, 扫描框架, 测试用例, 自动化攻击