3月末から1ヶ月間、当ブログのコメント欄を閉鎖していましたが、スパム対策を施しコメント機能を復活させました。
2004年7月にブログを開設して以来、特にスパムに悩まされることなくやってきたんですが、今年の3月上旬からものすごい数のスパムコメントが襲来。

しばらくは手動でコメントを削除していたんですが、2,3日で400件とか500件のスパムコメントが投稿されるので、とりあえずブログ単位でコメント機能を閉鎖して、見た目上は平穏な感じになりました。
ところが、今度はMovableTypeの管理画面にログインするとエラーが起きるようになりました。
CGIWrap Error: Real UID could not be changed!
最初はMTの管理画面でページ遷移する時の数回に1回程度だったのが、だんだんと頻度が上がり、ページの再読み込みをしてもエラー画面のままという事態に。
ブログ記事を保存するのも、再構築をするのも、とにかく全部エラーになるので仕事になりません。
調べてみると、SSIの負荷に拠るものだとか出てきたんですが、なんのことだかさっぱり。
MovableTypeから生成されるページではSSIを利用しているのですが、管理画面には関係ないはず。
見た目上は、スパムコメントは投稿されなくなっているし、さっぱり原因がつかめないまま同じサーバにインストールしてある他のMovableTypeにログインしてみると、こちらも同じような状態。
さらに、他のサーバにインストールしてあるMovableTypeにログインしてみたら、こちらは特に問題なく動いています。ここまで来て、ようやくサーバのアクセスログをチェックするに至りました。
私はCORESERVERを利用しているのですが、アクセス統計の「アカウント負荷率」を見ると、3月1日の時点で数千ポイントだったのが、3月末には10万ポイントを超える日も。
多分、ブログのコメントを閉鎖してもmt-comments.cgiはアタックされ続けているんだろうと理解したんですが、かといってどんな対策をしたものか見当もつきません。
とりあえず、システム全体のコメントを閉鎖することにしました。
結論から言うと、システム全体のコメントを閉鎖することで、なんとか状況は落ち着く方向に向かいました。
もちろん、その作業自体も困難を極めましたが・・・
コメント閉鎖の代替策として、facebookコメントを導入してみたりしましたが、根本的な対策法の方向性をシックス・アパートの金子さんにお聞きしたので、その方法について調べてみました。
前置きが長くなりましたが、参考にさせていただいたのはこちらのサイト
Open MagicVox.netがオススメするMovableTypeスパム対策まとめ:Open MagicVox.net
対策の内容としては以下の通り
- コメント投稿スクリプトのファイル名変更
- コメント投稿スクリプトのファイル名隠蔽
コメントへのCaptchaはMovableType既定のものを使っているので導入済みとします。
また、Captchaはコメントのスクリプトが起動した後でスパムを排除するらしいので、きちんと機能してスパムコメント排除できていてもサーバへの負荷は高いという状況が起こり得ます(今回の私のように)。
コメント投稿スクリプトのファイル名変更
MovableTypeのコメントはデフォルトでmt-comments.cgiというスクリプトファイルで受け付けられます。
まずはこのファイル名を自分の好きな名前に変更します。
このファイルはMovalbeTypeをインストールしたディレクトリの直下にあります(mt.cgiと同じ場所)。
例えば、hoge-post-komento.cgiみたいな感じで。
そしたら次は、MovableTypeの設定ファイル(mt-config.cgi)を編集し、以下の行を追加。
CommentScript hoge-post-komento.cgi
保存したら、サーバに上書きアップロードして、これでこの作業は完了です。
コメント投稿スクリプトのファイル名隠蔽
コメント投稿スクリプトのファイル名を変更するだけでは不充分です。
なぜなら、コメント投稿フォームのソースには、変更後のコメント投稿スクリプトのファイル名が記載されてしまうからです。
そこで、JavaScriptを使ってファイル名がスパムボットから見えないように隠蔽します。
まずは、コメントのテンプレート編集画面に移動(デフォルトテンプレートでは「コメント」テンプレートモジュール)。
デフォルトテンプレートでは59行目に
<form method="post" action="<$mt:CGIPath$><$mt:CommentScript$>" name="・・・
と記載されています。
ここをaction=""と編集します。
さらに、</form>タグの下、100行目に
<script>
document.comments_form.action = "<$MTCGIPath$><$MTCommentScript$>";
</script>
<noscript>
コメントを投稿するにはJavaScriptを有効にしてください
</noscript>
を追加して保存します。
しばらくこれで様子を見ることにします。

コメントする