技术架构
Ocean CTF 采用现代化的微服务架构,基于容器化技术,提供高性能、高可用的 CTF 竞赛平台。
系统架构
整体架构图
┌─────────────────────────────────────────────────────────┐
│ 用户访问层 │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ 用户端 Web │ │ 管理端 Web │ │
│ │ (React) │ │ (React) │ │
│ └──────────────┘ └──────────────┘ │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ Nginx 反向代理 │
│ - 静态资源服务 │
│ - API 请求转发 │
│ - 负载均衡 │
└─────────────────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 应用服务层 │
│ ┌──────────────────────────────────────────────┐ │
│ │ FastAPI 后端服务 │ │
│ │ - REST API │ │
│ │ - WebSocket (实时通信) │ │
│ │ - 认证授权 │ │
│ │ - 业务逻辑处理 │ │
│ └──────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
↓ ↓ ↓
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ MySQL 8.0 │ │ Redis 7 │ │ Docker │
│ │ │ │ │ │
│ - 业务数据 │ │ - 缓存 │ │ - 容器管理 │
│ - 用户数据 │ │ - Session │ │ - 题目环境 │
│ - 题目数据 │ │ - 队列 │ │ - 资源隔离 │
└──────────────┘ └──────────────┘ └──────────────┘
↓
┌─────────────────────────────────────────────────────────┐
│ 异步任务层 │
│ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Celery Worker │ │ Celery Beat │ │
│ │ - 容器创建/销毁 │ │ - 定时任务 │ │
│ │ - 题目同步 │ │ - 容器清理 │ │
│ │ - 数据统计 │ │ - 数据备份 │ │
│ └──────────────────┘ └──────────────────┘ │
└─────────────────────────────────────────────────────────┘技术栈
后端技术
| 技术 | 版本 | 用途 |
|---|---|---|
| Python | 3.11 | 主要编程语言 |
| FastAPI | 0.104+ | Web 框架 |
| SQLAlchemy | 2.0+ | ORM 框架 |
| Pydantic | 2.0+ | 数据验证 |
| Celery | 5.3+ | 异步任务队列 |
| Docker SDK | 6.1+ | 容器管理 |
| Redis | 7.0+ | 缓存和消息队列 |
| MySQL | 8.0+ | 关系型数据库 |
前端技术
| 技术 | 版本 | 用途 |
|---|---|---|
| React | 18+ | UI 框架 |
| Ant Design Pro | 6+ | UI 组件库 |
| Vite | 5+ | 构建工具 |
| TypeScript | 5+ | 类型系统 |
| Axios | 1.6+ | HTTP 客户端 |
| React Router | 6+ | 路由管理 |
基础设施
| 技术 | 版本 | 用途 |
|---|---|---|
| Docker | 24+ | 容器化 |
| Docker Compose | 2.20+ | 容器编排 |
| Nginx | 1.25+ | 反向代理 |
核心模块
1. 认证授权模块
技术方案:
- JWT Token 认证
- RBAC 权限控制
- Session 管理(Redis)
功能:
- 用户注册/登录
- 角色权限管理
- API 访问控制
2. 题目管理模块
技术方案:
- 文件存储(本地/OSS)
- 元数据存储(MySQL)
- 动态 Flag 生成
功能:
- 题目 CRUD
- 附件管理
- Flag 验证
3. 容器管理模块
技术方案:
- Docker SDK for Python
- 容器生命周期管理
- 资源限制(CPU、内存、网络)
功能:
- 容器创建/销毁
- 端口动态分配
- 资源监控
4. 比赛管理模块
技术方案:
- 状态机管理
- 实时数据推送(WebSocket)
- 排行榜缓存(Redis)
功能:
- 比赛配置
- 实时排行榜
- 数据统计
5. Vulhub 集成模块
技术方案:
- Git 仓库同步
- README 解析
- 自动化部署
功能:
- 漏洞环境导入
- 元数据提取
- 一键部署
数据库设计
核心表结构
sql
-- 用户表
users
- id (主键)
- email (邮箱)
- username (用户名)
- role (角色)
- created_at (创建时间)
-- 题目表
challenges
- id (主键)
- title (标题)
- category (分类)
- difficulty (难度)
- flag (Flag)
- points (分值)
-- 提交记录表
submissions
- id (主键)
- user_id (用户ID)
- challenge_id (题目ID)
- flag (提交的Flag)
- is_correct (是否正确)
- submitted_at (提交时间)
-- 容器表
containers
- id (主键)
- user_id (用户ID)
- challenge_id (题目ID)
- container_id (Docker容器ID)
- status (状态)
- created_at (创建时间)
- expires_at (过期时间)性能优化
1. 缓存策略
Redis 缓存:
- 用户 Session(TTL: 24h)
- 排行榜数据(TTL: 5min)
- 题目列表(TTL: 1h)
- API 响应缓存(TTL: 可配置)
缓存更新策略:
- 主动更新:数据变更时立即更新缓存
- 被动更新:缓存过期后重新加载
2. 数据库优化
索引优化:
- 用户表:email, username
- 题目表:category, difficulty
- 提交表:user_id, challenge_id, submitted_at
查询优化:
- 使用连接查询减少查询次数
- 分页查询避免大数据量
- 读写分离(可选)
3. 异步处理
Celery 任务队列:
- 容器创建/销毁(异步)
- 题目同步(异步)
- 数据统计(定时)
- 邮件发送(异步)
4. 负载均衡
Nginx 配置:
- 反向代理
- 负载均衡(多实例)
- 静态资源缓存
- Gzip 压缩
安全设计
1. 认证安全
- JWT Token 加密
- Token 过期机制
- 刷新 Token 机制
- 密码加密存储(bcrypt)
2. 容器安全
- 容器资源限制
- 网络隔离
- 只读文件系统
- 禁止特权模式
3. API 安全
- 请求频率限制
- SQL 注入防护
- XSS 防护
- CSRF 防护
4. 数据安全
- 敏感数据加密
- 数据库备份
- 审计日志
- 访问控制
扩展性设计
水平扩展
无状态设计:
- API 服务无状态
- Session 存储在 Redis
- 支持多实例部署
负载均衡:
- Nginx 负载均衡
- 多个 API 实例
- 多个 Celery Worker
垂直扩展
资源优化:
- 数据库连接池
- 异步 I/O
- 缓存优化
性能监控:
- API 响应时间监控
- 数据库查询监控
- 容器资源监控
部署架构
单机部署
适用于:测试环境、小规模使用(< 100 用户)
┌─────────────────────────────────┐
│ 单台服务器 │
│ ┌──────────────────────────┐ │
│ │ Docker Compose │ │
│ │ - Nginx │ │
│ │ - Backend │ │
│ │ - MySQL │ │
│ │ - Redis │ │
│ │ - Celery Worker │ │
│ │ - Celery Beat │ │
│ └──────────────────────────┘ │
└─────────────────────────────────┘集群部署
适用于:生产环境、大规模使用(> 1000 用户)
┌──────────────┐ ┌──────────────┐
│ Nginx LB │ │ Nginx LB │
└──────────────┘ └──────────────┘
↓ ↓
┌──────────────┐ ┌──────────────┐
│ Backend 1 │ │ Backend 2 │
└──────────────┘ └──────────────┘
↓ ↓
┌─────────────────────────────────┐
│ MySQL Cluster │
│ - Master (写) │
│ - Slave 1 (读) │
│ - Slave 2 (读) │
└─────────────────────────────────┘
↓
┌─────────────────────────────────┐
│ Redis Cluster │
│ - Master │
│ - Slave │
└─────────────────────────────────┘监控与运维
日志管理
- 应用日志:按日期轮转
- 访问日志:Nginx 日志
- 错误日志:异常追踪
- 审计日志:操作记录
监控指标
- CPU/内存使用率
- API 响应时间
- 数据库连接数
- 容器数量
- 错误率
备份策略
- 数据库:每日全量备份
- 配置文件:版本控制
- 用户数据:定期备份