Astăzi veți învăța cum să blocați IP-urile Proxy (gratuite) folosind Cloudflare Workers gratuit.

Așa cum știți deja, Cloudflare oferă Managed Lists . Acestea sunt disponibile doar pentru clienții Enterprise.

Managed Lists sunt mai eficiente decât ceea ce facem noi aici, dar totuși metoda noastră este decentă având în vedere că este gratuită.

Ca bonus suplimentar, puteți personaliza pagina de “blocare” returnată pentru a vă etala securitatea personalizată 😁

De ce să blocăm Proxy-urile?

Am fost întrebat în celălalt post de unii oameni gen “de ce ai bloca TOR?”. La fel ca TOR, aceste Proxy-uri sunt mereu abuzate.

Sunt abuzate pentru a crea conturi false multiple, a exploata promoții, a încerca hacking, scraping și multe altele. Dacă vă luați site-ul în serios, ar trebui să blocați Proxy-urile. Mai ales dacă aveți un mic magazin online de exemplu.

Aș vrea să menționez de asemenea că, deoarece aceste Proxy-uri sunt folosite pentru escrocherie, spam și alte lucruri, au o reputație proastă. Traficul de la IP-uri cu reputație proastă dăunează SEO-ului .

Blocarea Proxy-urilor gratuite

Așa cum am explicat în celălalt articol despre blocarea TOR, aceasta este extrem de similar. Avem un worker care stochează IP-urile Proxy în Workers KV și pur și simplu le interogați.

Singura diferență majoră este că nu avem un API specific sau de încredere pentru a obține aceste IP-uri Proxy, așa că trebuie să le facem scraping sau să le descărcăm de unde putem.

Folosind o combinație de scraping și descărcare de liste de IP-uri Proxy, putem atinge acest obiectiv complet gratuit (ei bine, aproape gratuit).

Service worker

Am pregătit un worker gata de utilizare pentru voi pe Github .

Tot ce trebuie să faceți este să îl clonați, să configurați cerințele și să îl publicați.

Configurare ușoară

Pentru a configura acest worker vă rog să consultați celălalt articol (pentru că nu vreau să duplic conținutul):

Worker-ul este configurat să ruleze la fiecare 10 minute, dacă doriți să schimbați acest lucru editați pur și simplu wrangler.toml.

Perioade mai lungi vor reduce utilizarea lunară a Workers, dar nu vor fi la fel de eficiente deoarece aceste liste gratuite de IP-uri Proxy se actualizează în medie la aproximativ 10 minute.

Este recomandat să actualizați lista cât mai des posibil pentru a vă asigura că abuzatorii de Proxy-uri gratuite sunt prinși.

Utilizare ușoară

Exact ca în celălalt post despre blocarea TOR, utilizarea este aceeași. Cu diferența că acum namespace-ul KV se numește PROXIES_COMBINED_LIST și cache-ul este setat la doar 2 minute.

Mai jos un script simplu de pornire pe care îl puteți pur și simplu copia și lipi într-un worker nou sau existent:

 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}

Testare

Ca la celălalt post (din nou, nu vreau să duplic conținutul), vă ofer un worker simplu de pornire gata de utilizare:

 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}

Nu uitați să adăugați KV Binding la acest worker.

Cu worker-ul de mai sus implementat, pornim Chrome, luăm un proxy gratuit, configurăm Proxy SwitchyOmega și testăm:

Block Proxy Result

După cum puteți vedea, funcționează exact conform așteptărilor. IP-urile Proxy sunt blocate, cel puțin cele gratuite pe care le-am putut găsi.

Este important de menționat că proxy-urile plătite nu sunt blocate deoarece nu avem acces la ele, dar dacă sunteți dispuși să vă abonați, puteți face acest lucru.

Dar este de asemenea important să știți că puteți adăuga mai multe site-uri/API-uri de la care să faceți scraping și să descărcați.

Costuri

În celălalt post am explicat strategia folosită în acești workeri pentru a minimiza costurile cât mai mult posibil, acest worker nu este diferit.

Cu toate acestea, din cauza faptului că trebuie să actualizăm lista mai des, utilizarea se schimbă la: 6 WRITE x 24 ORE = 144 WRITE pe zi, ajungând la 4464 WRITE pe 31 de zile.

Din păcate, acest lucru nu este suficient pentru a “încape” în limita gratuită a Workers, așa că sugerez insistent să investiți 5$/lună pentru upgrade. Veți avea apoi o limită de 1.000.000 (un milion) de WRITE-uri.

Dacă nu doriți să faceți acest lucru, trebuie să sacrificați utilizarea și să decideți dacă doriți să blocați doar TOR sau Proxy-urile. Blocarea TOR “încape” deja în limitele gratuite, dar Proxy-urile nu; așa că ar trebui să schimbați timpul cron de la 10 minute la 1 oră pentru proxy-uri.

Din nou, recomand insistent upgrade-ul pentru a putea folosi ambii workeri.

Linkuri utile

Ei bine, asta e tot, sper că acest articol și instrument v-a ajutat.

Spuneți-mi ce părere aveți!