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 サーバーです。この設定を利用すると、HTTP プロトコルを指定したり、リクエストのサイズ上限を変更したりと、Kestrel の動作を自由に制御することができます。
KestrelServerOptions
クラスの属性を参照してください:KestrelServerOptions クラス。