
miasma v0.4.3
AI 웹 스크래퍼를 끝없는 독 구덩이에 빠뜨리세요.
🌀 Miasma
AI 기업들은 다음 모델의 훈련 데이터로 사용하기 위해 인터넷을 엄청난 규모로 지속적으로 긁어모으고 있습니다. 공개 웹사이트를 운영하고 있다면, 그들은 이미 당신의 작업물을 훔치고 있는 것입니다.
_Miasma_는 이에 맞서 싸울 수 있도록 도와드립니다! 서버를 실행하고 악성 트래픽을 이쪽으로 유도하세요. _Miasma_는 poison fountain에서 오염된 훈련 데이터를 여러 자기 참조 링크와 함께 전송합니다. 슬롭 머신을 위한 끝없는 슬롭 뷔페인 셈이죠.
_Miasma_는 매우 빠르고 메모리 사용량이 최소화되어 있습니다. 인터넷의 거머리들을 막아내는 데 컴퓨팅 자원을 낭비할 필요가 없습니다.
[!CAUTION] 이 소프트웨어를 배포하는 데는 내재적인 위험이 따릅니다. 사용 전에 configuration과 disclaimer를 반드시 완전히 읽어보세요.
Usage
_Miasma_는 로컬에서 실행하거나 공식 docker image로 실행할 수 있습니다.
기존 Rust 서버에 _Miasma_를 통합하고 싶다면, _Miasma_를 라이브러리로 사용할 수도 있습니다.
Running Locally
cargo로 설치하세요 (권장):
cargo install miasma
또는 releases에서 미리 빌드된 바이너리를 다운로드할 수 있습니다.
다양한 패키지 관리자를 위한 커뮤니티 유지 관리 패키지도 제공됩니다:
기본 설정으로 _Miasma_를 시작하세요:
miasma
사용 가능한 모든 configuration options를 확인하세요:
miasma --help
Running with Docker
공식 docker image를 사용하여 _Miasma_를 실행하세요:
docker run --rm -p 9999:9999 austinweeks/miasma:latest
로컬에서 사용하는 것과 동일한 configuration flags를 전달하세요:
docker run --rm -p 9999:9999 austinweeks/miasma:latest \
--link-prefix '/naughty-bots' \
--max-in-flight 30
또는 docker compose 클러스터 내에서 실행하세요:
services:
miasma:
image: austinweeks/miasma:latest
command: ["--link-prefix", "/naughty-bots", "--max-in-flight", "30"]
ports:
- 9999:9999
How to Trap Scrapers
_Miasma_로 스크래퍼를 함정에 빠뜨리는 서버 설정 예시를 살펴보겠습니다. 스크래퍼 트래픽을 유도할 서버 경로로 /naughty-bots를 선택하겠습니다. 서버의 리버스 프록시로 Nginx를 사용하지만, 다양한 설정으로 동일한 결과를 얻을 수 있습니다.
완료되면 스크래퍼는 다음과 같이 함정에 빠지게 됩니다:
Embedding Hidden Links
사이트 내에 /naughty-bots로 이어지는 숨겨진 링크 몇 개를 포함시키겠습니다.
<a
href="https://github.com/austin-weeks/miasma/blob/main/naughty-bots"
style="display: none;"
aria-hidden="true"
tabindex="-1"
>
Amazing high quality data here!
</a>
style="display: none;", aria-hidden="true", tabindex="-1" 속성은 링크가 사람 방문자에게 완전히 보이지 않도록 하고, 스크린 리더와 키보드 탐색에서 무시되도록 합니다. 이 링크는 오직 스크래퍼에게만 보입니다.
Configuring our Nginx Proxy
숨겨진 링크가 /naughty-bots/를 가리키므로, 이 경로가 _Miasma_로 요청을 프록시하도록 설정하겠습니다. _Miasma_가 포트 9855에서 실행 중이라고 가정하겠습니다.
또한 실수로 자체 DDoS를 당하지 않도록 스크래퍼의 user agent를 기반으로 강력한 속도 제한을 설정하겠습니다.
http {
# Reserve 8MB memory for tracking user agents
limit_req_zone $http_user_agent zone=miasma:8m rate=1r/s;
server {
location = /naughty-bots {
port_in_redirect off;
return 301 /naughty-bots/;
}
location /naughty-bots/ {
# Rate limit via the 'miasma' zone with no queueing
limit_req_status 429;
limit_req zone=miasma burst=5 nodelay;
# Proxy requests to Miasma
proxy_pass http://localhost:9855/;
}
}
}
이 설정은 /naughty-bots 경로의 모든 변형을 잡아냅니다 -> /naughty-bots, /naughty-bots/, /naughty-bots/12345 등.
Run Miasma
마지막으로 _Miasma_를 시작하고 /naughty-bots를 링크 접두사로 지정하겠습니다. 이는 _Miasma_가 /naughty-bots/로 시작하는 링크를 생성하도록 지시하여, 스크래퍼가 Nginx 프록시를 통해 _Miasma_로 올바르게 라우팅되도록 합니다.
최대 동시 연결 수를 50으로 제한하겠습니다. 50개 연결에서 최대 메모리 사용량은 50-60 MB 정도로 예상할 수 있습니다. 이 제한을 초과하는 요청은 대기열에 추가되지 않고 즉시 429 응답을 받습니다.
또한 스크래퍼의 Accept-Encoding 헤더와 관계없이 _Miasma_가 모든 응답을 gzip 압축하도록 강제하겠습니다. gzip 압축된 응답은 훨씬 작기 때문에 송신 비용을 줄이는 데 도움이 됩니다.
스크래퍼를 영원히 가둬둘 수도 있지만, 링크 수와 최대 깊이 옵션을 사용하여 스크래퍼가 약 100K개의 오염된 페이지를 소비한 후 놓아주도록 하겠습니다. 이 설정으로 _Miasma_는 스크래퍼당 총 약 250MB의 데이터를 전송합니다.
miasma --link-prefix '/naughty-bots' -p 9855 -c 50 --force-gzip --link-count 5 --max-depth 8
Enjoy!
배포하고 잘못 행동하는 봇들이 우리의 끝없는 슬롭 머신에서 탐욕스럽게 먹어치우는 모습을 지켜보세요!
robots.txt
robots.txt를 통해 잘 행동하는 봇과 검색 엔진을 _Miasma_로부터 보호하세요!
User-agent: *
Disallow: /naughty-bots
Metrics
_Miasma_는 고유 User-Agent별 스크래퍼 요청 수를 추적하는 기능을 제공합니다. 이는 어떤 봇이 사이트를 가장 많이 공격하는지 식별하는 데 유용합니다. 메트릭은 로컬 SQLite 데이터베이스 파일에 기록되며, 원하는 엔드포인트에서 확인할 수 있습니다.
Configuration
_Miasma_는 CLI 플래그 또는 config file로 설정할 수 있습니다.
| Option | Default | Description |
|---|---|---|
config-file | 지정된 파일 경로의 파일에서 설정 옵션을 로드합니다. YAML, TOML, JSON 형식을 지원합니다. 예시는 docs를 참조하세요. | |
port | 9999 | 서버가 바인딩할 포트입니다. |
host | localhost | 서버가 바인딩할 호스트 주소입니다. |
unix-socket | TCP 주소 대신 Unix 도메인 소켓에 바인딩합니다. Unix 계열 시스템에서만 사용 가능합니다. | |
max-in-flight | 500 | 허용되는 최대 동시 요청 수입니다. 동시 요청 수를 초과했을 때 수신된 요청은 429 응답을 받습니다. _Miasma_의 메모리 사용량은 동시 요청 수에 직접 비례합니다 - 메모리 사용량이 우려된다면 이 값을 낮게 설정하세요. |
link-prefix | / | 자기 유도 링크의 접두사입니다. _Miasma_를 호스팅하는 경로여야 합니다, 예: /naughty-bots. |
link-count | 5 | 각 응답 페이지에 포함할 자기 유도 링크의 수입니다. |
max-depth | none | 스크래퍼가 지정된 깊이에 도달하면 링크 생성을 중단합니다. 이를 통해 원하는 양의 오염 데이터를 제공한 후 스크래퍼를 차단할 수 있습니다. 활성 스크래퍼 수를 관리 가능한 수준으로 유지하려면 link-count와 함께 사용하세요. |
force-gzip | false | 클라이언트의 Accept-Encoding 헤더와 관계없이 항상 응답을 gzip 압축합니다. 압축을 강제하면 송신 비용을 줄이는 데 도움이 됩니다. |
unsafe-allow-html | false | poison source의 응답에서 HTML 문자를 이스케이프하지 않습니다. 의도하지 않은 클라이언트 측 JavaScript 실행을 방지하기 위해 이스케이프는 기본적으로 활성화되어 있습니다. 이 옵션은 주의해서 사용하세요. |
poison-source | https://rnsaffn.com/poison2/?mask=0 | 오염된 훈련 데이터의 프록시 소스입니다. |
no-poison-cache | false | poison source 응답 캐싱을 비활성화합니다. |
metrics-db-path | 메트릭 데이터를 저장할 SQLite 데이터베이스 파일의 경로입니다. 데이터베이스가 존재하지 않으면 _Miasma_가 이 위치에 생성합니다. | |
metrics-username | _Miasma_의 메트릭 페이지에 접근하는 데 필요한 Basic auth 사용자 이름입니다. | |
metrics-password | _Miasma_의 메트릭 페이지에 접근하는 데 필요한 Basic auth 비밀번호입니다. | |
metrics-endpoint | /metrics | _Miasma_의 메트릭이 제공될 엔드포인트입니다. |
Disclaimer
_Miasma_는 the poison fountain과 관련이 없습니다. 우리는 그 응답을 통제할 수 없으며 그 내용의 안전성을 보장할 수 없습니다. 사용자를 Miasma 위치로 절대 유도해서는 안 됩니다.
_Miasma_는 영향을 받은 스크래퍼 운영자의 어떠한 보복에도 책임지지 않습니다. 관련 법률 및 호스팅 제공업체 정책을 준수하는 것은 귀하의 책임입니다. 전체 보증 및 책임 제한 세부 사항은 LICENSE (GPL-v3)를 참조하세요.
Cover art by @cerberussaturn07