muhammadabdullah071/SecureWatch-Cybersecurity-Threat-Monitoring

GitHub: muhammadabdullah071/SecureWatch-Cybersecurity-Threat-Monitoring

面向安全运营团队的全栈SOC仪表板,提供实时网络安全威胁监控、事件管理、威胁情报分析及完整的审计追踪能力。

Stars: 0 | Forks: 0

# SecureWatch - 网络安全威胁监控仪表板 ![版本](https://img.shields.io/badge/version-1.0.0-blue) ![React](https://img.shields.io/badge/React-19-61DAFB?logo=react) ![TypeScript](https://img.shields.io/badge/TypeScript-5.6-3178C6?logo=typescript) ![Node](https://img.shields.io/badge/Node.js-20-339933?logo=nodedotjs) ![PostgreSQL](https://img.shields.io/badge/PostgreSQL-16-4169E1?logo=postgresql) ![Prisma](https://img.shields.io/badge/Prisma-5-2D3748?logo=prisma) ![Docker](https://img.shields.io/badge/Docker-Compose-2496ED?logo=docker) ## 架构 ``` ┌─────────────────────────────────────────────────────────────┐ │ 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, 威胁监控, 安全运营, 扫描框架, 测试用例, 自动化攻击, 请求拦截