오늘은 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분으로 설정되어 있다는 것입니다.
아래는 새로운 또는 기존 워커에 간단히 복사하여 붙여넣을 수 있는 간단한 스타터 스크립트입니다:
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 를 구성하고 테스트합니다:
보시다시피 예상대로 정확히 작동합니다. 프록시 IP가 차단되었습니다, 적어도 찾을 수 있었던 무료 프록시입니다.
유료 프록시는 접근할 수 없기 때문에 차단되지 않지만, 구독할 의향이 있다면 그렇게 할 수 있습니다.
하지만 스크래핑하고 다운로드할 더 많은 웹사이트/API를 추가할 수 있다는 것도 중요합니다.
비용
다른 게시물에서 이러한 워커에서 비용을 최소화하기 위해 사용된 전략을 설명했으며, 이 워커도 다르지 않습니다.
그러나 목록을 더 자주 업데이트해야 하기 때문에 사용량이 다음과 같이 변경됩니다: 6 WRITE x 24시간 = 하루 144 WRITE, 31일에 4464 WRITE가 됩니다.
안타깝게도 이것은 Workers의 무료 한도에 “맞추기"에 충분하지 않으므로, 월 5$를 투자하여 업그레이드하는 것을 강력히 권합니다. 그러면 1,000,000(백만) 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
이것으로 끝입니다. 이 기사와 도구가 도움이 되었기를 바랍니다.
여러분의 의견을 알려주세요!
댓글