配置说明

CBCTF 从内置默认值和 config.yaml 读取配置。Helm 会把 values 渲染成 /app/config.yaml,优先级高于内置默认值。

以下配置只来自部署配置,不进入 settings 表:

  • PostgreSQL/GORM 配置:gorm.*
  • Redis 连接信息:redis.*
  • 数据存储目录:path
  • Gin 监听地址和端口:gin.hostgin.port

其他配置首次启动时写入 settings;之后以数据库值为准。系统配置不会写回 config.yaml

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

常用配置项

配置项说明示例
host平台对外访问地址,用于根路径跳转、邮件链接、OAuth 回调等,不要带尾部 /https://ctf.example.com
path数据根目录,存放附件、动态附件、流量文件、GeoIP 数据库等./data
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.origins允许的浏览器请求 Origin,用于跨域请求与认证 cookie 判断https://ctf.example.com
gin.jwt.secretJWT 签名密钥,生产环境必须替换默认值change-me-long-random
gin.metrics.whitelist允许访问 /metrics 的 IP 或 CIDR10.0.0.0/8
gin.pprof.whitelist允许访问 /debug/pprof/* 的 IP 或 CIDR127.0.0.1
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

异步任务配置

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.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 会把以下值渲染进 ConfigMap:

Values说明
cbctf.gin.jwt.secretJWT 签名密钥
postgres.auth.password数据库密码
redis.auth.passwordRedis 密码

应用不从环境变量读取配置,也不为这些值生成 Secret。

首次启动行为

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

在线配置

管理后台会展示固定部署参数;PostgreSQL/GORM、Redis、数据目录、Gin 监听地址和监听端口只能通过部署配置修改。

GeoLite2-City 数据库可通过管理后台上传,保存到 {path}/GeoLite2-City.mmdb

固定部署参数修改后需要重启 Pod。

安全配置建议

:::warning

  • 生产环境不要使用默认 gin.jwt.secret
  • 数据库、Redis、SMTP、OAuth、FRP token 使用强密码或随机密钥
  • host、Ingress 域名应与用户访问地址一致,gin.origins 应包含前端页面的实际 Origin
  • 部署在反向代理后时正确设置 gin.proxies
  • /metrics 只允许 Prometheus 或可信来源访问
  • 只将必要的目标加入 webhook.whitelist :::