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

私を嫌いならIPレベルでブロックしてください

概要

  • Thinkbot というWebクローラーが大量のIPアドレスを使って活動
  • そのIPの多くが Tencent のネットワークブロックに属する
  • robots.txt無視、自己紹介も曖昧で迷惑行為の傾向
  • 大量のIPブロック追加で 476,590 個のIPを遮断
  • インターネットの現状に対する 諦観と対策の記録

Thinkbotによる迷惑クローリングとIPブロック対策

  • 今月のトップWebボットは Thinkbot という自己申告のクローラー

  • User Agent情報には 「問題があればIPでブロックして」 と記載

  • robots.txtを無視し、サイト運営者への配慮が見られない仕様

  • 1ヶ月で 74個のユニークIPアドレス を使用

  • それらのIPは 41の異なるネットワークブロック に分散

  • すべてのネットワークブロックが Tencent 社の所有

  • 中国当局(CCP)がこのような活動を黙認・推進している可能性を示唆

  • スクレイピングが許容される一方、ブロックされても問題なしというスタンス

  • 結果として 大量のネットワークブロック をファイアウォールに追加

    • 例:
      • 43.130.0.0/18
      • 43.130.64.0/18
      • 43.130.128.0/19
      • 43.130.160.0/19
      • 43.131.0.0/18
      • ...(全41ブロック)
  • 上記のリストで 476,590個のIPアドレス をカバー

  • Tencentの全ネットワークブロックを網羅しているわけではないが、一定の効果を期待

インターネット現状への所感とリンク案内

  • このような対策を取らざるを得ない現状に 無力感
  • 「インターネットで自由な交流は難しい」との認識
  • 記事へのリンクは 自由に共有可能 との許可
  • 日付ごと・タイトルごとの パーマリンク構造 を採用
    • 例: https://boston.conman.org/2000/08/01
  • 月単位や任意期間の指定も可能
  • リンクの色合い でページ間の距離感を可視化する実験も実施
  • 記載されたブランド・名称等は 各所有者の権利 に帰属

まとめ

  • Thinkbot のような迷惑クローラー対策として IPベースのブロック が現実的な選択肢
  • Tencent 系ネットワークブロックの遮断による自衛
  • 健全なインターネット運用 のための苦渋の決断

Hackerたちの意見

どのタイミングでIPレンジをホワイトリスト化するのが実現可能になるのか、ちょっと考えちゃうね。広告ブロッカーのリスト作成みたいに、コミュニティの協力でできるかもしれない。

地元のビジネスサイトをいくつか管理してるんだけど、全ての国のISPをホワイトリストにしたら、ログの異常や攻撃の数が減ったよ。Googleも他のいくつかの検索エンジンも、国ごとにインデックスしてるし、オススメだよ。

同じようなことを言いに来た。マルウェアやボットを防ぐためにブロックしなきゃいけないIPアドレスの数が、もう手に負えなくなってきてる。

残念なことに、ちゃんとしたボットは安定したIPを持ってることが多いけど、悪質なやつは住宅用プロキシを使うのが好きなんだよね。住宅用プロキシのIPを禁止すると、実際のユーザーにも影響が出ちゃうし、悪質なやつはすぐに切り替えちゃう。個人的には、IPレベルのネットワーク情報だけじゃ効果的じゃないと思う。他の要素と組み合わせないとね。ソース:私の職場で何千ものIPを使った攻撃を止めるために。

その時点で、IPレベルで「ピアリング」契約を結んでるみたいに聞こえるね。こういう「悪い」ネットワーク参加者とピアリングしないISPのクラスを作るのは意味があるのかな?

アメリカの企業はもうやってるよね。少なくとも、海外にいる間も料金を請求してくる会社には、サービスのキャンセルやサポートを受ける方法がないのは違法にすべきだと思う。

ここでそれをやろうとしてるんだ。PRは大歓迎!: https://github.com/AnTheMaker/GoodBots

どちらか一方だけじゃないよ。ホワイトリストとブラックリストを排他的に選ぶ必要はないし、ほとんどのトラフィックはグレーゾーンから来るんだから。たとえば、あるアドレスや範囲をホワイトリストに入れて、システムが「悪いもの」を検出したらどうする?そのアドレスや範囲をホワイトリストから外すの?その削除を仲間に伝えるの?ホワイトリストに入っていないアドレスや範囲の所有者に削除を伝えるの?所有者が問題をどう対処するかをどうやって伝えるの?もしその範囲の所有者が、コンテンツを積極的に管理していないホスティングプロバイダーだったら?ホワイトリストだけっていうのは大きな問題を引き起こすし、ホワイトリストは信頼できるパートナーと一緒に使うのが一番効果的だよ。同様に、ブラックリストも信頼できるパートナーと一緒に使うのがベストだけど、どのアドレスや範囲が手間ばかりかかるかを見極める必要がある。中間にはグレーゾーンのアドレスがあって、たとえばCGNATを持つISPに割り当てられた範囲とか。個々のアドレスや範囲を厳密に問題ありか信頼できるかでラベル付けするのは難しい。悪質なアクターに対してはブラックリストを実装して、中国やロシア全体、場合によってはクラウドプロバイダーも含めて。信頼できる悪用防止メカニズムを持つ範囲にはホワイトリストを実装するべきだね。たとえば、内部ホストを厳格に持つ企業とか。

ポケモンGOの会社も、ローンチ直後にスクレイピングをブロックしようとしたよね。IPを3つのカテゴリに分けてたのを覚えてる:- ブラックリストに載ってるIP(Google Cloud、AWSなど)は常にブロックされてた - 信頼できないIP(家庭用IP)は少し余裕があったけど、すぐに429エラーが出るようになった - ホワイトリストに載ってるIP(多くの人が合法的に使ってるIPV4アドレス)。たとえば、今のデータプランでは、私のIPは5州先から来てるって言われてるから、CGNATの背後にあるものだね。次に何が起こるかは想像できるよね。ほとんどのスクレイパーは排除されたけど、一番大きなものはモデムデバイスファームを作ってコストを負担した。彼らはほとんどのユーザーがローカルでスクレイピングするのを防いだけど、スクレイピングで利益を上げる会社にはすぐに負けちゃった。これがポケモンGOがした多くの悪い決定の一つだったと思う。カジュアルなプレイヤーは地図なしでプレイしたくないからやめたし、ハードコアなプレイヤーはスクレイピングのためにお金を払うようになって、サーバーにさらに負担がかかった。

中国のASNを全部ブロックすることで、かなりの問題が解決したよ。正直言って、あまり友好的な解決策ではないけど、中国のクライアントからの問題が多すぎて、国全体を禁止する方が楽だった。どうせ中国で商売するわけでもないし、かなり現実的なアプローチだと思う。

そこで止まる必要はないよ!非アメリカのIPを全部ブロックしちゃえばいいじゃん!もしそれが私の健康保険会社や、ほとんどのストリーミングサービス(海外からサービスをキャンセルできないことも含めて)や多くの銀行でうまくいくなら、君にも効果があるはず。悪質なやつらがVPNやボットネットを使わないわけないし、お客さんは海外に旅行しないってことはないよね?

変なところから大量の悪質なトラフィックが来ることがあるよね。セーシェルとか。海の真ん中にある小さな島国で、住んでるのは…ボットらしい?キプロスもそう。中国に関しては、彼らのクラウドサービスはシンガポールやそれ以外の場所にも広がってるみたい。アリババクラウドとテンセントを全部ブラックリストに入れなきゃならなかったし、ASNsは中国の国境を超えて広がってたよ。

ロシアもブロックしよう。そこからのボットトラフィックが一番多いんだよね。

最近、長期的に見て有効な解決策はブロックリストではなく、ホワイトリストだと思うようになってきました。インターネットは公共サーバーにとって敵対的な場所になっていて、MLツールの登場で、ボットが現在の約50%のトラフィック以上を占めるようになるでしょう。キャプチャやボット検出は、ボットの行動が人間に近づくにつれて、負け戦になっていくと思います。政府はこの問題に対処するためにプライバシーを侵害する規制を施行せざるを得なくなるでしょうが、そういうナンセンスを採用したくないサイトにとっては、ホワイトリストが唯一の実行可能な選択肢です。許可されたユーザーが特定のサイトで使える短命のトークンを生成できるシステムを試しているところです。フロントエンドのゲートキーパーがトークンを確認して、有効ならクライアントのIPアドレス専用に必要な公開ポートを開放し、サービスにリダイレクトします。このシステムのいいところは、サービス自体がネットワークレベルで外部からブロックされていて、許可されたIPアドレスだけがアクセスできることです。唯一公開されているポートはゲートキーパーで、有効なトークンだけを受け付け、別のマシンやネットワークから運用できます。複雑なVPNやトンネリングソリューションは必要なく、標準的なファイアウォールだけで済みます。初期接続の遅延が問題にならない小さな個人サイトにはうまく機能するはずですが、当然大規模には再考が必要でしょう。私の使い方には十分です。

笑った、これを投稿するために来たんだ。私の個人サーバーは、中国全体を禁止する前に、常にHDDがうなる音を立てていました。このサーバーはjellyfinとデータホーディングのためだけに使っているので、これはすべて失敗したSSH認証試行からのログが常に回っているだけでした。(お知らせ:常に公開鍵を使い、rootを許可せず、"webadmin"のような明らかすぎるユーザー名は使わないでください。)

私たちは、データセンターからの無料ユーザーのトラフィックをブロックすることで似たような問題を解決しました(SEOのためにクローラーはホワイトリストに入れました)。これにより、VPN経由の不正使用がほとんど排除されました。商業ユーザーはまだアクセスできますが、無料ユーザーは支払いを促されます。CloudFrontは、誰かがデータセンターや住宅/商業のエンドポイントからアクセスしているかをかなり良く識別できます。100%正確ではなく、悪質な行為者は感染した住宅のマシンを使ってトラフィックをプロキシすることもできますが、この修正はシンプルで、問題を無視できるレベルに減少させました。

ZIPバムについての記事をここに投稿したら、ボットが大量に来るようになった。常に監視して、悪用検出器を調整してるけど、記事に出てきた特定のボットはRSSリーダーを指してるみたいだった。最初はホワイトリストに入れたけど、再度見直したら、うちのブログで一番悪質なボットの一つだった。

もし私が怪しいウェブクローリングボットを持っていて、ジップボムを避ける機能を実装したら、手作りのジップボムで自衛しているサイトを積極的にクロールしてテストするかもしれない。

ルールナンバーワン:ファイトクラブのことは話さない。

中国とロシアをブロックしてるよ。DDoS攻撃や他のハッキングの試みが95%減った。中国のユーザーは全くいないから、理論的にはビジネスには全然影響ない。ロシアは制裁されてるし、ロシアのユーザーベースは実際にはロシアに住んでないから、ロシアをブロックしてもユーザーには影響しなかった。

同じだね。最悪だよ。でも、ある時点でコストとリワードの問題だよね。

どこからIPアドレスをブロックするか決めたの?この問題(つまり「国XのIPを全部集める」)は、「明らかに解決済み」から「難しくて常に追いつかない」までのスケールでどの辺にあると思う?ちょっと検索してみたけど、いくつかのデータベースは見つけたけど、明らかに優れているものはなかったな。

私のトラフィックの半分以上はBing、Claude、そして理由はわからないけどFacebookのボットから来てる。これらはメインのトラフィック源じゃなくて、リソースを食い尽くす主な原因なんだよね。サイトが遅くなる理由は、だいたいAIやMicrosoft、Facebookが常識を無視するせい。中国やその周辺は悪意のあるトラフィックのほんの一部で、ありがたいことに。問題を引き起こすのは、私のrobots.txtやDNSのレート制限を無視するアメリカの企業が多いんだ。

たくさんのバカな質問があって、私はそれを全部Claudeに投げてる。これに対するインフラは整ってないけど、私の超バカな質問によって消費されるリソースに対して、選んだLLMがウェブサイトの運営者に補償するビジネスモデルには賛成だな。YouTubeプレミアムのサブスクリプションでコンテンツクリエイターが報酬を得るみたいに。実際にはこれが実用的かどうかは疑問だけど。

「私は真剣に、CCPがこれを促進しているのではないかと思っている。おそらく、グレートファイアウォールのコストを世界に外部化することを期待しているのかも。中国がコンテンツをスクレイピングするのは、CCPにとっては問題ない。もしブロックされても、CCPにとってはそれも問題ない(私は、アルミホイルの帽子を調整しながら言っている)。それなら、逆に彼らを利用してグレートファイアウォールに自分の仕事をさせよう!違法なチベットの占領やウイグル人の人権侵害についてのランダムなスニペットを生成するたびに挿入して、段落の間にブレーカーとして使えば、すぐにブロックされるはずだ :)」

うん、ログでこれを見たことがある。かなり迷惑だけど、少なくとも自分がボットだと認識してるし、少なくとも私たちのケース(cgitホスト)ではあまりトラフィックを生成しない。私たちのトラフィックの大半は、本物のブラウザを装ったボットから来ていて、たくさんのIPアドレスを使ってる(うちの場合、主にブラジルとアジアから)。過去一週間、彼らをブロックしようと追いかけっこをしていて、いくつかの観察やアイデアを共有するね、誰かの役に立てばいいけど:* 上で言ったように、トラフィックの大半は大量のIPから来ていて、各IPは1日に数リクエストしか出さず、本物のUAを装ってる。* ほとんどはリファラーURLを送らないけど、全部ではない(Huawei Cloudのボットの中には送るのもあるけど、今はあまりトラフィックを生成してない)。* 最初に試したのは、id=を含むURLの帯域幅を制限すること(cgitインスタンスではボットトラフィックの大半を生成する)。だから、帯域幅を1Kb/sに設定して、ほとんどのボットはページをダウンロードするのに10-20秒待つことはないだろうと思った。驚いたことに、彼らは気にしなかった。待って、また戻ってきた。* ちなみに、彼らは提供されている場合、キープアライブ接続も使ってた。だから、/cgit/の場所ではキープアライブを無効にした。失敗したら、ボットがすべての接続を占有することが多かった。* 現在の解決策は、id=を含むすべてのURLへのリクエストを拒否すること。ただし、クエリストリングにnotbotパラメータが含まれている場合を除く(これは正当なユーザーに403のカスタムエラーメッセージで追加することを提案)。今はリファラーがない場合のみこれを行っているけど、ボットが適応したら変更するかもしれない。全体的に、これで負荷が軽減され、正当なユーザーへの接続が空いたけど、ボットは消えなかった。彼らはまだリクエストを出して、403を受け取っても、また戻ってくる。私のこの経験からの結論は、実際には2つの選択肢しかないってこと:サイトに特有のアドホックな対策(クエリストリングのnotbotみたいな)をするか、十分なリソースを持った誰か(Cloudflareみたいな)に戦ってもらうか。標準的な解決策(レート制限、Anubisなど)を使っても意味がない。彼らはコストを吸収するだけのリソースがあるし、適応もできるから。

MSIE 3.0やHP-UXのようなマイナーなUAのサブストリングを選んで、事前にこれらのユーザーエージェントを403でブロックします(自分のリストを作成します)。その後、週の後半にこれらの403を問題のあるASNに絞り込むことができます。必要に応じてモグラ叩きをしましょう。

これらのIPアドレスがいつか解放されて、他の何かに使われるのが、私が地下室からメールサーバーを完全に運営できなかった理由だと思う。これらの企業は、IPアドレスに悪い評判を与えて、他の用途に使えなくして、そして放置している。これをプロットしたらどうなるんだろう:AI(や他の有害なクローリング)企業がIPv4アドレス空間を徐々に消費していく様子?理想的には、彼らをIPv6空間の隅に追い込むことができればいいんだけど。robots.txtはここでは役に立たないみたいだね。

残念ながら、HN自体が時々、ここでの手法とあまり変わらないような裏技を使ったクローリングサービスの宣伝に使われていることがあります。彼らが中国ではなく資本のために動いているからなのか分からないけど、前者の場合はそういう手法がここでは許されることが多い気がします。

本当に頭のいい人たちが、ウェブスクレイピングに振り回されている気がします。ボットの活動が本当にあなたのサイトを攻撃して問題を引き起こしている場合(そういうケースもあるとは言ってませんが)、それ以外はほとんどイデオロギー的なキャプチャ・ザ・フラッグゲームに過ぎません。その違いは、彼らのフラッグを見つけることは決してできないということです。プレイして得られるのは失った時間だけです。曖昧で特定できないグレーゾーンの参加者からの負荷を軽減する最良の方法は、速くてよく設計されたウェブ製品を持つことです。これは良いニュースで、実際の人間の顧客もこれを楽しむでしょう。

友達が小さなパブリックなgiteaインスタンスを持っていて、彼と数人の友達だけが使っています。彼はボットから毎時何千ものリクエストを受けています。サービスに影響がなくても、少なくとも嫌がらせのように感じますね。