Hôm nay bạn sẽ học cách chặn các IP Proxy (miễn phí) bằng Cloudflare Workers hoàn toàn miễn phí.
Như bạn đã biết, Cloudflare cung cấp Managed Lists . Những danh sách này chỉ dành cho khách hàng Enterprise.
Managed Lists của họ hiệu quả hơn những gì chúng ta đang làm ở đây, nhưng dù vậy phương pháp của chúng ta cũng khá tốt xét đến việc nó miễn phí.
Như một phần thưởng thêm, bạn có thể tùy chỉnh trang “chặn” được trả về để khoe bảo mật tùy chỉnh của bạn 😁
Tại sao phải chặn Proxy?
Tôi đã bị một số người hỏi trong bài viết khác: “tại sao bạn lại chặn TOR?”. Giống như TOR, những Proxy này luôn bị lạm dụng.
Chúng bị lạm dụng để tạo nhiều tài khoản giả, lợi dụng khuyến mãi, thử hack, scraping và nhiều hơn nữa. Nếu bạn nghiêm túc về trang web của mình, bạn nên chặn Proxy. Đặc biệt nếu bạn có một cửa hàng trực tuyến nhỏ chẳng hạn.
Tôi cũng muốn đề cập rằng vì những Proxy này được sử dụng cho lừa đảo, spam và những thứ khác, chúng có danh tiếng xấu. Lưu lượng từ các IP có danh tiếng xấu gây hại cho SEO của bạn .
Chặn Proxy miễn phí
Như đã giải thích trong bài viết khác về chặn TOR, điều này cực kỳ tương tự. Chúng ta có một worker lưu trữ các IP Proxy trong Workers KV và bạn chỉ cần truy vấn chúng.
Điểm khác biệt lớn duy nhất là chúng ta không có API cụ thể hoặc đáng tin cậy để lấy các IP Proxy này, vì vậy chúng ta phải scrape hoặc tải chúng xuống ở nơi có thể.
Sử dụng kết hợp scraping và tải xuống danh sách IP Proxy, chúng ta có thể đạt được mục tiêu này hoàn toàn miễn phí (à, gần như miễn phí).
Service worker
Tôi đã chuẩn bị một worker sẵn sàng sử dụng cho bạn trên Github .
Tất cả những gì bạn cần làm là clone nó, cấu hình các yêu cầu và xuất bản.
Cấu hình dễ dàng
Để thiết lập worker này, vui lòng tham khảo bài viết khác của tôi (vì tôi không muốn sao chép nội dung):
Worker được cấu hình để chạy mỗi 10 phút, nếu bạn muốn thay đổi chỉ cần chỉnh sửa wrangler.toml.
Khoảng thời gian dài hơn sẽ giảm mức sử dụng Workers hàng tháng, nhưng sẽ không hiệu quả bằng vì các danh sách IP Proxy miễn phí này cập nhật trung bình khoảng 10 phút.
Khuyến nghị cập nhật danh sách thường xuyên nhất có thể để đảm bảo bắt được những kẻ lạm dụng Proxy miễn phí.
Sử dụng dễ dàng
Giống hệt như trong bài viết khác về chặn TOR, cách sử dụng là giống nhau. Với sự khác biệt là namespace KV bây giờ được gọi là PROXIES_COMBINED_LIST và cache được đặt chỉ 2 phút.
Dưới đây là một script khởi đầu đơn giản mà bạn có thể copy và paste vào một worker mới hoặc hiện có:
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}Kiểm thử
Giống như bài viết khác (một lần nữa, tôi không muốn sao chép nội dung), tôi cung cấp cho bạn một worker khởi đầu đơn giản sẵn sàng sử dụng:
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}Đừng quên thêm KV Binding vào worker này.
Với worker trên đã được triển khai, chúng ta khởi động Chrome, lấy một proxy miễn phí, cấu hình Proxy SwitchyOmega và kiểm thử:
Như bạn có thể thấy, nó hoạt động chính xác như mong đợi. Các IP Proxy đã bị chặn, ít nhất là những cái miễn phí mà chúng ta có thể tìm thấy.
Điều quan trọng cần lưu ý là proxy trả phí không bị chặn vì chúng ta không có quyền truy cập vào chúng, nhưng nếu bạn sẵn sàng đăng ký thì có thể làm vậy.
Nhưng cũng quan trọng là bạn có thể thêm nhiều trang web/API hơn để scrape và tải xuống.
Chi phí
Trong bài viết khác, tôi đã giải thích chiến lược được sử dụng trong các worker này để giảm thiểu chi phí tối đa, worker này cũng không khác.
Tuy nhiên, do phải cập nhật danh sách thường xuyên hơn, mức sử dụng thay đổi thành: 6 WRITE x 24 GIỜ = 144 WRITE mỗi ngày, tổng cộng 4464 WRITE mỗi 31 ngày.
Thật không may, điều đó không đủ để “vừa” vào giới hạn miễn phí của Workers, vì vậy tôi khuyến nghị mạnh mẽ bạn đầu tư 5$/tháng để nâng cấp. Khi đó bạn sẽ có giới hạn 1.000.000 (một triệu) WRITE.
Nếu bạn không muốn làm vậy, bạn phải hy sinh mức sử dụng và quyết định muốn chặn chỉ TOR hay Proxy. Chặn TOR đã “vừa” vào giới hạn miễn phí, nhưng Proxy thì không; vì vậy bạn cần thay đổi thời gian cron từ 10 phút thành 1 giờ cho proxy.
Một lần nữa, tôi khuyến nghị mạnh mẽ bạn nâng cấp để có thể sử dụng cả hai worker.
Liên kết hữu ích
- Để bắt đầu với Wrangler: https://developers.cloudflare.com/workers/wrangler/get-started/
- Để bắt đầu với Workers: https://developers.cloudflare.com/workers/get-started/quickstarts/
- Để thiết lập KV Bindings: https://developers.cloudflare.com/workers/runtime-apis/kv/#kv-bindings
Vậy đấy, tôi hy vọng bài viết và công cụ này đã giúp ích cho bạn.
Hãy cho tôi biết suy nghĩ của bạn!
Bình luận