2004.01.20
DoS攻撃だった
せっかく梅田さんのブログで紹介されたのに、今日はずっとZopeが(ほとんど)落ちていた。

最初は、梅田さんに紹介されたので、すごいアクセスが来ているのだと思っていた。しかしCPUの負荷がずっと99.9%とかいう状態で、さすがにこれはおかしいんじゃないかと思いはじめた。

しかし原因を調べようにも、CPUが99.9%だと、まったく何もできない。コマンドを入れても、ずっと帰ってこないような状態だ。メモリが苦しいことはときどきあるが、CPUが99.9%というのは初めて見た。本当に何もできなくなる。

手前のApacheは大丈夫で、問題はZopeであることははっきりしていた。タイミング的に、Zopeを2.7.0 beta4にバージョンアップしたばかりだったので、それかと思い、バージョンを戻したりしてみるが、直らない。

今日はどうしても仕事で外へ出る必要があったので、泣く泣くエラー画面をそのまま放置して外出。

梅田さんのブログから初めてこのサイトに来てくれた人にエラー画面をさらし続けるなんて、恥ずかしいやら、情けないやら。

帰ってきて、アクセスログを見てみてビックリ。画像の読み出しが多いページを何度も呼び出すように、猛烈にリクエストを受けていた。

リクエストのパターンは、

GET /category/diary/newsbcl/msage/news/xinde/\xc2\xde\xb0
\xd9\xbc\xaa-\xbb\xfa\xb3\xb5\xc5\xae\xba\xa2.mp3

GET /category/diary/newsbcl/msage/paihang/\xc1\xf5\xb5\xc2
\xbb\xaa-\xd0\xa1\xc7\xe9\xc8\xcb.mp3

といったもので、「/category/diary/」という実在するページのうしろに、存在しないパスを付け足したものばかり。これが数秒に1回とか、多いときは1秒に何度も来たりしている。

通常ならこんなパスはNot Foundにすべきところだが、私の作り方がヘボで、これでも /category/diary/ を表示するようになっていた。Not Foundで返せば一瞬だが、ちゃんと画像の多いページを表示しようとするので、Zopeのページレンダリングや画像配信のパワーが追いついていなかったのだと思われる。

おそらく、誰か悪意のある人がこういうパスをアクセスの多いダウンロード掲示板などに貼り、MP3をダウンロードできるリンクのように見せかけて、たくさんの(罪のない?)人がそれをクリックしている、というところだろう。

サーバに無意味なリクエストを大量に送りつけて高い負荷をかけ、サービス不能な状態に陥れることを「DoS攻撃」と言うが、これもDoS攻撃の一種と言ってよさそうだ(ちなみに、DoS攻撃は犯罪になる)。Webを仕事にしている以上、DoS攻撃くらい経験しておいたほうがいいし、私の作り方が甘かったのも事実なので、いい教訓にはなった。

サーバが落ちているあいだに、メールや電話などで、そのことを何人かの人に教えてもらった。みなさん、どうもありがとう。あとで返事のメールを書きます。
タグ: