Skip to Content

Cloudflare Workers

Cloudflare Workers はエッジ上で直接実行され、オリジンサーバーに到達する前にトラフィックをインターセプトします。Worker レベルで ProxyTracer を導入することで、レイテンシの増加なしにエッジネットワーク全体で悪意あるプロキシや VPN を遮断できます。

実装

このスニペットは、Cloudflare のネイティブヘッダーを使用してクライアントの実際の IP を抽出し、ProxyTracer API にクエリを実行して、プロキシが検出された場合に厳格な 403 Forbidden を返します。

export default { async fetch(request: Request, env: Env, ctx: ExecutionContext): Promise<Response> { // 1. 実際のIPを抽出 (Cloudflareがネイティブに提供します) const ip = request.headers.get("cf-connecting-ip"); // IPが見つからない場合(例: ローカル開発環境)はパススルー if (!ip) { return fetch(request); } try { // 2. ProxyTracer APIにクエリを実行 const ptResponse = await fetch(`https://api.proxytracer.com/v1/check/${ip}`, { method: "GET", headers: { "Authorization": `Bearer ${env.PROXYTRACER_API_KEY}` } }); if (ptResponse.ok) { const data = await ptResponse.json(); // 3. プロキシ/VPNが検出された場合は接続を切断 if (data.proxy === true) { return new Response( JSON.stringify({ error: "Access Denied: VPN or Proxy detected." }), { status: 403, headers: { "Content-Type": "application/json" } } ); } } } catch (error) { // フェイルオープン: APIに接続できない場合でも稼働率を維持するためトラフィックを許可 console.error("ProxyTracer API Error:", error); } // 4. 正常なトラフィックはオリジンサーバーに進行 return fetch(request); } };

デプロイ手順: Cloudflare ダッシュボードまたは Wrangler(wrangler deploy)を使用してスクリプトをデプロイします。PROXYTRACER_API_KEY シークレットが wrangler secret put PROXYTRACER_API_KEY で設定されていることを確認してください。

最終更新日: