- Miasma는 AI 웹 스크레이퍼를 무한 루프에 빠뜨려 훈련 데이터 수집을 방해하는 Rust 기반 서버 도구
- 웹사이트 콘텐츠를 대규모로 수집하는 AI 기업의 트래픽을 리디렉션해, ‘poison fountain’에서 가져온 오염된 데이터와 자기참조 링크를 반환
- 빠른 처리 속도와 낮은 메모리 사용량으로 서버 자원 낭비 없이 방어 가능
-
Nginx 리버스 프록시와 숨겨진 링크 삽입을 통해 스크레이퍼를
/bots경로로 유도해 무한 순환 구조 형성 - 정상 검색엔진은 robots.txt 예외 규칙으로 보호하며, 오픈소스로 커뮤니티 기여를 허용함
설치 및 실행
-
Cargo를 이용해 설치 가능
-
cargo install miasma명령으로 설치
-
- GitHub Releases 페이지에서 미리 빌드된 바이너리 다운로드 가능
- 기본 설정으로 실행 시
miasma명령만 입력 - 모든 설정 옵션은
miasma --help로 확인 가능
스크레이퍼 트랩 설정 방법
-
/bots경로를 스크레이퍼 유입 지점으로 설정 -
Nginx를 리버스 프록시로 사용해
/bots경로의 요청을 Miasma 서버로 전달location ~ ^/bots($|/.*)$ { proxy_pass http://localhost:9855; }-
/bots,/bots/,/bots/12345등 모든 변형 경로를 매칭
-
-
숨겨진 링크 삽입
- 웹페이지 내에 인간 방문자에게는 보이지 않지만 스크레이퍼가 탐지할 수 있는 숨겨진 링크 추가
<a href="/bots" style="display: none;" aria-hidden="true" tabindex="1"> Amazing high quality data here! </a> -
display: none,aria-hidden="true",tabindex="1"속성으로 접근성 도구와 사용자에게는 비노출
- 웹페이지 내에 인간 방문자에게는 보이지 않지만 스크레이퍼가 탐지할 수 있는 숨겨진 링크 추가
-
Miasma 실행
-
/bots를 링크 접두사로 지정하고 포트와 동시 연결 제한 설정miasma --link-prefix '/bots' -p 9855 -c 50 - 최대 50개의 동시 연결을 허용하며, 초과 요청은 HTTP 429 응답 반환
- 50개 연결 시 약 50~60MB 메모리 사용량 예상
-
-
배포 후 동작
- 설정 완료 후 배포하면 스크레이퍼는
/bots경로를 따라 무한히 오염된 데이터 페이지를 순환 - 로그를 통해 스크레이퍼의 반복 요청을 실시간으로 확인 가능
- 설정 완료 후 배포하면 스크레이퍼는
robots.txt 설정
- 정상적인 검색엔진 크롤러가 Miasma에 접근하지 않도록 robots.txt에 예외 규칙 추가 필요
User-agent: Googlebot User-agent: Bingbot User-agent: DuckDuckBot User-agent: Slurp User-agent: SomeOtherNiceBot Disallow: /bots Allow: /
설정 옵션
- CLI 옵션을 통해 세부 설정 가능
| 옵션 | 기본값 | 설명 |
|---|---|---|
port |
9999 |
서버가 바인딩할 포트 |
host |
localhost |
서버가 바인딩할 호스트 주소 |
max-in-flight |
500 |
동시에 처리 가능한 최대 요청 수. 초과 시 429 응답 반환. 메모리 사용량은 이 값에 비례 |
link-prefix |
/ |
자기참조 링크의 접두사. 예: /bots |
link-count |
5 |
각 응답 페이지에 포함할 자기참조 링크 수 |
force-gzip |
false |
클라이언트의 Accept-Encoding 헤더와 무관하게 항상 gzip 압축 적용. 전송 비용 절감에 유용 |
poison-source |
https://rnsaffn.com/poison2/ |
오염된 훈련 데이터를 가져올 프록시 소스 |
개발 및 기여
- 버그 리포트나 기능 제안은 GitHub Issues를 통해 제출 가능
- AI가 생성한 코드 기여는 자동으로 거부됨
- 커뮤니티 기여를 환영하며, 프로젝트는 오픈소스로 유지됨