今天,您將學習如何免費使用 Cloudflare Workers 來阻止代理 IP(免費的)。

正如您現在已經知道的那樣,Cloudflare 提供 託管列表 。這些僅適用於企業客戶。

他們的託管列表比我們在這裡所做的更有效,但是考慮到它是免費的,我們的方法還是不錯的。

為了獲得額外的好處,您可以自定義返回的“阻止”頁面以使用您的自定義安全 😁

為什麼要阻止代理?

在我的另一篇文章中,有人向我提問,例如“你到底為什麼要阻止 TOR?”。與 TOR 一樣,這些代理總是被濫用。

他們被濫用以創建多個虛假帳戶、濫用促銷、嘗試黑客攻擊、抓取等等。如果你對你的網站很認真,你應該阻止代理。尤其是如果您有一家小型商業商店。

我還想提一下,因為這些代理被用於詐騙、垃圾郵件和其他東西,它們的名聲很差。來自不良聲譽 IP 的流量 損害您的 SEO

阻止免費代理

正如我在阻止 TOR 的 其他文章 中所解釋的,這非常相似。我們有一個工人將代理 IP 存儲在工人 KV 中,您只需查詢它們。

唯一的主要區別是我們沒有特定或可靠的 API 來獲取這些代理 IP,因此我們必須盡可能地抓取或下載它們。

結合抓取和下載代理 IP 列表,我們可以完全免費(嗯,幾乎免費)實現這一目標。

服務工作者

我在 Github 上為您準備了一個隨時可用的 worker。

您所要做的就是克隆它,配置需求並發布它。

簡單配置

要設置這個工人,請參考我的另一篇文章(因為我不想複製內容):

工作人員配置為每 10 分鐘運行一次,如果您想更改此設置,只需編輯 wrangler.toml

更長的時間會減少您每月的 Workers 使用量,但不會那麼有效,因為這些免費的代理 IP 列表平均更新大約 10 分鐘。

建議盡可能頻繁地更新列表,以確保捕獲免費代理的濫用者。

易於使用

正如我們在我關於阻止 TOR 的另一篇文章中所做的那樣,用法是相同的。不同的是,現在 KV 命名空間被稱為 PROXIES_COMBINED_LIST 並且緩存設置為僅 2 分鐘。

下面是一個簡單的啟動腳本,您可以簡單地將其複制並粘貼到新的或現有的工作人員中:

 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", { 
 7  headers: {
 8	'content-type': 'text/html;charset=UTF-8',
 9  },
10  status: 403
11});
12}

測試

就像其他帖子一樣(同樣,我不想複製內容),我給你一個簡單的準備好使用的 starter worker:

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

不要忘記將 KV 綁定添加到此工作人員。

部署上述工作人員後,我們啟動 Chrome,獲取免費代理,配置 Proxy SwitchyOmega 並測試:

阻止代理結果

如您所見,它完全按預期工作。代理 IP 被封鎖了,至少我們能找到免費的。

請務必注意,付費代理不會被阻止,因為我們無權訪問它們,但如果您願意訂閱它們,您可以這樣做。

但同樣重要的是要知道您可以添加更多網站/api 來抓取和下載。

費用

在我的另一篇文章中,我已經解釋了這些工人使用的盡可能降低成本的策略,這個工人也不例外。

但是,由於我們需要更頻繁地更新列表,因此使用更改為:6 WRITE(s) x 24 HOUR(s) = 144 WRITE(s) per Day,最終每 31 次 WRITE(s) 4464天)。

不幸的是,這還不足以“適應”工人的免費限制,所以我強烈建議您每月投資 5 美元進行升級。然後,您將有 1,000,000(一百萬)個 WRITE(s) 限制。

如果您不樂意這樣做,則必須犧牲使用量並決定您是否希望僅阻止 TOR 或代理。阻止 TOR 已經“符合”免費限制,但代理不會;因此,您需要將代理的 cron 時間從 10 分鐘更改為 1 小時。

同樣,我強烈建議您升級,以便您可以同時使用這兩個工人。

有用的鏈接

  • 開始使用牧馬人:https://developers.cloudflare.com/workers/wrangler/get-started/
  • 開始使用 Workers:https://developers.cloudflare.com/workers/get-started/quickstarts/
  • 設置 KV 綁定:https://developers.cloudflare.com/workers/runtime-apis/kv/#kv-bindings

就是這樣,我希望這篇文章和工具對你有所幫助。

讓我知道你的想法!