muhammadabdullah071/SecureWatch-Cybersecurity-Threat-Monitoring
GitHub: muhammadabdullah071/SecureWatch-Cybersecurity-Threat-Monitoring
面向安全运营团队的全栈SOC仪表板,提供实时网络安全威胁监控、事件管理、威胁情报分析及完整的审计追踪能力。
Stars: 0 | Forks: 0
# SecureWatch - 网络安全威胁监控仪表板







## 架构
```
┌─────────────────────────────────────────────────────────────┐
│ Frontend (React 19 + Vite) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
│ │ Auth │ │Dashboard │ │ Threats │ │ Analytics │ │
│ │ Pages │ │ Widgets │ │ Module │ │ Charts │ │
│ └──────────┘ └──────────┘ └──────────┘ └─────────────┘ │
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ TanStack Query | React Router | Axios │ │
│ └──────────────────────────────────────────────────────┘ │
└────────────────────────────────┬────────────────────────────┘
│ HTTP / WebSocket
┌────────────────────────────────┴────────────────────────────┐
│ Backend (Express.js) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
│ │ Auth │ │ Threat │ │Incident │ │ Notification│ │
│ │ Service │ │ Service │ │ Service │ │ Service │ │
│ └──────────┘ └──────────┘ └──────────┘ └─────────────┘ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ JWT | Helmet | CORS | Rate Limit | Zod │ │
│ └──────────────────────────────────────────────────────┘ │
└────────────────────────────────┬────────────────────────────┘
│ Prisma ORM
┌────────────────────────────────┴────────────────────────────┐
│ PostgreSQL Database │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────────┐ │
│ │ Users │ │ Threats │ │Incidents │ │ AuditLogs │ │
│ │ Sessions │ │ Feeds │ │ Notif │ │ │ │
│ └──────────┘ └──────────┘ └──────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
## ER 图
```
┌─────────┐ ┌──────────┐ ┌───────────┐
│ User │1──N──>│ Session │ │ Threat │
│─────────│ │──────────│ │────────────│
│ id │ │ id │ │ id │
│ email │ │ refresh..│ │ title │
│ password│ │ expiresAt│ │ sourceIP │
│ role │ │ ipAddress│ │ attackType │
│ isActive│ │ userId │ │ severity │
│ lastLogin│ └──────────┘ │ status │
└────┬────┘ │ assignedTo │
│ └──────┬─────┘
│1 │N
│ │
│N │1
┌────┴──────────┐ ┌────────┴──────────┐
│ Notification │ │ Incident │
│───────────────│ │───────────────────│
│ id │ │ id │
│ userId │ │ title │
│ title │ │ priority │
│ message │ │ status │
│ type │ │ threatId │
│ read │ │ assignedToId │
│ link │ │ createdById │
│ createdAt │ │ closedAt │
└───────────────┘ └───────────────────┘
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ AuditLog │ │ ThreatFeed │ │ │
│──────────────│ │──────────────│ │ │
│ id │ │ id │ │ │
│ userId │ │ type │ │ │
│ userEmail │ │ value │ │ │
│ action │ │ riskScore │ │ │
│ entity │ │ isActive │ │ │
│ entityId │ │ source │ │ │
│ ipAddress │ │ createdAt │ │ │
│ createdAt │ └──────────────┘ └──────────────┘
└──────────────┘
```
## 功能
### 认证与授权
- 注册、登录、登出、忘记/重置密码
- JWT Access + Refresh Token 轮换
- 基于角色的访问控制(Admin、Analyst、Viewer)
- 安全的 HTTP-only cookies + CSRF 防护
### 仪表板
- 实时威胁监控小部件
- 威胁趋势折线图(7 天)
- 严重程度分布饼图(环形图)
- 主要攻击来源条形图
- 最新安全事件流
- 加载骨架屏和空状态
### 威胁管理
- 完整的 CRUD 功能,支持搜索、过滤、排序和分页
- 严重程度级别:Critical、High、Medium、Low
- 状态工作流:New → Investigating → Mitigated → Resolved
- 为威胁分配分析师
### 事件管理
- 创建与威胁关联的事件
- 优先级和状态跟踪
- 为分析师分配事件并附带备注
- 事件时间线
### 威胁情报
- 对照已知的恶意源进行 IP 信誉查询
- 域名风险评分
- 管理威胁情报源条目
- 风险评分计算引擎
### 数据分析
- 按月统计的威胁(条形图)
- 严重程度分布
- 攻击类型细分
- 事件解决时间
- 主要威胁来源
### 用户管理(Admin)
- 创建、编辑、禁用、删除用户
- 角色分配
- 最近登录跟踪
- 活动概览
### 审计日志
- 跟踪每一个用户操作
- 按操作、实体、用户、日期范围进行过滤
- 捕获 IP 地址和时间戳
### 通知
- 通过 Socket.IO 进行实时通知
- 带有已读/未读状态的通知中心
- 推送通知:新威胁、事件分配、严重告警
### 其他
- 深色/浅色主题切换
- 全局搜索
- 响应式移动端布局
- 导出功能
- 加载骨架屏
- 错误边界
- 个人资料与设置页面
## 技术栈
### 前端
| 技术 | 用途 |
|------------|---------|
| React 19 | UI 框架 |
| TypeScript | 类型安全 |
| Vite | 开发服务器和打包工具 |
| Tailwind CSS v3 | 实用优先的样式 |
| ShadCN UI | 无障碍组件原语 |
| React Router v7 | 客户端路由 |
| TanStack Query v5 | 服务端状态管理 |
| Axios | HTTP 客户端 |
| React Hook Form | 表单管理 |
| Zod | schema 验证 |
| Recharts | 数据可视化 |
| Socket.IO Client | 实时更新 |
| Lucide React | 图标 |
### 后端
| 技术 | 用途 |
|------------|---------|
| Node.js 20 | 运行时 |
| Express.js 4 | Web 框架 |
| TypeScript | 类型安全 |
| Prisma ORM 5 | 数据库访问 |
| PostgreSQL 16 | 数据库 |
| JWT (jsonwebtoken) | 认证 |
| bcryptjs | 密码哈希 |
| Socket.IO | WebSocket 服务器 |
| Zod | 请求验证 |
| Helmet | 安全标头 |
| express-rate-limit | 速率限制 |
| swagger-jsdoc | API 文档 |
## 快速开始
### 前置条件
- Node.js 20+
- Docker & Docker Compose(用于 PostgreSQL)
- npm 或 yarn
### 安装
#### 1. 克隆并安装依赖
```
cd securewatch
# 安装 backend 依赖
cd backend
npm install
# 安装 frontend 依赖
cd ../frontend
npm install
```
#### 2. 配置环境
```
# Backend
cp backend/.env.example backend/.env
# 如有需要,编辑 .env(默认值适用于 Docker)
# Frontend
# 通过代理,VITE_API_URL 默认为 http://localhost:3001/api
# 开发环境无需 .env
```
#### 3. 启动数据库
```
docker compose up postgres -d
```
#### 4. 数据库设置
```
cd backend
# 生成 Prisma client
npm run prisma:generate
# 运行 migrations
npx prisma db push
# 填充样本数据(100 个 threats,50 个 incidents,20 个 users,200 条 audit logs)
npm run prisma:seed
```
#### 5. 启动开发服务器
```
# 终端 1 - Backend (http://localhost:3001)
cd backend
npm run dev
# 终端 2 - Frontend (http://localhost:5173)
cd frontend
npm run dev
```
#### 6. 访问应用
- **前端**:http://localhost:5173
- **API**:http://localhost:3001/api
- **API 文档 (Swagger)**:http://localhost:3001/api/docs
- **Prisma Studio**:`cd backend && npm run prisma:studio`
### 默认测试账户
| 邮箱 | 密码 | 角色 |
|-------|----------|------|
| admin@securewatch.io | SecureWatch123! | ADMIN |
| analyst@securewatch.io | SecureWatch123! | ANALYST |
| viewer@securewatch.io | SecureWatch123! | VIEWER |
## Docker(生产构建)
```
# 构建并运行所有服务
docker compose up --build
# 或运行单个服务
docker compose up postgres -d
docker compose up backend -d
docker compose up frontend -d
```
## API Endpoints
### 认证
| 方法 | Endpoint | 描述 |
|--------|----------|-------------|
| POST | `/api/auth/register` | 注册新用户 |
| POST | `/api/auth/login` | 登录 |
| POST | `/api/auth/logout` | 登出 |
| POST | `/api/auth/forgot-password` | 请求重置密码 |
| POST | `/api/auth/reset-password` | 重置密码 |
| POST | `/api/auth/change-password` | 修改密码(需认证) |
| GET | `/api/auth/me` | 获取当前用户 |
| POST | `/api/auth/refresh` | 刷新 Access Token |
### 威胁
| 方法 | Endpoint | 描述 |
|--------|----------|-------------|
| GET | `/api/threats` | 列出威胁(支持分页、过滤) |
| POST | `/api/threats` | 创建威胁 |
| GET | `/api/threats/:id` | 获取威胁详情 |
| PUT | `/api/threats/:id` | 更新威胁 |
| DELETE | `/api/threats/:id` | 删除威胁 |
### 事件
| 方法 | Endpoint | 描述 |
|--------|----------|-------------|
| GET | `/api/incidents` | 列出事件 |
| POST | `/api/incidents` | 创建事件 |
| GET | `/api/incidents/:id` | 获取事件详情 |
| PUT | `/api/incidents/:id` | 更新事件 |
| DELETE | `/api/incidents/:id` | 删除事件 |
### 用户(Admin)
| 方法 | Endpoint | 描述 |
|--------|----------|-------------|
| GET | `/api/users` | 列出用户 |
| POST | `/api/users` | 创建用户 |
| GET | `/api/users/:id` | 获取用户信息 |
| PUT | `/api/users/:id` | 更新用户信息 |
| DELETE | `/api/users/:id` | 禁用用户 |
### 数据分析
| 方法 | Endpoint | 描述 |
|--------|----------|-------------|
| GET | `/api/analytics/dashboard` | 仪表板统计 |
| GET | `/api/analytics/threats-by-month` | 按月统计的威胁 |
| GET | `/api/analytics/severity-distribution` | 严重程度细分 |
| GET | `/api/analytics/attack-types` | 攻击类型 |
| GET | `/api/analytics/resolution-time` | 解决时间指标 |
### 通知
| 方法 | Endpoint | 描述 |
|--------|----------|-------------|
| GET | `/api/notifications` | 列出通知 |
| PUT | `/api/notifications/:id/read` | 标记单条为已读 |
| PUT | `/api/notifications/read-all` | 全部标记为已读 |
| GET | `/api/notifications/unread-count` | 未读数量 |
### 审计日志(Admin)
| 方法 | Endpoint | 描述 |
|--------|----------|-------------|
| GET | `/api/audit-logs` | 列出审计日志 |
### 威胁情报
| 方法 | Endpoint | 描述 |
|--------|----------|-------------|
| GET | `/api/threat-intel/search/ip/:ip` | 搜索 IP 信誉 |
| GET | `/api/threat-intel/search/domain/:domain` | 搜索域名 |
| GET | `/api/threat-intel/feeds` | 列出威胁情报源 |
| POST | `/api/threat-intel/feeds` | 添加情报源条目 |
| DELETE | `/api/threat-intel/feeds/:id` | 移除情报源 |
## 运行测试
```
cd backend
npm test
```
测试使用 Jest + Supertest,并在隔离的测试环境中运行。
## 部署
### 前端(Vercel)
```
cd frontend
npm run build
# 将 dist/ 文件夹部署到 Vercel
# 将 VITE_API_URL 设置为你的 backend URL
```
### 后端(Render / Railway)
```
cd backend
npm run build
# 部署 dist/ 文件夹
# 设置 DATABASE_URL、JWT_SECRET、JWT_REFRESH_SECRET 环境变量
```
### 数据库(托管 PostgreSQL)
使用任意托管的 PostgreSQL 提供商:
- Render PostgreSQL
- Railway PostgreSQL
- Supabase
- AWS RDS
- Neon.tech
## 项目结构
```
securewatch/
├── backend/
│ ├── prisma/
│ │ ├── schema.prisma # Database schema
│ │ └── seed.ts # Sample data seeder
│ ├── src/
│ │ ├── controllers/ # Route handlers
│ │ ├── services/ # Business logic
│ │ ├── repositories/ # Data access layer
│ │ ├── middlewares/ # Auth, validation, security
│ │ ├── routes/ # Express routers
│ │ ├── validators/ # Zod schemas
│ │ ├── websocket/ # Socket.IO setup
│ │ ├── utils/ # Helpers, errors, logger
│ │ ├── types/ # TypeScript interfaces
│ │ ├── app.ts # Express app setup
│ │ ├── server.ts # Entry point
│ │ └── swagger.ts # API documentation
│ ├── tests/ # Jest test files
│ ├── package.json
│ └── tsconfig.json
├── frontend/
│ ├── src/
│ │ ├── components/
│ │ │ ├── ui/ # ShadCN UI primitives
│ │ │ ├── layout/ # Sidebar, Topbar, layouts
│ │ │ └── shared/ # DataTable, StatCard, etc.
│ │ ├── pages/
│ │ │ ├── auth/ # Login, Register, etc.
│ │ │ ├── dashboard/ # Main dashboard
│ │ │ ├── threats/ # Threat management
│ │ │ ├── incidents/ # Incident management
│ │ │ ├── analytics/ # Analytics charts
│ │ │ ├── users/ # User management
│ │ │ ├── audit-logs/ # Audit trail
│ │ │ ├── notifications/ # Notification center
│ │ │ ├── threat-intel/ # Threat intelligence
│ │ │ ├── settings/ # User settings
│ │ │ └── profile/ # User profile
│ │ ├── contexts/ # React contexts
│ │ ├── hooks/ # Custom hooks
│ │ ├── services/ # API service functions
│ │ ├── lib/ # Axios, Socket, utils
│ │ └── types/ # TypeScript types
│ ├── package.json
│ ├── vite.config.ts
│ └── tailwind.config.ts
├── docker-compose.yml
└── README.md
```
## 安全特性
- **Helmet** - HTTP 安全标头
- **CORS** - 跨源资源共享控制
- **Rate Limiting** - 暴力破解防护(针对认证限制为 15 分钟内 5 次请求)
- **JWT** - 短期 Access Token(15 分钟)+ Refresh Token(7 天)
- **Bcrypt** - 带有加盐轮数的密码哈希
- **输入验证** - 在所有 endpoint 上使用 Zod schema 验证
- **输入净化** - 通过剥离 HTML 防止 XSS
- **CSRF** - 基于 Token 的跨站请求伪造防护
- **安全 Cookies** - HTTP-only、same-site strict
- **SQL Injection** - 通过 Prisma 参数化查询进行防范
## 许可证
MIT
## 作者
专为网络安全专业人士用心打造。这是一个可用于作品集的企业级 SaaS 应用。
标签:GNU通用公共许可证, Node.js, React, SOC仪表盘, Syscalls, 威胁监控, 安全运营, 扫描框架, 测试用例, 自动化攻击, 请求拦截