今日は、Cloudflare Workers を使用してプロキシIP(無料のもの)を無料でブロックする方法を学びます。

すでにご存知のように、CloudflareはManaged Lists を提供しています。これらはEnterpriseのお客様のみ利用可能です。

彼らのManaged Listsは、ここで行っていることよりも効果的ですが、それでも無料であることを考えると、私たちの方法は十分まともです。

おまけとして、返される「ブロック」ページをカスタマイズして、独自のセキュリティを披露することができます 😁

なぜプロキシをブロックするのか?

他の投稿で「なぜTORをブロックするのか?」と質問されました。TORと同様に、これらのプロキシは常に悪用されています。

複数の偽アカウントの作成、プロモーションの悪用、ハッキングの試み、スクレイピングなどに悪用されています。ウェブサイトを真剣に運営しているなら、プロキシをブロックすべきです。特に小さなオンラインショップを運営している場合はなおさらです。

また、これらのプロキシは詐欺、スパム、その他の目的に使用されるため、評判が悪いことも述べておきたいと思います。評判の悪いIPからのトラフィックはSEOに悪影響を与えます

無料プロキシのブロック

TORのブロックに関する他の記事 で説明したように、これは非常に似ています。Workers KVにプロキシIPを保存するワーカーがあり、単純にそれらをクエリします。

唯一の大きな違いは、これらのプロキシIPを取得するための特定のまたは信頼性の高いAPIがないため、スクレイピングまたはダウンロードする必要があることです。

スクレイピングとプロキシIPリストのダウンロードの組み合わせにより、この目標を完全に無料で達成できます(まあ、ほぼ無料です)。

サービスワーカー

Github にすぐに使用できるワーカーを用意しました。

必要な作業は、クローンして、要件を設定し、公開するだけです。

簡単な設定

このワーカーのセットアップについては、他の記事を参照してください(コンテンツを重複させたくないため):

ワーカーは10分ごとに実行するように設定されています。変更したい場合は、wrangler.tomlを編集してください。

より長い期間はWorkersの月間使用量を減らしますが、これらの無料プロキシIPリストは平均約10分ごとに更新されるため、あまり効果的ではありません。

無料プロキシの悪用者を確実に捕まえるために、できるだけ頻繁にリストを更新することをお勧めします。

簡単な使用法

TORのブロックに関する他の投稿と全く同じように、使用方法は同じです。違いは、KVの名前空間がPROXIES_COMBINED_LISTと呼ばれ、キャッシュがわずか2分に設定されていることです。

以下は、新しいまたは既存のワーカーにコピー&ペーストできるシンプルなスターターscriptです:

 1const clientIP = request.headers.get('CF-Connecting-IP');
 2const ipset = await PROXIES_COMBINED_LIST.get("ipset", { type: "json", cacheTtl: 120 });
 3
 4if (ipset[clientIP]) 0
 5{
 6return new Response("Proxies are Forbidden", {
 7headers: {
 8'content-type': 'text/html;charset=UTF-8',
 9},
10status: 403
11});
12}

テスト

他の投稿と同様に(繰り返しますが、コンテンツを重複させたくありません)、すぐに使用できるシンプルなスターターワーカーを提供します:

 1addEventListener("fetch", event => {
 2event.respondWith(handleRequest(event.request))
 3})
 4
 5const html = `<!doctype html>
 6
 7<html lang="en">
 8  <head>
 9    <title>Access Denied</title>
10    <meta charset="utf-8">
11    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
12    <meta name="robots" content="noindex, nofollow" />
13    <meta name="viewport" content="width=device-width, initial-scale=1">
14    <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> 
15  </head>
16  <body>
17    <div class="container">
18      <h1 class="mt-5 text-center">Oops!</h1>
19      <h2 class="mt-2 text-center text-danger">Proxies are not allowed.</h2>
20    </div>
21  </body>
22</html>`;
23
24async function handleRequest(request)
25{
26const clientIP = request.headers.get('CF-Connecting-IP');
27const ipset = await PROXIES_COMBINED_LIST.get("ipset", { type: "json", cacheTtl: 120 });
28
29if (ipset[clientIP])
30{
31return new Response(html, {
32headers: {
33'content-type': 'text/html;charset=UTF-8',
34},
35status: 403
36});
37}
38
39const response = await fetch(request);
40
41return response;
42}

このワーカーにKV Bindingを追加することを忘れないでください。

上記のワーカーをデプロイしたら、Chromeを起動し、無料プロキシを取得し、Proxy SwitchyOmega を設定してテストします:

Block Proxy Result

ご覧のとおり、期待通りに正確に動作しています。プロキシIPがブロックされていますが、少なくとも見つけることができた無料のものです。

有料プロキシはアクセスできないためブロックされていないことに注意が必要ですが、購読する意思があればそうすることができます。

しかし、スクレイピングやダウンロードのためにより多くのウェブサイト/APIを追加できることも知っておくことが重要です。

コスト

他の投稿で、これらのワーカーでコストをできるだけ最小限に抑えるために使用される戦略を説明しましたが、このワーカーも変わりません。

しかし、リストをより頻繁に更新する必要があるため、使用量は次のように変わります:6 WRITE x 24時間 = 1日あたり144 WRITE、31日で4464 WRITEとなります。

残念ながら、これはWorkersの無料制限に「収まる」には十分ではないので、月額5$でアップグレードすることを強くお勧めします。そうすれば1,000,000(100万)WRITEの制限が得られます。

それを望まない場合は、使用量を犠牲にして、TORだけをブロックするかプロキシだけをブロックするかを決めなければなりません。TORのブロックは既に無料制限に「収まり」ますが、プロキシは収まりません。そのため、プロキシのcron時間を10分から1時間に変更する必要があります。

繰り返しますが、両方のワーカーを使用できるようにアップグレードすることを強くお勧めします。

便利なリンク

  • Wranglerの始め方:https://developers.cloudflare.com/workers/wrangler/get-started/
  • Workersの始め方:https://developers.cloudflare.com/workers/get-started/quickstarts/
  • KV Bindingsの設定:https://developers.cloudflare.com/workers/runtime-apis/kv/#kv-bindings

以上です。この記事とツールがお役に立てば幸いです。

ご意見をお聞かせください!