appsettings.json
文件是 GZCTF 的核心配置文件,通过挂载入容器内的方式进行配置。本篇将介绍配置文件的各个字段的含义。
appsettings.json
的每次更新都需要重启 GZCTF 服务才能生效。
此处给出一个完整的配置文件示例:
此处配置数据库连接字符串,其中 Database
为必填项,RedisCache
为可选项。
GZCTF 使用 PostgreSQL 作为后端数据库和数据持久化,使用 Redis 作为缓存和消息队列。单实例部署的情况下 Redis 不是必须的,可以直接采用 GZCTF 的内存缓存;多实例部署的情况下,Redis 是必须的,用作共享缓存和 SignalR 的 Scale-Out 广播。
GZCTF 仅支持 PostgreSQL 作为数据库,不支持 MySQL 等其他数据库。请在配置文件中填写正确的数据库连接字符串。
此处可以配置日志级别和范围,此外,GZCTF 还支持将日志发送到 Loki 服务器。
LogLevel:每个命名空间的最小日志级别。
Loki:Loki 服务器的配置。
可用的日志级别:Trace, Debug, Information, Warning, Error, Critical, None。
GZCTF 支持测量和分布式追踪。您可以配置您想要使用的提供商。
Prometheus: Prometheus 支持。
/metrics
的监听端口。如果配置了此项,需要额外手动配置 Kestrel.Endpoints
以使得服务器正常监听指定的端口。_total
后缀。OpenTelemetry:将测量和追踪数据导出到 OpenTelemetry。
Grpc
或 HttpProtobuf
。AzureMonitor:将测量和追踪数据导出到 ApplicationInsights。
Console:将追踪数据导出到控制台。
此处配置邮件发送相关信息,若采用邮箱注册和其他相关邮件功能,此处为必填项。
由于部分云服务厂家限制,可能无法采用 465 端口发送邮件。此时请尝试使用 587 端口。
此处配置加密密钥,用于加密数据库中比赛的私钥信息,可为任意长度的任意字符串。
此处配置容器后端,为比赛动态创建容器的必填项。
Docker
或 Kubernetes
。Default
或 PlatformProxy
。PortMappingType
设置为 PlatformProxy
时可用。若开启,将会记录流量于 /app/files/capture
目录下。由于 Docker Swarm 已不是一个活跃的项目,相关安全性功能相较于 k8s 有很大距离,不推荐使用。
Uri: Docker API Server 地址
/var/run/docker.sock
挂载入容器对应位置ChallengeNetwork: 指定题目容器所在的网络,若不指定,将会使用默认网络。
UserName, Password: Docker API Basic Auth 用户名和密码,可选项。
gzctf-challenges
kube-config.yaml
默认行为请将集群连接配置放入 kube-config.yaml
文件中,并将其挂载到 /app
目录下。实验功能若非了解行为请勿更改。
请注意更改 kube-config.yaml
文件中的 server
字段,将其指向集群的 API Server 地址。集群默认地址一般为 https://127.0.0.1:6443
,需要更改为集群实际地址。
为了满足网络策略,GZCTF 会在题目的 Namespace 下创建名为 gzctf-policy
的 NetworkPolicy,以限制访问。GZCTF 会自动检测此 NetworkPolicy 是否已经存在,若存在则不会再次创建,因此你可以通过创建或编辑此 NetworkPolicy 来自定义网络策略。
此处配置是否开启请求日志记录,若开启,将会在日志中输出每个请求的详细信息。此处输出不包括静态文件的请求。
此处配置是否开启请求频率限制,若开启,将会根据预设规则限制每个 IP 和 API 的请求频率。
此处配置 Docker Registry 的用户名和密码,用于比赛动态创建容器时拉取镜像的验证,可选项。
https://
前缀请确保密码中不包含特殊字符(如 ":@
等,但是可以使用 _
),否则可能导致模板注入问题,导致 Secret 创建失败。
此处配置验证码相关信息,用于注册、找回账号和登录时的验证码验证,可选项。
None
、GoogleRecaptcha
或 CloudflareTurnstile
配置 Google Recaptcha v3 的相关信息,可选项。
此处配置反向代理的相关信息,用于获取真实 IP 地址,可选项。
7
,详情请见 ForwardedHeaders 枚举若想要忽略反向代理的信任列表,允许任意 IP 地址访问,请参考转发 Linux 和非 IIS 反向代理的方案,设置环境变量 ASPNETCORE_FORWARDEDHEADERS_ENABLED
为 true
。
其他字段请参考官方文档描述:配置 ASP.NET Core 以使用代理服务器和负载均衡器 及 ForwardedHeadersOptions 类
Kestrel 为 GZCTF 自带并使用的 Web 服务器。利用此配置可以自行控制 Kestrel 的行为,例如指定 HTTP 协议、修改请求大小上限等等。
KestrelServerOptions
类的属性: KestrelServerOptions 类