配置说明

CBCTF 使用 config.yaml 作为主配置文件。源码运行时,如果文件不存在,程序会从内置默认配置生成 config.yaml 并退出;修改后再次启动即可。Helm 部署时,Chart 会把 values 渲染成容器内 /app/config.yaml,并通过环境变量注入敏感配置。

环境变量支持 CBCTF_ 前缀覆盖配置,点号转换为下划线。例如 gorm.postgres.pwd 对应 CBCTF_GORM_POSTGRES_PWD

上传大小限制已拆分为 gin.upload.picturegin.upload.challengegin.upload.writeup。旧的 gin.upload.max 不再生效。

常用配置项

配置项说明示例
host平台对外访问地址,用于根路径跳转、邮件链接、OAuth 回调等,不要带尾部 /https://ctf.example.com
path数据根目录,存放附件、动态附件、流量文件、GeoIP 数据库等./data
log.level应用日志级别info
log.save是否将日志写入文件false
gin.modeGin 模式release
gin.hostHTTP 监听地址0.0.0.0
gin.portHTTP 监听端口8000
gin.proxies可信代理 IP 或 CIDR10.244.0.0/16
gin.upload.picture图片上传大小限制,单位 MiB8
gin.upload.challenge题目附件上传大小限制,单位 MiB8
gin.upload.writeup题解上传大小限制,单位 MiB8
gin.ratelimit.global全局每分钟限流100
gin.ratelimit.whitelist跳过限流的 IP 或 CIDR127.0.0.1
gin.cors允许跨域来源https://ctf.example.com
gin.jwt.secretJWT 签名密钥,生产环境必须替换默认值change-me-long-random
gin.metrics.whitelist允许访问 /metrics 的 IP 或 CIDR10.0.0.0/8
gorm.postgres.hostPostgreSQL 地址postgres.cbctf.svc
gorm.postgres.portPostgreSQL 端口5432
gorm.postgres.userPostgreSQL 用户名cbctf
gorm.postgres.pwdPostgreSQL 密码example-postgres-password
gorm.postgres.dbPostgreSQL 数据库名cbctf
gorm.postgres.sslmode布尔值,falsedisabletruerequirefalse
redis.hostRedis 地址redis.cbctf.svc
redis.portRedis 端口6379
redis.pwdRedis 密码example-redis-password
registration.enabled是否允许公开注册true
registration.default_group新用户默认分组 ID,0 表示不指定0
geocity_dbGeoLite2-City 数据库路径./data/GeoLite2-City.mmdb

异步任务配置

Redis 同时用于缓存和 Asynq 任务队列。以下配置影响后台任务并发:

配置项说明示例
asynq.log.levelAsynq 日志级别warning
asynq.queues.victim靶机启停任务并发2
asynq.queues.traffic靶机流量解析任务并发2
asynq.queues.generator动态附件生成器启停任务并发3
asynq.queues.attachment附件生成任务并发10
asynq.queues.email邮件任务并发10
asynq.queues.webhookWebhook 任务并发15
asynq.queues.image图片处理任务并发10

当靶机启动、附件生成或邮件发送堆积时,先检查 Redis 状态和任务日志,再根据资源情况调整对应队列并发。

Kubernetes 配置

配置项说明示例
k8s.configkubeconfig 路径;Helm 部署时为 /admin/admin.yaml./admin.yaml
k8s.namespace靶机、生成器等资源所在命名空间cbctf
k8s.capture流量捕获 sidecar 镜像ghcr.io/domcyrus/rustnet:latest
k8s.frp.on是否启用 FRP 暴露靶机端口false
k8s.frp.frpcFRP client 镜像ghcr.io/fatedier/frpc:v0.69.0
k8s.frp.nginxFRP 辅助 Nginx 镜像nginx:latest
k8s.frp.frpsFRPS 地址、端口、token、端口池host: frps.example.com

Helm 与配置文件的关系

Helm Chart 会把以下敏感值放入 Secret,并用环境变量覆盖配置文件中的空值:

环境变量来源说明
CBCTF_GIN_JWT_SECRET应用 SecretJWT 签名密钥
CBCTF_GORM_POSTGRES_PWDPostgreSQL Secret数据库密码
CBCTF_REDIS_PWDRedis SecretRedis 密码

如果 cbctf.gin.jwt.secretpostgres.auth.passwordredis.auth.password 留空,Chart 会在首次安装时生成随机值,并在升级时复用已有 Secret。

首次启动行为

  • 连接 PostgreSQL,创建 pg_trgm 扩展(失败只记录警告)
  • 自动迁移数据表
  • 初始化系统设置、品牌配置、权限、默认角色、默认分组、Cron 任务和 OAuth 默认项
  • 如果管理员组中没有用户,创建 admin 用户并将初始密码打印到日志

在线配置

管理后台提供系统配置页面,可查看和更新部分运行配置,也可以触发服务重启。生产环境仍建议将关键部署参数固化在 Helm values、Secret 或配置管理系统中,避免 Pod 重建后配置漂移。

安全配置建议

:::warning

  • 生产环境不要使用默认 gin.jwt.secret
  • 数据库、Redis、SMTP、OAuth、FRP token 使用强密码或随机密钥
  • hostgin.cors、Ingress 域名应保持一致
  • 部署在反向代理后时正确设置 gin.proxies
  • /metrics 只允许 Prometheus 或可信来源访问
  • 只将必要的目标加入 webhook.whitelist :::