今天,您将学习如何免费使用 Cloudflare Workers 来阻止代理 IP(免费的)。

正如您现在已经知道的那样,Cloudflare 提供 托管列表 。这些仅适用于企业客户。

他们的托管列表比我们在这里所做的更有效,但是考虑到它是免费的,我们的方法还是不错的。

为了获得额外的好处,您可以自定义返回的“阻止”页面以使用您的自定义安全 😁

为什么要阻止代理?

在我的另一篇文章中,有人向我提问,例如“你到底为什么要阻止 TOR?”。与 TOR 一样,这些代理总是被滥用。

他们被滥用以创建多个虚假帐户、滥用促销、尝试黑客攻击、抓取等等。如果你对你的网站很认真,你应该阻止代理。尤其是如果您有一家小型商业商店。

我还想提一下,因为这些代理被用于诈骗、垃圾邮件和其他东西,它们的名声很差。来自不良声誉 IP 的流量 损害您的 SEO

阻止免费代理

正如我在阻止 TOR 的 其他文章 中所解释的,这非常相似。我们有一个将代理 IP 存储在 Workers 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 小时。

同样,我强烈建议您升级,以便您可以同时使用这两个工人。

有用的链接

就是这样,我希望这篇文章和工具对你有所帮助。

让我知道你的想法!