ctfer-io/chall-manager
GitHub: ctfer-io/chall-manager
一款云原生的 CTF 动态题目实例编排引擎,按需创建和管理挑战环境,让大规模竞赛和培训的运维变得轻松。
Stars: 36 | Forks: 7
Chall-Manager 是一个按需生成挑战实例的引擎,旨在让 CTF (Capture The Flag) 挑战的管理变得轻而易举。
您无需费心处理基础设施细节、容器生命周期和扩展逻辑,Chall-Manager 提供了一个统一的抽象层来可靠地运行和管理挑战——无论是用于课堂、培训环境还是大规模竞赛。
## 🚀 Chall-Manager 的功能
- **抽象基础设施** – 在本地、Kubernetes 或跨云环境中运行挑战,无需更改您的工作流程;
- **管理挑战生命周期** – 按需创建、启动、停止和清理实例;
- **智能扩展** – 定义最小/最大资源池大小,然后自动维护资源池;随时按需从池中选取;
- **[与 CTFd](https://github.com/ctfer-io/ctfd-chall-manager) 及更多平台集成** – 具有平台无关性,并为 [CTFd](https://github.com/ctfd/ctfd) 提供了 [Terraform](https://github.com/ctfer-io/terraform-provider-ctfdcm) 和 [Pulumi](https://github.com/ctfer-io/pulumi-ctfdcm) 集成;
- **提供 [SDK](/sdk)** – 构建或复用以前的工作,在功能、默认及设计上的安全性 以及成本之间取得最佳平衡。
无论您是运行单个练习挑战还是数百个动态容器,Chall-Manager 都会处理繁重的工作,以便您可以专注于内容和选手。
## 🧩 为什么要使用 Chall-Manager?
- **对于教育工作者和培训师** – 为学生运行可复现的实验环境,无需手动重置;
- **对于 CTF 组织者** – 以极低的运维开销处理数千个临时挑战实例;
- **对于研究人员和开发人员** – 使用抽象层来原型化新的挑战后端或集成。
Chall-Manager 将复杂的基础设施问题转化为简单的挑战管理。
## 📦 安装
作为一个通用解决方案,关于部署有许多替代方案:请查看[这里](https://ctfer.io/docs/chall-manager/ops-guides/deployment/)。
## ⚡ 快速开始
让我们启动一个快速的 Docker 基础设施,然后部署一个示例!
```
# 启动 infra
docker network create quickstart || true
docker run -d --network quickstart --name registry -p 5000:5000 registry:3
docker run -d --network quickstart --name chall-manager -p 8080:8080 ctferio/chall-manager:latest --oci.insecure
# 编译 chall-manager-cli
# go build -o chall-manager-cli cmd/chall-manager-cli/main.go
# mv chall-manager-cli "$(go env GOPATH)/bin/"
# # 或者你可以使用以下方式安装
# go install github.com/ctfer-io/chall-manager/cmd/chall-manager-cli@latest
# # 或者你可以在接下来的步骤中使用 "go run cmd/chall-manager-cli/main.go"
# 来代替 "chall-manager-cli" 即时运行它。
# 创建 challenge
chall-manager-cli --url localhost:8080 challenge create \
--id test \
--scenario registry:5000/your-org/your-scenario:v0.1.0 \
--dir examples/additional \
--insecure
# 然后创建 instance
chall-manager-cli --url localhost:8080 instance create \
--challenge_id test \
--source_id test
# 可选:清除所有 Docker 设置
docker stop registry chall-manager
docker rm registry chall-manager
docker network rm quickstart
```
此示例实际上不会部署资源,您必须为 Chall-Manager 提供额外的能力才能执行此操作!
请查看[教程](https://ctfer.io/docs/chall-manager/tutorials/)以找到适合您用例的内容。
## 🏆 荣誉名单
以下列表包含所有已知在 (YYYY/MM/DD) 生产环境中运行过 Chall-Manager 的公开活动:
- 2024/11/20 [NoBracketsCTF 2024](https://github.com/nobrackets-ctf/NoBrackets-2024)
- 2025/02/09 [ICAISC 2025](https://www.linkedin.com/feed/update/urn:li:ugcPost:7295762712364544001/?actorCompanyId=103798607)
- 2025/03/08 Hack'lantique 2025
- 2025/05/17 [WhiteHats TrojanCTF 2025](https://github.com/ESHA-Trojan/TrojanCTF-2025-public)
- 2025/05/24 [24h IUT 2025](https://www.linkedin.com/feed/update/urn:li:activity:7332827877123506177/)
- 2025/11/29 [GreHack25](https://www.linkedin.com/posts/grehack_grehack25-activity-7401272551294787584-8ULF)
如果我们没有自行添加,请[开启一个 issue](https://github.com/ctfer-io/chall-manager/issues/new)将您的活动添加到列表中。
## 🔨 开发环境设置
克隆仓库后,运行以下命令以确保您的本地系统上拥有所有生成文件且保持最新。
```
make buf
make update-swagger
```
在提交影响 `*.proto` 文件的更改之前,您也可以运行这些命令,以避免本地设置与远程分支之间出现不一致。
如果您需要运行本地 etcd 实例,可以使用以下命令。
```
docker run -v /usr/share/ca-certificates/:/etc/ssl/certs -p 4001:4001 -p 2380:2380 -p 2379:2379 -e ETCD_ROOT_PASSWORD=root bitnamilegacy/etcd:3.5.13
```
标签:CTFer, DevSecOps, Docker, EVTX分析, EVTX分析, Go语言, Python工具, 上游代理, 二进制发布, 动态实例, 子域名突变, 安全防御评估, 容器编排, 开源工具, 按需分配, 挑战题目, 日志审计, 特权提升, 程序破解, 竞赛平台, 网络安全, 自动化部署, 请求拦截, 隐私保护, 靶场管理