このプロジェクトについて
Domain Checkは、ICANNがWHOISの後継として規定したRDAPを直接クエリする権威あるドメイン空き状況チェッカーです。READMEでは両者の比較がされており、WHOISがプレーンテキストのTCPポート43を使用し、.devや.appのサポートがなく、パースが困難なレジストリ固有のテキストを返すのに対し、RDAPはHTTPSと構造化されたJSONを使用します。プロジェクトのテストでは、whoisが登録済みドメインを「利用可能」と報告したケースがあった一方、RDAPはすべてのテストケースで正確であったとされており、精度比較に関する研究ドキュメントへのリンクが提供されています。
インターフェースについて、本プロジェクトは3つのクエリ方法を提供しています。Web UIではサインアップ不要のフォームを利用でき、REST API(/api/v1/)では、単一ドメインチェック、カンマ区切りのtldsパラメータによるマルチTLDチェック、最大50ドメインまで対応する一括POSTエンドポイント(ボディ制限64KB)、およびヘルスチェックエンドポイントが提供されます。APIレスポンスはJSON形式で、ドメイン、空き状況、TLD、チェックタイムスタンプ、データソース、キャッシュステータス、処理時間が報告されます。登録済みドメインの場合は、レジストラ、作成日、有効期限、ネームサーバー、ステータスコードも含まれます。CLIでは、checkおよびbulkサブコマンド、マルチTLDチェック、JSONまたはCSV出力、一括実行時のプログレスインジケーター、設定可能な並行処理を提供し、終了コード(すべて利用可能なら0、1つでも登録済みなら1、エラー時は2)が定義されています。
Domain Watch機能は、enable-watchフラグで有効にするオプション機能で、監視対象ドメインをポーリングし、「登録済み」から「利用可能」に遷移した際にWebhookを送信します。監視登録時にID、Webhook URL、HMACシークレットが返され、通知にはsha256プレフィックス付きの署名を含むX-DomainCheck-Signatureヘッダーが付与され、受信側でシークレットを用いて検証します。監視は単発(single-fire)で90日後に期限切れとなり、IPあたり24時間に10件まで、デフォルトのポーリング間隔は15分です。また、SSRF保護、プライベートIPブロック、DNSリバインディング防止策が講じられており、保存されるのはドメインとWebhook URLのみです。
レート制限はIPごとに適用され、Web UIは毎分10リクエスト、単一チェックAPIは60リクエスト、一括チェックAPIは5リクエストとなっており、制限を超えた場合は429エラーとRetry-Afterヘッダーが返されます。
セルフホストと設定について、Domain Checkはランタイム依存関係のない単一のGoバイナリ、またはDockerイメージとして提供されます。ソースからのビルドにはGo 1.26以降が必要です。テンプレートと静的アセットはバイナリに組み込まれています。設定はフラグ、DOMCHECK_環境変数、またはYAML設定ファイルの順に優先され、デフォルト値が適用されます。設定パラメータには、リスンアドレス、LRUキャッシュサイズ、空き状況・登録済み結果それぞれのキャッシュTTL、IANA RDAPブートストラップのリフレッシュ間隔、X-Forwarded-Forを処理するtrust-proxy、CORSオリジン、Prometheusメトリクスエンドポイント、ログ形式とレベル、監視データベースのパス、ポーリング間隔、最大TTL、IPあたりの監視制限などが含まれます。Caddyおよびnginxのリバースプロキシ例も提供されています。
アーキテクチャ面では、コードはコマンドエントリーポイントと、チェックエンジン(RDAPクライアント、WHOISフォールバック、DNSプリフィルタ、IANAブートストラップローダー、LRUキャッシュ、SSRFガード、レジストリ別レート制限)、階層化された設定、IDN-to-punycodeおよびpublicsuffixによるTLD抽出を含むドメイン検証、HTTPサーバーとハンドラー、およびCLIの内部パッケージで構成されています。リクエストフローは、検証 → キャッシュ参照 → 明らかに登録済みの名前を短絡させるDNSプリフィルタ → レジストリ別レート制限 → RDAPクエリ → パース → キャッシュ保存 → JSONレスポンスという流れになります。デフォルトのキャッシュTTLは、利用可能結果が5分、登録済み結果が1時間、エラーが30秒です。
セキュリティとメンテナンスについては、SSRF保護、セキュリティヘッダー(CSP, X-Frame-Options, X-Content-Type-Options, Referrer-Policy)、非ルートのDockerユーザーを採用し、アナリティクスやクッキー、データ保持を行わないゼロトラッキングを掲げています。開発にはgo test、ファズテスト、golangci-lintが使用されており、リポジトリでは積極的な自動gitガベージコレクション設定が適用されています。本プロジェクトはMITライセンスであり、セルフホストされたgitインスタンスの読み取り専用GitHubミラーとして記述されています。
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.