時は2013年11月のこと。
我がレンタルサーバが酷く重くなってしまい、XoopsCubeへのログインもままならないのに気付いた。
元々は「banされているのを解除してくれ」というメールがきっかけだった。心当りの無い情報だったので早速調べようとしたところ、自分もログインできないほどの高負荷だったわけだ。うん、気付くの遅いよね。反省します。急いで対応します。
アクセスログを確認したところ、以前使っていた掲示板用cgiにDOS攻撃のようなPOSTが来ていた。どこかのサイトへのリンクを含んだSPAMのようだが、頻度や数が途方もない。これは「サイバー攻撃だ」と呼べるレベルのものだが、焦ったところで仕方は無い。使わないcgiを、リンクを切ったとは言え古いままで放置していた自分が悪い。
このcgiはテキストファイルを書き換えるタイプなので、ファイル読み書きが頻発することで負荷がかかってしまう。データベースにアクセスするタイプではないから、逆にWebサーバのみがやられることになる。とは言え、レンタルサーバだし同居しているユーザさんにも迷惑をかけてしまっていることだろう。
どうせ使っていないんだからと、まずはcgi本体をとっとと削除する。大量アクセスに対しては「404 Not Found」だけが返ることになり、負荷が一気に下がる。まずはこの状態で様子を見よう。
エラーが戻るようなら、SPAMアクセスもそのうち減ってくるだろう。
—- そして約半年が過ぎ —-
その後、高負荷状態は起きずサーバは安定を見せている。エラーログを確認したところ、それでもまだまだアクセスが来ている。人間だったら飽きているはずだけど、一度設置されたSPAMロボットが粛々と動き続けているんだろう。
ヒット数はかなり下がっているから、今度はエラーログが埋まらないように工夫をしてみよう。
ファイル名に合わせてApacheからエラーを返すようにすればエラーログには残らないようだ。ということで、mod_rewriteでステータス「410 Gone」を返すようにしてみた。掲示板cgiのファイル名は「keijiban」として.htaccessに反映したサンプルを書くとこんな感じだ。
RewriteEngine on
RewriteCond %{REQUEST_URI} keijiban [NC]
RewriteRule ^.*$ – [G,L]
実際には必ず同じURLめがけてくるわけでもないので、もうちょっと色んなパターンを置いてあるんだけどね。
[amazonjs asin=”4873111501″ locale=”JP” title=”Apacheハンドブック”]