Skip to content

技术架构

Ocean CTF 采用现代化的微服务架构,基于容器化技术,提供高性能、高可用的 CTF 竞赛平台。

系统架构

整体架构图

┌─────────────────────────────────────────────────────────┐
│                     用户访问层                            │
│  ┌──────────────┐              ┌──────────────┐         │
│  │  用户端 Web  │              │  管理端 Web  │         │
│  │  (React)     │              │  (React)     │         │
│  └──────────────┘              └──────────────┘         │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│                   Nginx 反向代理                          │
│  - 静态资源服务                                           │
│  - API 请求转发                                           │
│  - 负载均衡                                               │
└─────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────┐
│                   应用服务层                              │
│  ┌──────────────────────────────────────────────┐       │
│  │         FastAPI 后端服务                      │       │
│  │  - REST API                                   │       │
│  │  - WebSocket (实时通信)                       │       │
│  │  - 认证授权                                    │       │
│  │  - 业务逻辑处理                                │       │
│  └──────────────────────────────────────────────┘       │
└─────────────────────────────────────────────────────────┘
         ↓                    ↓                    ↓
┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│   MySQL 8.0  │    │   Redis 7    │    │    Docker    │
│              │    │              │    │              │
│  - 业务数据  │    │  - 缓存      │    │  - 容器管理  │
│  - 用户数据  │    │  - Session   │    │  - 题目环境  │
│  - 题目数据  │    │  - 队列      │    │  - 资源隔离  │
└──────────────┘    └──────────────┘    └──────────────┘

┌─────────────────────────────────────────────────────────┐
│                   异步任务层                              │
│  ┌──────────────────┐      ┌──────────────────┐        │
│  │  Celery Worker   │      │   Celery Beat    │        │
│  │  - 容器创建/销毁  │      │  - 定时任务      │        │
│  │  - 题目同步      │      │  - 容器清理      │        │
│  │  - 数据统计      │      │  - 数据备份      │        │
│  └──────────────────┘      └──────────────────┘        │
└─────────────────────────────────────────────────────────┘

技术栈

后端技术

技术版本用途
Python3.11主要编程语言
FastAPI0.104+Web 框架
SQLAlchemy2.0+ORM 框架
Pydantic2.0+数据验证
Celery5.3+异步任务队列
Docker SDK6.1+容器管理
Redis7.0+缓存和消息队列
MySQL8.0+关系型数据库

前端技术

技术版本用途
React18+UI 框架
Ant Design Pro6+UI 组件库
Vite5+构建工具
TypeScript5+类型系统
Axios1.6+HTTP 客户端
React Router6+路由管理

基础设施

技术版本用途
Docker24+容器化
Docker Compose2.20+容器编排
Nginx1.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 响应时间
  • 数据库连接数
  • 容器数量
  • 错误率

备份策略

  • 数据库:每日全量备份
  • 配置文件:版本控制
  • 用户数据:定期备份

下一步

Released under the MIT License.