appsettings.json ファイルは GZCTF のコア設定ファイルで、コンテナ内にマウントすることで設定します。この記事では、設定ファイルの各フィールドの意味を説明します。
appsettings.json の更新は、GZCTF サービスを再起動するたびに反応されます。
以下に完全な設定ファイルの例を示します:
ここでは、データベースの接続を構成できます。
Databaseこのフィールドは必須です。
GZCTF は PostgreSQL をバックエンドデータベースおよびデータ永続化に使用します。
GZCTF はデータベースとして PostgreSQL のみをサポートしており、MySQL などの他のデータベースはサポートしていません。設定ファイルに正しいデータベース接続文字列を記入してください。
RedisCacheこのフィールドはオプションです。
GZCTFはRedis をキャッシュおよびメッセージキューとして使用します。単一インスタンスのデプロイでは Redis は必須ではなく、GZCTF のメモリキャッシュを直接使用できます。複数インスタンスのデプロイでは、Redis は必須であり、共有キャッシュおよび SignalR の Scale-Out ブロードキャストとして使用されます。
v1.0以降、GZCTFはガーネットをキャッシュサービスとして使用することをサポートしています。
Storageこのフィールドはオプションです。
GZCTFは2種類のストレージプロバイダーをサポートしています:
ローカルディスクストレージ(デフォルト)
disk://path=./files
path: 任意。ファイルをローカルに保存するパス(デフォルト: ./files)S3互換ストレージ (AWS S3、MinIO、DigitalOcean Spaces など)
s3://accessKey=...;secretKey=...;bucket=...;region=...
または便宜上、特定のスキームを使用できます:
aws.s3://... (equivalent to s3://...)minio.s3://... (equivalent to s3://...)パラメータ:
accessKey: 任意。Access Key IDsecretKey: 任意。Secret Access Keybucket: Bucket 名region: リージョン(例:us-east-1)endpoint: 任意。カスタムエンドポイント URL(MinIO または他の S3 互換サービス用)useHttp: 任意。HTTPS の代わりに HTTP を使用するかどうか(デフォルト: false)forcePathStyle: 任意。パススタイル URL を使用するかどうか(デフォルト: false)詳細については、以下のリンクを参照してください:
ロギングレベルとスコープを設定することができます。さらに、GZCTF は Loki サーバーへのログ送信もサポートしています。
利用可能なロギングレベル: Trace, Debug, Information, Warning, Error, Critical, None。
GZCTF はメトリクスと分散トレーシングをサポートしています。使用するプロバイダーを設定できます。
Prometheus: Prometheus エンドポイント。
_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 のリクエスト頻度が制限されます。
この設定はプラットフォームの安全性の基礎となるものであり、テスト環境以外で無効化した場合の結果については自己責任となります。
正しく設定されたほとんどのケースでは、ユーザーがレート制限に達することはありません。通常の使用中に頻繁にレート制限が発生したり、バックエンドログに異常なIP情報(例:同一IPから大量のリクエスト)が表示される場合は、リバースプロキシの信頼できるプロキシ設定を確認してください。
この設定を有効にすると、GZCTF は非常に少ないリソースで通常のリクエストの数十倍に達する悪意のあるリクエストを防ぎ、プラットフォームの正常な動作を確保することができます。
この設定項目は非推奨となり、Registries フィールドを使用して定義してください。
ここでは、Docker Registry のユーザー名とパスワードを設定します。これは、ゲームで動的にコンテナを作成する際にイメージをプルするための認証で、オプションです。
パスワードに特殊文字(":@など、ただし_は使用可能)が含まれていないことを確認してください。そうでないと、テンプレートインジェクションの問題が発生し、Secret の作成に失敗する可能性があります。
ここでは、キャプチャ関連の情報を設定します。これは、登録、アカウントの回復、ログイン時のキャプチャの検証に使用されます。オプションです。
None、HashPowまたはCloudflareTurnstileを選択できます。安全性を確保し、プラットフォームが悪意のある登録やメールのクォータ消費などの問題に巻き込まれないようにするため、キャプチャ機能の有効化を強くお勧めします。
CloudflareTurnstile キャプチャプロバイダーの使用を推奨します。関連文書。
HashPow キャプチャの関連情報を設定します。オプションです。
安全なコンテキスト用: この機能は一部またはすべての対応しているブラウザーにおいて、安全なコンテキスト (HTTPS) でのみ利用できます。
この機能は非推奨となり、v1.2.2以降で削除されます。これは上流依存関係のメンテナンス不足によるものです。
代わりに CloudflareTurnstile CAPTCHAプロバイダをご利用ください。
Google Recaptcha v3 の関連情報を設定します。オプションです。
ここでは、リバースプロキシの関連情報を設定します。これは、実際の IP アドレスを取得するために使用されます。オプションです。
7を使用してください。詳細は ForwardedHeaders 列挙型を参照してください。リバースプロキシの信頼リストを無視し、任意の IP アドレスからのアクセスを許可したい場合は、Linux および非 IIS のリバース プロキシのスキームを転送するを参照し、環境変数ASPNETCORE_FORWARDEDHEADERS_ENABLEDをtrueに設定してください。
他のフィールドについては、公式ドキュメントの説明を参照してください:プロキシ サーバーとロード バランサーを使用するために ASP.NET Core を構成するおよびForwardedHeadersOptions クラス
Kestrel は GZCTF が内蔵して使用している Web サーバーです。
この設定を利用すると、HTTP プロトコルを指定したり、リクエストのサイズ上限を変更したりと、Kestrel の動作を自由に制御することができます。
他の設定フィールドについては、公式ドキュメントのKestrelServerOptionsクラスの属性を参照してください:KestrelServerOptions クラス。