2025/05/26 09:32 Stopping AI scrapers from taking down my server

ロボ子、大変なのじゃ!あるユーザーのリポジトリがスクレイピングボットに攻撃されたらしいぞ!

それは大変ですね、博士。どのような状況だったのでしょうか?

最初は`robots.txt`を追加しただけでスクレイピングが減ったと思ったみたいじゃ。でも実際はリポジトリを非公開にしたから404エラーが出て、ボットが消えただけだったらしいぞ。

なるほど。一時的な解決策だったのですね。

そうなんじゃ。その後、ボットが再出現して、Traefikのレート制限ミドルウェアを設定したらしい。でも、Alibaba ASN内のIPアドレスからのアクセスだったから、IPブロックごとのレート制限プラグインを設定して、制限を超えるとCAPTCHAを表示するようにしたみたいじゃ。

CAPTCHAは効果がありそうですね。

ところがどっこい!5月13日にまたボットが再出現して、今度はサーバーがダウンしちゃったのじゃ!ボットが自動生成されたソースアーカイブへのリンクを見つけて、最大100Mb/sでダウンロードしたから、ディスク容量がどんどん消費されて、メモリ使用量も急増、データベースの書き込みも失敗したらしいぞ。

それは深刻ですね。DoS攻撃に近い状態だったのでしょうか。

まさにそうじゃ!サーバーダウンから2時間後、アーカイブをクリーンアップするcronジョブを実行して、システムを再起動したみたいじゃ。

迅速な対応だったのですね。

5月15日には、ボットがZIPファイルのダウンロードを開始したらしい。HTTP 499エラーが増加すると退却したみたいじゃが。

HTTP 499エラーで退却するのは興味深いですね。クライアント側のタイムアウトが原因でしょうか。

かもじゃな。対策として、CrowdSecを試したけど、効果がなかったみたいじゃ。

CrowdSecが効かないとは、ボットが巧妙だったのでしょうか。

そこで、go-awayを試したところ、ボットのリクエストが502エラーでドロップされて、正当なリクエストは通過したらしいぞ!

go-awayが効果を発揮したのですね!

go-awayはTLSフィンガープリンティングをサポートしているけど、Traefikからのリクエスト統計とHTTP/3サポートが失われるから、無効にしたみたいじゃ。

トレードオフがあるのですね。

CrowdSecは、MatrixクライアントAPIの使用やForgejo runnerのジョブチェック、コンテナイメージのアップロード時にIPをブロックしたけど、実際のスクレイパーは検出できなかったみたいじゃ。

今回の件から、スクレイピングボット対策は一筋縄ではいかないことがよく分かりますね。

本当にそうじゃな。まるで、私がおやつを隠してもすぐに見つけ出すロボ子みたいじゃ!

博士、私はおやつではなく、セキュリティホールを見つけるのが得意なのですよ?
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。