世界を動かす技術を、日本語で。

小さなツールを多数使ってボットを積極的に排除する

2025年5月31日原文(lambdacreate.com)

概要

個人運営サイト大手ボットの大量アクセス によりリソース逼迫 Zabbix 等のモニタリングで異常検知と影響分析 nginx・Fail2Ban によるアクセス制限と自動BANの実施 ログ解析ツール (lnav, goaccess)で攻撃元やパターンを特定 人的アクセス重視 の姿勢と今後の防御体制強化

サイト運営者の苦悩とボットによる被害

  • 小規模な個人サイト に突然の大量アクセス発生
  • 通常は歓迎する来訪者 だが、今回は 悪質なボット によるデータスクレイピング
  • Archive.org のような善良なクローラーは歓迎姿勢
  • Amazon, Facebook, OpenAI など大手企業のボットが自己都合でアクセス
  • AI学習や広告配信 など企業目的の大量データ取得
  • 人的な読者 を大切にしたいという運営方針

異常検知と初動対応

  • Zabbix によるサーバリソース監視で異常を早期発見
  • ディスク使用量急増CPU・メモリアラート の多発
  • Giteaインスタンス のデータ肥大化とリソース圧迫
  • 一時的なサービス停止 やZFS拡張で応急対応
  • 従来のクリーンアップだけでは不十分 と判明

ログ解析による原因特定

  • lnav でnginxアクセスログをSQLライクに解析
    • ユニークIP数リファラーUser-Agent で傾向把握
  • goaccess で過去ログも含めて詳細分析
    • リクエスト数・頻度・ターゲットURL の可視化
  • Amazonbot, OpenAI, Applebot, Facebook など明示的なボット
  • User-Agent偽装 や連続アクセスも多数確認
  • 人的アクセス阻害 につながる深刻な被害

nginxによる即時対策

  • User-Agentによるフィルタリング で悪質ボットを403拒否
    • mapディレクティブでブラックリスト化
  • リクエストレート制限 で過剰アクセスを抑制
    • limit_req_zone/limit_req設定
  • 設定例
    • if ($badagent) { return 403; }
    • limit_req zone=krei burst=20 nodelay;
  • 403対応でも完全解決せず :リクエスト自体の処理負荷は残る

Fail2Banによる自動BANの導入

  • nginxログの403判定 でFail2BanによるIP自動BAN
  • 24時間BAN で再発防止
  • 設定例
    • [nginx-forbidden] enabled = true port = http,https logpath = /var/log/nginx/access.log bantime = 86400
  • 正規表現で403アクセスを検出 し即BAN
  • 数百件規模のBANリスト が生成されるほどの被害規模

まとめと今後の展望

  • 個人運営サイト でも 大手ボットの影響 は甚大
  • 人的な読者 を守るためには 多層防御自動化 の両立が必須
  • ログ監視・アクセス制御・自動BAN の組み合わせが有効
  • AI・大手企業のスクレイピング問題 は今後も継続的な課題
  • 自分のインターネット空間を守る意識技術的対応力 の重要性

Hackerたちの意見

AIクローラーボットが正直にUser-Agentヘッダーを記入してくれるのはいいけど、そんなにトラフィックがあったのには驚いた。99%のウェブサイトはそんなに頻繁に更新されないから、こんなにトラフィックがあるのはおかしいよね、開発ブログなんてなおさら。

彼らはrobots.txtも尊重してくれます。ただ、ブロックされた後に、住宅用IPからブラウザのユーザーエージェントでクローリングを始めるという報告も見たことがあります。でも、最初から誰かが自分のクローラーをOpenAIやAmazon、Facebookなどとして偽っている可能性もあります。

tirrenoのクリエイターです。私たちのプラットフォームは主にライブでログインしているユーザー向けに設計されていますが、ボットの検出やブロックにも効果的です。IPアドレスの最後のオクテットをアスタリスクに置き換えることで匿名化して、同じサブネットを一つのアカウントにまとめています。これにより、特定の条件(例えば、過剰な500や404エラー、ブルートフォースログイン試行、データセンターIPからのトラフィックなど)に基づいて自動的にブラックリストを生成するためのルールエンジンを使うことができます。最後に、tirrenoのブラックリストAPIをアプリケーションロジックに統合して、不要なトラフィックをエラーページにリダイレクトできます。ボーナスとして、アクティビティを監視し、正当なユーザーをブロックしないようにブラックリストを微調整するためのダッシュボードもあります。

同じダッシュボードを通じて、公開されているIPレンジに基づいてボットをブロックする作業も進めています。何か提案があれば大歓迎です。

IPアドレスの最後のオクテットをアスタリスクに置き換えることで匿名化して、同じサブネットを一つのアカウントにまとめています だから、ユーザーとしては、「データセンターIP」に基づく誤検知でブロックされるのは我慢しなきゃいけないし(要するに、情報漏洩しているラストマイル接続からナイーブにブラウジングしていないものはほとんど)、もし運良くブロックされていないものを見つけられたとしても(87個の信号機をクリックするのに成功したとしても)、全く関係ない隣接アドレスと一緒に lumped されて、個人情報を非同意で処理しているユーザー監視システムを作っていないという良心を満たすことになるんだよね。お客さんが本当にお金を失っていることが見えるフィードバックプロセスをちゃんと用意してほしい。

CGNATに移行してるISPにどう対処してる?IPが実際には何百人ものユーザーを表す可能性があるんだけど。

これらのボットのせいで、サーバーのログをオフにしました。彼らは本当にしつこくて、すべてのフォームを埋め尽くしたり、サイトをクリックしないとアクセスできないAPIにまでアクセスしてきます。AnthropicやOpenAI、Facebookは今でもスクレイピングを続けています。

サイトをクリックして回らないとアクセスできないAPIにまでアクセスする どうやって?

ウェブサイトをクリックするためだけに使えるAPIにアクセスしているクローラーについて、情報を共有してもらえますか?それと、UIの一部か何かで、人間だけが押すべきもので、他にそのAPIにアクセスする方法はないってことですか?今はAIエージェントが存在するから、もし彼らが人間のパターンを真似ていたら、実際のユーザーとボットを見分けるのはほぼ不可能です。

著者が「もう気にしない」と言っているのは分かるけど、禁止されたIPの中にGoogleやripe.net、semrushがあったのを見たよ。これらの中で、Googleを禁止するのは絶対におかしいし、他のも多分禁止しないだろうな。他の人に見てもらいたい、話してもらいたいなら、公開サイトを持つ意味がないよね。モーテルの看板の明かりを消しておいて、人を呼び込むのは良い方法じゃないよ。

Semrushは長い間、様々なレベルの無能さでひどい行動をしていたから、少なくとも8年前から私のrobots.txtファイルに特別なメモがあって、最終的には法務部に注意を向けさせることができた。私や私の潜在的なユーザーにとって、'SEO'企業が実際の訪問者を妨げるのを許すことに何の価値も感じない。Semrushの競合他社も同じくらいひどかった。現在のAI関連のナンセンスも非常に質が悪い。少なくとも一つの有名なケースでは、法務部やPR部門に法的な通知を送らなければならず、技術的な対策も講じて、ある程度の品位を取り戻さなければならなかった。

ボットのリクエストがかなりの帯域幅、メモリ、CPU、ディスクスペースを消費してるからだよね。イントロでも言ってるけど、単に失礼だし、そんな風にハーベスターにトラフィックを提供する理由なんてないよ。GoogleもAIスクレイパーを運営してるから、それが見たものかもしれないね?

Hacker Newsで議論の続きを見る