ProxyTracer: VPN 및 프록시 차단기

:information_source: 요약 ProxyTracer API를 사용하여 사용자 등록, 로그인 및/또는 전역적으로 VPN, Tor 및 프록시 트래픽을 감지하고 차단합니다.
:hammer_and_wrench: 저장소 링크 https://github.com/ProxyTracer/discourse-proxytracer
:open_book: 설치 가이드 Discourse에 플러그인 설치 방법

이 플러그인은 ProxyTracer API를 사용하여 Discourse에서 VPN, Tor 및 프록시 트래픽을 감지하고 차단합니다.

기능

  • 새 사용자 등록, 기존 사용자 인증 또는 모든 사이트 방문자를 대상으로 전역적으로 VPN, Tor 및 프록시 사용자를 차단하는 데 대한 세밀한 제어를 제공합니다. VPN, Tor 및 프록시 사용자가 포럼에 읽기 전용으로 접근하는 것이 괜찮다면 API 요청을 절약하기 위해 사용자 등록 및 인증에만 활성화할 수 있습니다.
  • 최근 IP 주소 평가를 저장하여 API 요청을 줄이고 지연 시간을 낮추기 위해 캐싱을 사용합니다. 설정에서 IP 주소 평가를 기억할 시간을 제어할 수 있습니다.
  • API 타임아웃 또는 네트워크 장애가 발생하면 대규모 계정 잠금을 방지하기 위해 사용자 접근을 우선시합니다. 이 동작은 옵션을 통해 변경할 수 있습니다.
  • 정확한 IP 및 CIDR 서브넷 화이트리스트에 대한 내장 지원.

설정

  1. ProxyTracer 대시보드에서 표준 API 키를 발급받습니다.
  2. Discourse 관리 패널로 이동하여 관리자 → 플러그인 → ProxyTracer에서 ProxyTracer 설정을 찾습니다.
  3. ProxyTracer API Key 필드에 API 키를 입력합니다.
  4. Enabled during Signup(가입 시 활성화), Enabled during Login(로그인 시 활성화) 및/또는 Enabled for All Visitors(모든 방문자에게 활성화) 토글을 전환하여 보호 매개변수를 활성화합니다.
  5. 신뢰할 수 있는 IP 또는 CIDR 범위를 Whitelisted IPs(화이트리스트 IP) 목록에 추가합니다.
  6. (선택 사항) 서버의 특정 트래픽 요구 사항에 맞게 API 타임아웃 및 Redis 캐시 지속 시간 한도를 조정합니다.
  7. (선택 사항) 차단된 사용자에게 표시되는 차단 메시지를 사용자 지정합니다. 예를 들어, 사용자가 프록시, Tor 또는 VPN을 통해 사이트에 접근하지 않고 차단이 부당하다고 생각할 경우 사이트 관리자에게 연락하는 방법에 대한 지침을 추가할 수 있습니다.

설정 항목

설정 및 설명을 포함하는 표를 포함합니다

이름 설명
API Timeout (ms) API 응답을 기다릴 최대 시간(밀리초). 시간 초과가 발생하기 전까지 기다리는 시간입니다.
Cache Duration (hours) API를 다시 확인하기 전에 IP 주소를 기억할 시간(시간).
Fail Open on Error API가 충돌하거나 타임아웃이 발생하면 모든 사용자를 잠금 방지하기 위해 사용자가 등록/로그인할 수 있도록 허용합니다.
Enabled during Signup 새 사용자가 등록을 시도할 때 프록시 및 VPN을 차단합니다.
Enabled during Login 기존 사용자가 로그인을 시도할 때 프록시 및 VPN을 차단합니다.
Enabled for All Visitors 프록시 및 VPN이 포럼의 어떤 페이지에도 접근하거나 표시하지 못하도록 차단합니다. (경고: 이는 모든 방문자를 확인하며 API 할당량을 많이 사용합니다).
Block Message 사용자가 차단될 때 표시되는 정확한 오류 메시지입니다.
Whitelisted IPs 차단을 우회할 수 있도록 엄격히 허용되는 IP 주소 또는 CIDR 범위(예: 192.168.1.0/24)입니다.

네트워크 설정: Cloudflare 및 리버스 프록시

:warning: ProxyTracer가 효과적으로 작동하려면 Discourse 애플리케이션이 실제 클라이언트 IP 주소를 수신해야 합니다.

IP 주소 전달이 올바르게 이루어지도록 하려면 이 상세 설명을 따를 수 있습니다.

비상 액세스

본인이 잠겨버린 경우, 이 단순한 단계를 따라 액세스를 다시 얻을 수 있습니다.


테스트를 원하시면 ProxyTracer에 가입하여 테스트용 무료 API 크레딧을 받을 수 있습니다.

5개의 좋아요

크레딧이 매월 초기화되나요?

회원가입 시 제공되는 무료 크레딧에 대해 묻고 계신 건가요? 그렇다면 일회성 충전분입니다.

1개의 좋아요

이렇게 하면 플러그인의 전체적인 목적이 무의미해지지 않나요? 누구나 safe mode를 사용할 수 있습니다.

2개의 좋아요

상황에 따라 다릅니다. 안전 모드를 비활성화할 수 있는 사이트 설정이 있습니다. 이는 게이트된 토픽 컴포넌트나 사용자가 쉽게 비활성화해서는 안 되는 기타 컴포넌트/플러그인(광고, 게스트 게이트 등)에 유용합니다. 하지만 로그아웃 상태에서는 관리자가 안전 모드를 사용하는 것도 어려워집니다. 그래도 admin-login을 통해 활성화할 수 있다고 생각합니다.

이 플러그인의 경우, 안전 모드가 도움이 될 것이라고는 생각하지 않습니다. 안전 모드는 플러그인의 프론트엔드 부분만 비활성화하는데, 이 플러그인은 100% Ruby로 작성되어 있습니다. 따라서 JavaScript 커스터마이징을 비활성화하는 것이 도움이 될 것이라고 보지 않습니다. 이 사실 때문에 이 플러그인에 대해 조금 회의적입니다. 테마 컴포넌트인 것처럼 about.json 파일을 포함하고 있다는 사실도 회의적인 이유 중 하나입니다. 하지만 결국 각자는 자신의 포럼에 설치하는 코드에 대해 책임을 져야 합니다.

4개의 좋아요

이 부분에 대해 완전히 맞습니다. 새로 생성한 Discourse 인스턴스에서 직접 테스트를 통해 이를 확인했습니다. 실제로 작동하는 지시사항으로 문서를 업데이트했으며, 서버에 로그인하여 수동으로 애드온을 비활성화하는 과정으로 구성되어 있습니다:

cd /var/discourse
./launcher enter app
rails c
SiteSetting.proxytracer_enabled = false
exit
exit

“모든 방문자 사용 가능” 설정이 활성화되어 있고, VPN/프록시를 통해 연결하는 사용자가 안전 모드에 액세스를 시도하는 경우 안전 모드에 접근할 수 없음을 확인했습니다.

사실, 표준 플러그인의 경우 about.json은 중복되므로 저장소에서 제거했습니다.

@Moin, 모든 피드백에 감사드립니다. 다른 의견이나 제안이 있으시면 자유롭게 여기에 남겨 주세요. 코드는 완전히 오픈 소스이며 모든 기여를 환영합니다: GitHub - ProxyTracer/discourse-proxytracer.

1개의 좋아요

@ProxyTracer Cloudflare Warp으로 로그인하려고 하면 '알 수 없는 오류’가 표시되고 차단 메시지는 나오지 않습니다.

좋은 지적입니다! 이 문제는 0.1.1 버전에서 수정될 예정입니다. 업그레이드 후 문제가 해결되는지 확인해 주실 수 있을까요?

1개의 좋아요

현재 귀사의 서비스를 테스트 중인데, ‘templates/cloudflare.template.yml’ 파일과 충돌이 있는지, 그리고 Discourse 코어 업데이트가 발생할 경우 플러그인이 이를 지원할 수 있는지 알고 싶습니다.

프라이시를 존중하는 커뮤니티에서 저와 같은 사용자를 잃지 않는 중도적 방안이 무엇일지 궁금합니다.

테스트해 주셔서 감사합니다! README.md 문서에서 Cloudflare 통합에 대해 언급된 부분에서, "templates/cloudflare.template.yml" 파일의 포함을 명확히 권장하고 있습니다. 이는 포럼이 Cloudflare 뒤에 있는 경우 Discourse가 사용자의 실제 IP를 올바르게 추출하도록 보장하는 데 필수적이기 때문입니다. 따라서 해당 템플릿과 충돌하는 문제가 없으며, 오히려 이를 포함하는 것이 필요합니다.

그리고 네, 우리는 Discourse의 코어 업데이트를 따르겠다고 약속하며, 새로운 버전과의 완전한 호환성을 보장하기 위해 노력하고 있습니다.

2개의 좋아요

사용자를 차단하는 대신 단순히 hCaptcha를 통과하도록 요구하는 옵션을 추가하고, 이를 기본값으로 설정하는 것이 좋은 타협점이 될 수 있을지 궁금합니다. 이렇게 하면 스팸 사용자나 밴 회피자에게는 충분히 마찰을 주어 접근을 어렵게 만들면서도, VPN이나 Tor 등을 통해 온라인 프라이버시를 보호하려는 합법적인 사용자의 접근은 허용할 수 있기 때문입니다. 물론 해당 네트워크에 대한 완전한 차단을 유지하길 원하는 관리자에게는 여전히 해당 옵션이 제공될 것입니다. 여러분의 생각은 어떠신가요?

1개의 좋아요

정말 감사합니다! 방금 샌드박스에서 테스트를 해봤는데 완벽하게 작동합니다.

모바일 네트워크의 IP/ASN 관련 기능을 추가할 계획이 있으신가요? 제 포럼에서 자주 발생하는 상황이 있는데, 사용자가 브로드밴드 네트워크에서 벗어나 통신사의 4G/5G 네트워크로 전환하여 다른 IP를 확보하고, 이를 통해 Discourse의 가입 또는 로그인 제한을 우회하려는 경우입니다.

IP가 모바일 통신사의 ASN에 속하는지 식별하고, 필요에 따라 이러한 IP가 가입/로그인 과정에서 다르게 처리되도록 허용할 수 있다면 유용할 것 같습니다.

이것은 VPN/프록시와 직접적인 관련이 없으므로 ProxyTracer의 범위를 약간 벗어나는 내용일 수 있지만, Discourse가 IP당 계정 수 제한을 처리하는 방식과 관련된 특정 문제에 있어서는 도움이 될 것입니다.

1개의 좋아요

hCaptcha의 경우, 저는 이미 제 설치 환경에서 사용 중이며 매우 잘 작동하고 있습니다! Discourse 코어에 이미 포함된 것으로 보이는 플러그인과 여러분의 플러그인을 통합하여 추가 기능을 제공하는 것도 좋은 방법일 수 있겠네요.

완전한 차단을 유지하는 아이디어를 좋아합니다. 그것이 본래의 목적이기도 하니까요. 하지만 고정 및 모바일 네트워크의 IPv4와 IPv6에 관해서는, AI가 포럼에서 계정을 생성하는 것을 매우 좋아하기 때문에 챌린지를 통해 이러한 접근을 어렵게 만드는 것이 매우 유용해 보입니다.

1개의 좋아요

안녕하세요, 제 답변을 고려해 주셔서 감사합니다. 정말로 저에게 흥미로운 주제이며, 사용자와 관리자 모두에게 특히 민감하게 다뤄져야 할 구현 방식이라고 생각합니다.

솔직히 말하면, 저는 인간임을 증명하기 위해 캡차를 풀고 있는 로봇처럼, 의도적으로 봇처럼 행동하는 기분이 듭니다. 관련 주제에서 언급했듯이, 저에게는 Anubis의 구현 방식(POW)이 훨씬 더 쾌적하고 기능적으로 느껴집니다.

이것이 이 프로젝트의 범위를 벗어난 것임을 이해하지만, 제 위치에서 분석할 수 있는 바로는, 언급하신 캡차의 사용은 실현 가능하며, 사생활을 중시하고 차단되지 않고 기여하고 싶어 하는 사용자를 실제로 막지 않을 수 있을 것입니다.

1개의 좋아요

플러그인이 제공할 수 있는 또 다른 기능은 VPN/프록시를 사용하여 로그인 시도를 한 계정에 대한 정보를 제공하는 것입니다.

1개의 좋아요

테스트해 주셔서 감사합니다. 정말 감사드립니다!

흥미로운 사용 사례입니다. 사용자에게 이러한 세밀한 제어를 제공하는 데 가치를 인정합니다. 이는 v1 엔드포인트가 범위가 다소 제한적이고 특정 IP가 프록시/VPN인지 여부에 대한 불리언 값만 제공하기 때문에 완전히 새로운 API 엔드포인트가 필요합니다.

이러한 기능을 구현하려는 시도에 대해 데이터 정확성에 대한 몇 가지 우려가 있습니다. IP가 4G/5G 네트워크에 사용되는지 여부를 판별하는 정확도는 아직 이상적이지 않으며, 4G/5G 홈 무선 광대역 사용자와 같이 무고한 사용자가 부당하게 불이익을 받을 수 있는 애플리케이션이 있기 때문입니다.

그러나 현재는 API의 v1 엔드포인트를 개선하여 커버리지를 확장하는 데 집중하고 있습니다.

캡차 옵션이 포함된 확장 프로그램의 새로운 테스트 릴리스를 작업 중이며, 이 기능도 고려하고 있습니다. 이러한 탭이 충분하다고 생각하시나요, 아니면 더 많은 컬럼을 추가할 수 있다고 생각하시나요?

1개의 좋아요

이 정보만으로도 요청 사용 현황을 추적하는 데 더할 나위 없이 충분합니다. :high_five:

이 점에 대해서는 설명해 주셔서 감사합니다. 복잡한 문제라는 점을 이해하고 있습니다.

1개의 좋아요

@ProxyTracer 요청 사용에 대해 질문이 있습니다. 네트워크가 VPN/프록시가 아닌 경우에도 새로운 로그인 시마다 항상 차감되는 것을 확인했는데, 이것이 정상적인 동작인가요?

기록에서는 어쨌든 확인이 필요하고, 아마도 대시보드에서 요청 1회를 차감할 것 같아서 그렇습니다. 맞나요? 만약 이러한 접근에 대한 모든 사이트를 차단하도록 설정하면, 제가 구매한 패키지에서 훨씬 더 많은 양이 차감되겠지요?

'캐시 지속 시간(시간)'을 30일 정도로 늘리는 것을 고려해 보았는데, 그렇게 하는 것이 이상적이지 않은 것 같습니다. 제 생각이 틀린 건가요?

수신된 IP 주소가 VPN/프록시인지 아닌지를 결정하기 위해 플러그인은 ProxyTracer API를 쿼리해야 합니다.

그러나 결과(깨끗한 IP인지 VPN/프록시인지)는 포럼의 Redis 데이터베이스에 즉시 캐시됩니다. 설정된 ‘캐시 지속 시간(Cache Duration hours)’ 시간 창 내에서 해당 IP가 다시 로그인하는 경우, Discourse는 Redis에서 직접 답변을 제공합니다. 따라서 API 요청이 차감되지 않습니다. 모든 사이트 페이지에서 VPN/프록시를 차단하는 옵션을 활성화한 경우에도 동일한 원리가 적용됩니다.

방문자 수준 차단(Visitor-level blocking)은 익명 트래픽으로 인해 로그인 전용 보호(Login-only protection)보다 더 많은 요청을 소비합니다. 그러나 Redis 캐싱 덕분에 복귀 방문자의 반복적인 페이지 뷰는 불필요한 API 차감을 발생시키지 않습니다.

동적 주거용/모바일 IP는 때때로 순환하며, 새로운 VPN 출구 노드(Exit Node)도 시간이 지남에 따라 생성됩니다. 따라서 30일 캐시를 사용하면 이전에 깨끗했던 동적 IP가 VPN 제공업체에 재할당된 경우에도 캐시가 만료될 때까지 다시 확인되지 않을 수 있습니다. 이것이 30일보다 4일 정도가 훨씬 더 좋은 이유입니다.

이 설명이 도움이 되기를 바랍니다.

1개의 좋아요