先日、このブログがスパムの被害に遭いまくっている事が分かり、何かしらの対策を打たなくてはならないと思ったので、対策をしてみることにした。調べてみるとMT3.2以降にはIPアドレス指定でコメント&トラックバック拒否する機能が実装されているらしい。項目を探しまくったが見つからず、もう一度調べてみたら、mt-config.cgiに手を加えれば項目が表示されるようになると言う事がわかった。
ついでにというか更に突っ込んで対策するため、「AutoIPBan」というプラグインを使わせていただくことにした。こいつを利用すれば、MTのテンプレート機能から.htaccessを生成させることが出来て、Apacheでアクセス拒否できるようになる。
まずは、mt-config.cgiに手を加えて、IP拒否リストを表示させる事にする。具体的には同ファイルに一文を追記するだけでOKだ。
ShowIPInformation 1
たったこれだけのことで、各ブログの設定画面に「禁止IPアドレス」というリンクが表示されるようになる。最初から表示させておいて欲しいと思ったりするがまぁ仕方ない。今まで調べなかった自分が悪いんだと思うようにした。まずはこの項目から手動で拒否したいIPアドレスを登録できる。しかし不満はブログ毎に分かれているので、もしもブログを3つ作っていたら同じIPアドレスを3つのブログに登録しなくてはならないという点だ。そんな手間は流石にかけてられない。裏づけを取る為にphpMyAdminからデータベースを確認してみたところ、mt_ipbanlist というテーブルが存在した。そのテーブルにはipbanlist_blog_id というフィールドがあり、ここにブログのID番号が入っている。つまりSQL上でもしっかりブログ毎に拒否するIPアドレスが分かれているのだ。
効率の良い方法は無いかなと真っ先に思ったのはCIDR形式でIPアドレスを指定することだ。殆どのスパムは海外から来ている。その国を確認できれば、そのIPアドレスが含まれるブロックをCIDR形式で指定しても良いのではないかと思った。実際に試してみたらすんなり登録できたが、SQL上ではipbanlist_ipという文字列型のフィールドで、15文字の制限がかけられていた。つまり想定しているのはIPアドレスでしかないということだ。
123456789012345
192.168.100.100
192.168.100.0/24 <–この例では1文字溢れてしまう
SQLのフィールド構造を変更すれば文字溢れは防げると思うが、期待通りの動作をしないと言うことが想定できる為、これ以上のことはやっても無駄のように思える。本当に機能するかを知りたければMTをハックするしかないんじゃないだろうか。という訳でCIDR形式での指定は諦める事にした。
AutoIPBanプラグインの導入である。リンク先に詳しい手順が書かれているのでここに記す必要も無いと思うが、AutoIPBan.plをMovable TypeのpluginsディレクトリにコピーするだけでOKだ。
後は今まで手を入れたことの無かった、mt-config.cgiの記述方法を少々覚えなくてはならない。MTをいじる上では欠かせない部分なのでこの機会に覚えてしまったほうが良さそうだ。詳しくはMT3のマニュアルの環境変数ページに書かれていたので参照すると良いだろうが、要点は下記の2点だ。
-
コメントアウトは行頭#
-
行頭に環境変数名、半角スペース、設定値
ここでAutoIPBanプラグインに関わってくる環境変数を二つ調べなければならない
-
OneHourMaxPings
特定のブログに対するトラックバックについて、1時間に受け付けられる最大値を設定できる。ThrottleSecondsで制御できないトラックバック・スパムを制限することに利用できる。
初期値10。 -
OneDayMaxPings
特定のブログに対するトラックバックについて、1日に受け付けられる最大値を設定できる。ThrottleSecondsで制御できないトラックバック・スパムを制限することに利用できる。
初期値50。
うちのブログの過去の実績からすると、この数値よりも少なくすべきだと思うのだが、問題はスパムのせいでこの設定値をオーバーしてしまったら、正規のトラックバックを受け付けられなくなるんじゃないかという問題もある。そうなると「ThrottleSeconds」の方をクローズアップしなくてはならなくなりそうだ。このあたりの兼ね合いで自分のブログにチューニングして行くのが面倒だが最善だろう。様子見しながら設定をいじっていこうと思う。
さてAutoIPBanプラグインの導入が終わったら、勝手にスパムがどんどんIP拒否リストに登録されて来る。こいつをほったらかしにして置いても良いのだろうが、スパマーはIPアドレスを細かに変更してスパム活動をしていると言う事がログから読み取れる。つまりこれだけでは後手に回ってばかりで、先手を打つ事が出来ないと想像できる。私がもしもスパム活動をするなら先手を打つに決まっているからだ。
ここで後手に回っての対処と自覚した上で、テンプレート機能を使って.htaccessを生成する方法を試してみた。テンプレートは再構築の際に生成する仕組みになっているので、複数ブログを持っている人はメインでよく使うブログに仕込むのが良いと思われる。後はディレクトリ構造次第だが、.htaccessを上位階層に設置すれば、一つの.htaccessファイルでも複数ブログに対処できるだろう。(.htaccessが下位フォルダに継承されるというルールを利用するだけの話)
テンプレートの作成はメインとなるブログのテンプレートページから行う。「インデックス」タブから、「テンプレートを新規作成」を実行する。まっさらのテンプレート作成画面が表示されたら、下記のようにすればよいだろう。
テンプレート名:アクセス制限
出力ファイル名:.htaccess
テンプレートの内容:
Order allow,deny
allow from all
<MTIPBanList blog_id="1,2,3">
deny from <$MTIPBanListIP$>
</MTIPBanList>
ちなみに私は複数のブログを使っており、そのブログIDが1,2,3のブログを外部に公開しているため、<MTIPBanList blog_id="1,2,3">としてそれぞれのブログで禁止IPに登録されたIPアドレスを一まとめにして.htaccessへ出力するようにした。こいつをWeb公開ディレクトリの上位階層に保存して下位にある複数ブログ全てに有効となるようにした。
試しに再構築してみたら、禁止IPアドレスに登録されたアドレスを元に.htaccessが生成されるのを確認出来た。これでブログを投稿するなりしてトップページを再構築する度に.htaccessが更新されるという仕組みは出来た。
しかしこれでは後手に回った対策しか出来ないと思う。出来ればIPアドレスを元に国別の割り当て範囲を診断し、その国のコードを生成して欲しいものだ。そして明らかに迷惑な来訪者と判断されたIPアドレスブロックは、CIDR形式で記し、それを.htaccessのdenyリストとして加えることが出来たら言う事なしなのだが。この辺りになるとプログラマーのお仕事の範囲なので、私の手には負えない感じだ。出来る事と言えばSQLのフィールド構造をいじって、15文字制限を18文字制限にして手動でCIDR形式にする事くらいだろうか。何か良いプラグインがあれば導入してみたいものだが。


コメント
トラックバックSPAM
ブログにおいて、トラックバック機能は本当に便利だと思う。トラックバックでブログ間の輪が広がって行く。 ところが、トラックバックを使ったSPAMも多いのが…
タイへの持ち込み制限
バンコクに到着したまさに、そのとき・・・バンコクのスワンエプーム国際空港でも、さまざまなトラブルが発生しています。あらかじめ知識を得ておくことで防げる…