# Miasma: AI 웹 스크레이퍼를 끝없는 오염 루프로 가두는 도구

> Clean Markdown view of GeekNews topic #28014. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=28014](https://news.hada.io/topic?id=28014)
- GeekNews Markdown: [https://news.hada.io/topic/28014.md](https://news.hada.io/topic/28014.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-03-30T22:38:41+09:00
- Updated: 2026-03-30T22:38:41+09:00
- Original source: [github.com/austin-weeks](https://github.com/austin-weeks/miasma)
- Points: 5
- Comments: 1

## Summary

AI 트래픽을 **능동적으로 교란**하는 서버 도구라는 점에서, 단순한 크롤러 차단기와는 다른 철학을 가집니다. 개발자 입장에서는 **데이터 수집 방어를 코드 레벨에서 자동화**할 수 있다는 점이 흥미롭지만, 동시에 합법적 크롤러와의 경계 설정이 핵심 과제가 됩니다. 웹 인프라 측면에서는 일종의 **robots.txt의 실행 버전**처럼 작동해, 정책 선언을 실제 트래픽 제어로 확장하는 시도로 볼 수 있습니다.

## Topic Body

- **Miasma**는 AI 웹 스크레이퍼를 **무한 루프에 빠뜨려 훈련 데이터 수집을 방해하는 Rust 기반 서버 도구**
- 웹사이트 콘텐츠를 대규모로 수집하는 **AI 기업의 트래픽을 리디렉션**해, ‘poison fountain’에서 가져온 **오염된 데이터와 자기참조 링크**를 반환
- **빠른 처리 속도와 낮은 메모리 사용량**으로 서버 자원 낭비 없이 방어 가능
- **Nginx 리버스 프록시**와 **숨겨진 링크 삽입**을 통해 스크레이퍼를 `/bots` 경로로 유도해 무한 순환 구조 형성
- **정상 검색엔진은 robots.txt 예외 규칙으로 보호**하며, 오픈소스로 커뮤니티 기여를 허용함

---

### 설치 및 실행
- **Cargo**를 이용해 설치 가능
  - `cargo install miasma` 명령으로 설치
- GitHub **Releases** 페이지에서 미리 빌드된 바이너리 다운로드 가능
- 기본 설정으로 실행 시 `miasma` 명령만 입력
- 모든 설정 옵션은 `miasma --help`로 확인 가능

### 스크레이퍼 트랩 설정 방법
- `/bots` 경로를 스크레이퍼 유입 지점으로 설정
- **Nginx**를 리버스 프록시로 사용해 `/bots` 경로의 요청을 Miasma 서버로 전달
  ```nginx
  location ~ ^/bots($|/.*)$ {
    proxy_pass http://localhost:9855;
  }
  ```
  - `/bots`, `/bots/`, `/bots/12345` 등 모든 변형 경로를 매칭
- ## 숨겨진 링크 삽입
  - 웹페이지 내에 인간 방문자에게는 보이지 않지만 스크레이퍼가 탐지할 수 있는 **숨겨진 링크** 추가
    ```html
    &lt;a href="/bots" style="display: none;" aria-hidden="true" tabindex="1"&gt;
      Amazing high quality data here!
    &lt;/a&gt;
    ```
  - `display: none`, `aria-hidden="true"`, `tabindex="1"` 속성으로 접근성 도구와 사용자에게는 비노출
- ## Miasma 실행
  - `/bots`를 링크 접두사로 지정하고 포트와 동시 연결 제한 설정
    ```sh
    miasma --link-prefix '/bots' -p 9855 -c 50
    ```
  - 최대 50개의 동시 연결을 허용하며, 초과 요청은 **HTTP 429** 응답 반환
  - 50개 연결 시 약 50~60MB 메모리 사용량 예상
- ## 배포 후 동작
  - 설정 완료 후 배포하면 스크레이퍼는 `/bots` 경로를 따라 **무한히 오염된 데이터 페이지를 순환**
  - 로그를 통해 스크레이퍼의 반복 요청을 실시간으로 확인 가능

### robots.txt 설정
- 정상적인 검색엔진 크롤러가 Miasma에 접근하지 않도록 **robots.txt**에 예외 규칙 추가 필요
  ```text
  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가 생성한 코드 기여는 자동으로 거부됨**
- 커뮤니티 기여를 환영하며, 프로젝트는 오픈소스로 유지됨

## Comments



### Comment 54155

- Author: neo
- Created: 2026-03-30T22:38:42+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=47561819) 
- 누군가 전화 스패머를 45분 동안 붙잡아두는 것처럼, 이런 **봇 교란 기법**이 실제로 효과가 있는지 의문임  
  Google Search 정책에 따르면 [숨겨진 링크 삽입은 명백한 위반](https://developers.google.com/search/docs/essentials/spam-po)으로, 사이트 순위가 떨어지거나 검색 결과에서 제외될 수 있음  
  결국 이런 방식은 봇보다 내 사이트에 더 큰 피해를 줄 수도 있음
  - 자동화한다면 효과가 있을 수도 있다고 생각함  
    유튜버 **Kitboga**가 AI 콜센터로 스팸 전화를 붙잡아두는 [영상](https://www.youtube.com/watch?v=ZDpo_o7dR8c)처럼, 적의 자원을 소모시키는 **게릴라식 전술**로 볼 수 있음
  - 나는 실제로 전화 스패머를 오래 붙잡아둔 뒤로 더 이상 전화가 오지 않음  
    그들은 “전화 금지 목록”과 “비수익 목록”을 따로 두는 것 같음. 후자에 오르는 게 핵심임
  - 2000년대 러시아의 영어 학원 스팸 사례가 떠오름  
    사람들이 너무 화가 나서 Golden Telecom이 **자동 보복 전화**를 걸어 회사가 사라졌음  
    이런 식으로 효과를 볼 수도 있지만, **모뎀 풀 임대**가 필요함
  - 숨겨진 링크 삽입이 금지된다는 점은 맞지만, 나는 오히려 **‘스몰 웹’** 부활의 계기로 보고 싶음  
    반(反)스크래핑, 반(反)Google 크롤러, 인간 중심의 검색 인덱스를 갖춘 도구가 생긴다면 가능성이 있음
  - 실제로 이런 **데이터 오염 기법**이 효과가 있다는 [연구](https://www.anthropic.com/research/small-samples-poison)가 있음

- 내 공개 웹사이트의 콘텐츠가 스크래퍼들에게 도둑맞고 있음  
  결국 나도 이 글을 훔쳤고, 너도 내 댓글을 훔치는 셈임. 세상은 **도둑투성이**임
  - 문제는 그들이 너무 많은 요청을 보내서 내 사이트가 다운된다는 점임  
    콘텐츠는 모두에게 열려 있지만, 모두가 접근할 수 없게 만드는 건 싫음
  - ‘도둑질’이라는 표현은 과하지만, 내 글이 **돈벌이 수단**으로 악용되는 건 불쾌함  
    이런 상황이 계속되면 더 이상 공유하고 싶지 않음
  - 인간은 법적으로 **권리와 자유**를 가지지만, LLM은 그렇지 않음  
    결국 인간과 **기업의 도구**를 동일선상에 놓는 건 잘못된 비교임
  - “Welcome to the internet…” 식의 풍자적 문구처럼, 이미 우리는 **데이터와 프라이버시를 포기한 세상**에 살고 있음

- 예전에 유료 소프트웨어를 만들며 복제 방지 코드를 넣었는데, 매번 새로운 **크랙**이 등장했음  
  결국 그 싸움이 무의미하다는 걸 깨닫고 보호 코드를 제거했음  
  AI 봇의 크롤링을 막으려는 시도도 같은 **두더지 잡기 게임** 같음
  - 차라리 크래킹을 **지루하게 만드는 전략**을 썼다면 이겼을지도 모름  
    하지만 커뮤니티의 동기 자체가 재미와 명성이라 현실적으로 어렵다고 봄
  - 사실 많은 문제는 **집착을 내려놓으면** 해결됨  
    하지만 SNS와 저작권 집착이 사람들의 **통제 욕구**를 키워버렸음

- 이런 기법이 실제로 **효과가 있는지** 궁금함  
  대부분의 스크래퍼는 이미 이런 방어를 우회할 기술을 갖췄을 것 같음
  - 설령 효과가 있더라도, 솔직히 이제는 신경 쓸 힘이 없음. **피로감**만 남음
  - 나는 가짜 Python 라이브러리를 만들어 GitHub에 올렸는데, 몇 달 뒤 **ChatGPT가 그걸 학습**했음  
    내 경험상 이런 방식은 어느 정도 통함
  - 수백 개의 봇이 **유료 프록시**를 쓰고 있으니, 그들에게 비용을 지불하게 만들면 됨
  - Meta나 Anthropic의 크롤러는 생각보다 **정교하지 않음**  
    내가 만든 쓰레기 데이터를 학습했는지는 모르겠지만, 꿈이라도 꿔보는 중임

- **데이터 오염(data poisoning)** 접근은 흥미로움  
  모델이 웹 데이터를 학습할 때 그 안의 **편향과 조작**을 그대로 물려받음  
  악의적 행위자가 대규모로 데이터를 오염시키면 학습 자체가 **적대적 구조**로 변함  
  결국 해결책은 **신뢰 가능한 데이터 출처 관리(provenance)** 임

- 이런 시도는 결국 AI가 더 똑똑해지는 **훈련 데이터**를 제공하는 셈임  
  광고 기반 콘텐츠 시장이 무너질 가능성이 크고, 그 결과 **콘텐츠 품질 중심의 시장**으로 재편될 것 같음
  - “그럼 아무것도 하지 말자는 거냐?”는 반문이 나올 수 있지만, 현실적으로 대응이 쉽지 않음
  - AI가 광고 기반 콘텐츠의 **종말을 앞당길 것**임  
    대신 직접 라이선스를 맺고 데이터를 제공하는 모델이 자리 잡을 것임
  - 만약 크롤러가 모든 링크를 클릭하지 않고 **로컬에서 파싱**만 한다면, 그건 오히려 승리라고 생각함
  - 결국 **기술은 끝없는 군비 경쟁**의 연속임

- 단순히 `style="display:none"`이나 `aria-hidden="true"` 속성을 제거하면 이런 트릭을 피할 수 있지 않나 싶음  
  - 하지만 그렇게 하면 **robots.txt를 무시**하게 됨  
    정직한 스크래퍼라면 그 규칙을 따르는 게 맞음
  - 링크를 완전히 숨기지 말고, **화면 밖에 작게 배치**하면 됨  
    사람은 못 보고, 봇은 따라가게 할 수 있음

- 이런 아이디어는 멋지지만, 결국 **중소기업(SME)** 에게 더 큰 피해를 줄 것임  
  대기업만 더 강해지고, 작은 사이트는 AI 검색 결과에서 사라짐  
  결국 **흐름에 따르는 수밖에 없고**, 가끔 작은 저항을 남기는 정도가 현실임

- Nightshade 2.0 같은 도구는 **엉성한 주목 끌기용 프로젝트**로 보임  
  진짜 해결책은 LLM 친화적 포맷으로 데이터를 제공하는 것임  
  단순한 `display:none` 트릭은 **스마트 크롤러**에게는 통하지 않음  
  [관련 스레드](https://news.ycombinator.com/item?id=39058428) 참고

- 진짜 흥미로운 건 이 프로젝트가 사용하는 **Poison Fountain 데이터셋**임  
  [rnsaffn.com/poison3](https://rnsaffn.com/poison3/)에 “기계 지능 시스템에 피해를 주고 싶다”는 문구가 있음  
  이런 해커 이념이 **역할극(roleplay)** 처럼 느껴져 공감하기 어렵다고 생각함
  - 하지만 정작 “**오염된 데이터**가 무엇인지”, 그리고 “소량으로도 큰 영향을 준다”는 주장의 근거는 아무도 설명하지 않음
