애드블럭 종료 후 사이트를 이용해 주세요.

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AI 크롤러 차단해서 요금 폭탄 방지하기
    Tip 2025. 5. 25. 19:48
    728x90
    반응형

     

    ai.robots.txt logo

     

    최근 사내에서 Vercel의 요금이 평소보다 많이 나오는 문제가 발생해 알아보니 meta-externalagent이 범인이었습니다.

    meta-externalagent는 Meta의 AI 크롤러로 무분별한 크롤링으로 대용량의 트래픽을 발생시켜 요금 폭탄을 유발한 것이었습니다.

     

    이 글에서는  Meta의 meta-externalagent 뿐만 아니라 OpenAI의 GPTBot, Anthropic의 ClaudeBot, Google의 Google-Extended 등 다양한 Bot들을 차단할 전략을 다루겠습니다.

     

    우리의 경우 다행히 아웃바운딩 요금 폭탄만 발생했지만, Vercel 이미지 최적화를 사용하거나 할 경우 더 끔찍할 수도 있습니다!

    만약 차단을 안 해두셨다면 얼른 차단을 통해 서버 비용 폭증을 막기를 권장드립니다.

    1. robots.txt를 통한 크롤러 차단 방법과 효과

    가장 기본적인 대응으로, robots.txt 파일을 설정하여 크롤러의 접근을 제어할 수 있습니다.

    robots.txt는 원래 검색 엔진 등 선량한 크롤러들이 웹사이트의 크롤링 정책을 존중하도록 유도하는 표준입니다.

    사이트 루트에 이 파일을 두고 “어떤 User-Agent에 어떤 경로를 허용/차단” 형태로 규칙을 명시하면, 규정을 따르는 크롤러는 해당 지침에 따라 수집을 제한합니다.

     

    예를 들어 주요 AI 크롤러들을 차단하고 싶다면 robots.txt에 다음과 같은 규칙을 추가할 수 있습니다.

    User-agent: GPTBot
    Disallow: /
    
    User-agent: ClaudeBot
    Disallow: /
    
    User-agent: meta-externalagent
    Disallow: /
    
    User-agent: Google-Extended
    Disallow: /

     

    위 설정은 OpenAI의 GPTBot, Anthropic의 ClaudeBot, Meta의 meta-externalagent에 사이트 전체 크롤링을 금지합니다.

    또한 Google-Extended의 경우 Google 검색엔진은 그대로 허용하되 자사 생성형 AI 학습 용도로는 콘텐츠를 사용하지 않겠다는 opt-out 신호로 활용됩니다.

     

    하지만 robots.txt의 한계도 분명합니다.

    이는 어디까지나 크롤러 운영사의 자율 준수에 의존하는 장치이기 때문입니다.

    OpenAI와 Anthropic도 공식 입장으로는 "우리 크롤러(GPTBot, ClaudeBot)는 robots.txt를 존중한다."라고 밝혔지만, 실제로는 우회 수단을 동원해 차단을 무시하고 있다는 조사 결과도 있습니다.

     

    예를 들어 OpenAI는 GPTBot이 차단된 경우라도 ChatGPT-User 등 별도 사용자 에이전트로 (사용자가 챗봇을 통해 웹 검색 요청을 할 때) 페이지를 긁어오는 방식을 사용하고 있어 사실상 robots.txt를 회피한다는 지적입니다.

     

    Anthropic의 Claude 역시 유사하게 ClaudeBot 크롤러는 차단 시 제외되지만, 사용자가 입력한 웹 질의에 응답하기 위해 Claude-User 에이전트를 통한 개별 fetch를 수행하는데 이때는 사람의 브라우저 접근으로 간주하여 robots.txt 규제를 무시하는 것으로 알려져 있습니다.

    2. Vercel 환경: Firewall의 "AI Bots Deny" 설정

    Vercel은 WAF(웹 방화벽)의 커스텀 규칙으로 미리 정의된 "Block AI Bots" Rule Set을 제공하고 있습니다.

     Rule Set을 오픈소스 프로젝트인 ai.robots.txt의 데이터를 기반으로, 주요 AI 크롤러의 User-Agent 패턴을 모두 포함하고 있습니다.

    한 번의 설정으로 OpenAI의 GPTBot, Anthropic의 ClaudeBot, Meta의 Meta-ExternalAgent/Fetcher, Amazonbot, ByteSpider(바이트댄스) 등 수십 종에 달하는 AI 관련 봇을 식별하여 차단할 수 있습니다.

     

    Vercel 대시보드의 Firewall 섹션에서 Bot Protection에서 AI Bots를 Deny로 변경하면 실제 차단이 이뤄집니다.

    이 규칙을 활성화하면 해당 프로젝트로 오는 요청 중 AI 봇에 해당하는 User-Agent를 지닌 것들은 곧바로 403 거부 응답을 받게 됩니다. 

    Vercel의 분석에 따르면 이 AI 봇 차단 규칙을 적용만 해도 최대 트래픽의 20~30%를 차단하는 효과를 볼 수 있다고 합니다.

     

    만약 Vercel 환경이라면 AI Bots 차단 기능을 활성화하시는걸 강력 추천합니다.

    3. Cloudflare Bot Management 활용 (무료 vs 유료 플랜 비교)

    Cloudflare는 전통적으로 DDoS 방어와 봇 관리에 강점을 가진 CDN/보안 서비스로, AI 크롤러 문제에도 발 빠르게 대응하고 있습니다. 

    2023년 7월 Cloudflare는 "AI Scrapers & Crawlers" 차단 토글을 전 고객(무료 플랜 포함)에게 제공하기 시작했습니다.

     

    Cloudflare 대시보드의 Security > Bots 메뉴에서 "AI Scrapers and Crawlers" 옵션을 켜기만 하면, Cloudflare가 파악한 주요 AI 봇들의 접근을 원클릭으로 차단할 수 있습니다.

    이 목록은 Cloudflare 네트워크 전역에서 수집한 봇 지문(fingerprint) 데이터로 지속 업데이트되므로, 새로운 봇이 등장해도 자동으로 대응에 포함됩니다.

    플랜 AI 봇 차단 관련 기능
    무료 플랜 AI Scrapers & Crawlers 토글 제공 (원클릭으로 알려진 AI 크롤러 차단). 기본 Bot Fight Mode로 일부 악성 봇 자동 차단.
    Pro/Business Super Bot Fight Mode 사용 가능 – 세부적인 봇 차단 옵션 (예: 확실한 봇 차단, 의심스러운 봇 캡차 등) 설정 가능. WAF 사용자 지정 규칙 활용 가능.
    Enterprise 고급 Bot Management (ML 기반) – 봇 트래픽에 Bot Score 부여 (1~99 점수) 및 세밀한 대시보드 제공. Bot Score 기반 WAF 룰로 알려지지 않은 봇까지 차단 가능.

     

    Cloudflare 통계에 따르면 인기 상위 사이트일수록 AI 크롤러의 표적이 되기 쉬운데, 상위 10만 개 중 44.5%가 AI 봇에 트래픽을 받았고 그중 6.36%만 적극 차단하고 있었지만, 상위 10개 사이트는 80%가 AI 봇에 시달렸고 그중 40%는 이미 차단 조치를 취했다고 합니다.

    4. 서버단에서 AI 크롤러 식별 및 차단

    서버 차원에서 차단 규칙을 설정할 수 있습니다.

    예를 들어 Apache를 사용한다면 .htaccess 파일에 RewriteRule을 이용해 특정 User-Agent를 가진 요청을 아예 거부하거나 다른 페이지로 유도할 수 있습니다.

    ClaudeBot 트래픽을 겪은 사용자가 실제 적용한 .htaccess 예시를 소개하겠습니다.

    # .htaccess - ClaudeBot 차단 예시
    <IfModule mod_rewrite.c>
      RewriteEngine On
      # User-Agent에 "ClaudeBot" 문자열이 포함된 경우
      RewriteCond %{HTTP_USER_AGENT} "ClaudeBot"
      # 단, robots.txt 요청은 예외 (크롤러가 robots.txt는 볼 수 있게 허용)
      RewriteCond %{REQUEST_URI} !robots\.txt
      # Anthropic 홈페이지로 리디렉션 (혹은 [F]로 Forbidden 처리 가능)
      RewriteRule .* http://www.anthropic.com [R,L]
    </IfModule>

     

    위 규칙은 요청 헤더의 User-Agent에 "ClaudeBot"라는 문자열이 있을 경우, 요청 경로가 /robots.txt가 아닐 때 강제로 anthropic.com으로 리디렉트 하고 있습니다.

    이는 해당 크롤러에게 "우리 사이트에 오지 말고 너네 사이트로 가라"는 메시지를 줍니다.

    물론 이 대신 RewriteRule .* - [F]와 같이 403 Forbidden 응답을 주는 방식으로도 차단할 수 있습니다.

    Nginx의 경우 if ($http_user_agent ~ (ClaudeBot|GPTBot)) { return 403; } 같은 설정을 써서 유사하게 차단할 수 있습니다.

     

    마지막으로 어떤 방식으로 차단하면 좋을지 체크리스트로 마무리하겠습니다.

    1. Vercel이나 Cloudflare를 사용할 경우 AI Bot 차단을 활성화합니다.
      (Netlify와 같은 경우도 차단하는 기능이 있는 것으로 알고 있습니다.
    2. 만약 별도 호스팅을 사용한다면 robots.txt를 활성화합니다.
      (목록은 ai-robots-txt/ai.robots.txt: A list of AI agents and robots to block. 이 깃허브를 참고하시면 좋습니다.)
    3. 추가적으로 서버를 사용한다면 위에서 설명한 .htaccess나 서버 설정으로 트래픽을 아예 차단 처리합니다.
    4. 혹시 모를 누락 사태에 대비해 비용 알림 및 지출 한도를 설정도 꼭 잊지 말고 하시길 바랍니다.
    반응형

    댓글

Designed by Tistory.