トラックバックSPAM対策。

MovableTypeのフィルターが優秀とはいえ、
毎日とんでもない数のトラックバックSPAMが襲来しているため、
それに対する対策を講じてみました。

参考(というかきっかけ)にしたのは、GIGAZINEのこちらのエントリ。
ブロック方法は主に2つ。1つめはトラックバック用のアドレスを取得するサーバをブロックする方法、もう1つはPOSTに含まれている特徴的なUserAgentをブロックすることです。

要はですね、今までトラックバックの中身を見て、
取捨選択してたわけですが、
トラックバックを無作為に送るサービスとか乱立している現在、
もう送信元をアクセス禁止にしてしまおう、ということですね。
(本当は、GIGAZINEの有効期限付きのランダムなTB URLが欲しいけどね)

まずは調査からだってんで、
サーバのアクセスログのうち、TB用プログラム(mt-tb.cgi)にアクセスしてきていて、
200を返しているアクセスの、HOSTとUAをリストアップしてみた。
(簡単なプログラムを作成して、ローカルで実行)


そうすると、前述のGIGAZINEのエントリー内にあるように、
いくつかの特徴的なアクセスがあることが分かった。

例えば、こんな感じ。
SPAMMER ■ 01
HOST: e2.41.5646.static.theplanet.com
UA: Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)
  Opera/6.01 (Windows ME; U) [en]
  など、ランダム
SPAMMER ■ 02
HOST: pppoe-168.15.110.89-adsl.spbnit.ru
UA: (なし)
SPAMMER ■ 03
HOST: ip81.124.adsl.wplus.ru
UA: (なし)

で、今まで思っていて踏み切れなかったのは、
『Mozilla/4.0…』など、ブラウザのようなアクセスでトラックバックを送らない、ということ。
まぁ実際には、『手動トラックバック』もあるような気がするんですけど、
一般的には、ブラウザ的な体裁を取ることはない。

例えば、Movabletypeから送ると、UAは、
MovableType/3.171-ja
などになるし、excite blogなら、
exblog trackback client(http://www.exblog.jp/)
となるわけで。
一方で、SPAMの方は、ブラウザ偽装UAが極端に多く、
結果的に、ブラウザ系UAでトラックバックを送ってくるアクセスの、
99%はSPAMになっているわけで。
ま、弾きましょう、と。
同様の理由で、UAなしで、トラックバックを送ってくるアクセスも、弾く。


ただし、UAで影響を与えるとき、広範囲に対して制限を掛けると、
弊害も起こりやすいわけで。
範囲を限定しておく方が良い。
この場合で言えば、トラックバックSPAM用の対策なので、
トラックバック用プログラムに対して、制限を掛ければよい。

以上を加味して、.htaccessの設定は次のようになりました。
<Files mt-tb.cgi>
<limit POST>

SetEnvIf User-Agent "^Mozilla/4\.0" trackers
SetEnvIf User-Agent "^Mozilla/5\.0" trackers
SetEnvIf User-Agent "^Opera" trackers
SetEnvIf User-Agent "^$" trackers

Order Allow,Deny
allow from all
deny from env=trackers

</limit>
</Files>
UAが、『Mozilla/4.0』『Mozilla/5.0』『Opera』で始まるもの、
もしくはUAが空欄のものは拒否する、というものですな。


これに加えて、これまで多くのトラックバックSPAMを送ってきた海外サーバを、
IPで制限してやったところ、

おおお。


一時的なモノ…ではあると思いますが、
トラックバックSPAMの攻撃がやみました。すげー。

ログを見ると、依然として膨大なアタックを掛けられてますが、
すべて403で排除。
一方で、自分で自分のサイトにトラックバックしてみたところ、
問題無く通過。


サーバ側でアクセス自体を遮断するというのは、
冤罪の可能性を持つし、しかもそれを発見しにくい。
仕様に基づかないUAをすべて遮断というのも乱暴すぎるけれども、
(トラックバックのUAに関して『仕様』ってあるのかな…
多分、トラックバックに関する共通仕様そのものが、ない)
いやしかしなんだ、

一日300件くらいきてれば。
実利を取るでしょ、さすがに。



というわけで、トラックバック送ってみたけど、
反映されてない、
という方は、僕までご一報を。