MovableTypeお手軽スパム対策(コメント・トラックバック)とスパムUser Agentの調査

  • 投稿日:
  • 更新日:2015/03/09
  • by
  • カテゴリ:

コメントとトラックバックを許可

少し前からになりますが、当ブログではコメント及びトラックバックを許可する設定にしました。

これまでは、スパムがあまりに多かったのと、ちょっとサーバを放置プレイ気味だったこともあってコメントもトラックバックも停止していたのですが、Movable Type 6にアップグレードした際にいろいろとメンテナンスをしたので、このあたりも許可することにしました。

私は基本的にはブログでいろいろコミュニケーションを取ることは賛成です。 それによって互いにPage Rankが上がったって別にかまわないので、リンクにnofollowもつけていません。

ただ、まったく無関係のスパムとなると話は別です。 サーバを管理しているなら、次のようなコマンドをしばらく走らせて眺めていれば、いかにアクセスが多いかが分かります。そしてその結構な割合がスパムアクセスです。

% cd /var/log/httpd (ログのあるディレクトリ)
% tail -f access_log | egrep -v "^192.168"

ここでは自宅にサーバがあり、そのローカルアドレスが"192.168.x.x"であると仮定した場合に、自分でのアクセス表示を除外するためにフィルタしています。 そうでない場合は適宜変更すればよいでしょう。

うちくらいの小規模かつ不活性なサーバでもHTTPリクエストは毎日万単位であり、その大部分はコメントスパム等のまぁ招かれざるアクセスです。 なにも手を打たないととてもコメントもトラックバックも受け付けられません。 世知辛い時代です。

.htaccessによる設定

でどうするかですが、いろいろありますがもっとも手っ取り早く.htaccessを設定する方法があったのでまとめます。

まず、コメントについてはこちらを参照。 mt-comments.cgiのファイル名を変更する方法などもあります。

次に、トラックバックについてはこちらがそのものズバリ。

まとめると、mt.cgiのあるディレクトリに以下の内容で.htaccessを作ります。

# anti-spam trackback configuration
# see http://www.itsmemo.com/it2/2008/0405-1128.html
SetEnvIf User-Agent "^USERAGENT$" TBSpam
SetEnvIf User-Agent "^Jakarta Commons-HttpClient/" TBSpam
SetEnvIf User-Agent "^NP_Trackback/" TBSpam
SetEnvIf User-Agent "^Mozilla/" TBSpam
SetEnvIf User-Agent "^Opera/" TBSpam
SetEnvIf User-Agent "^User-Agent" TBSpam
<Files mt-tb.cgi> <Limit POST> Order allow,deny allow from all deny from env=TBSpam </Limit> </Files> # anti-spam comment configuration # see http://blog.caraldo.net/2011/12/mt_3.php <Files mt-comments.cgi> SetEnvIf Referer "^http://www.markn.org" ref order deny,allow deny from all allow from env=ref </Files>

導入する場合は19行目のドメイン名の部分を変更してもらえれば、あとはそのままでもいいでしょう。 トラックバックについては効果を見るのはこれからなので、とりあえず承認後公開の設定にしています。 コメントの効果はてきめんで、これだけの設定であれだけ来ていたスパムコメントがぱったりなくなりました。 いまのところ問題ないのでコメントについてはCAPTCHAを通過している正規のものについては即時公開にしています。 状況を見ながら調整するかもしれませんが。

スパムUser-Agentの調査と、それによる対策

それにしても、スパムの大部分は同じようなUser-Agentでやってきます。 調べてみましょう。 アクセスログよりUser-Agentの部分だけ取り出し、同じものを数えてソートします。

% grep mt-comments.cgi access_log | awk -F\" '{print $6}' | sort | uniq -c | sort -r

結果は上位から次のグラフのようになりました。

Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) )
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727 ; .NET CLR 4.0.30319)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.0.3705)
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0

グラフにしてみました。

UAs.pngスパムを発信するUser Agent

スパム用プログラムがこういうUser-Agentでリクエストを投げまくるんでしょうねぇ。

上 記で紹介したやり方はお手軽ですが、結構メインサイトにアクセスしてからmt-comments.cgiに来るスパマーもあり、その場合refererが 正しくついているのでmt-comments.cgi自身へのアクセスは防げません。そのため、上で調査したUser-Agentで拒否する方法もありま す。

# anti-spam trackback configuration
# see http://www.itsmemo.com/it2/2008/0405-1128.html
SetEnvIf User-Agent "^USERAGENT$" TBSpam
SetEnvIf User-Agent "^Jakarta Commons-HttpClient/" TBSpam
SetEnvIf User-Agent "^NP_Trackback/" TBSpam
SetEnvIf User-Agent "^Mozilla/" TBSpam
SetEnvIf User-Agent "^Opera/" TBSpam
SetEnvIf User-Agent "^User-Agent" TBSpam
<Files mt-tb.cgi> <Limit POST> Order allow,deny allow from all deny from env=TBSpam </Limit> </Files> # anti-spam comment configuration
# @see https://www.markn.org/blog/2015/01/movabletypeuser-agent.html SetEnvIf User-Agent "^Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) )" CSpam SetEnvIf User-Agent "^Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727 ; .NET CLR 4.0.30319)" CSpam SetEnvIf User-Agent "^Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" CSpam SetEnvIf User-Agent "^Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 1.0.3705)" CSpam SetEnvIf User-Agent "^Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)" CSpam SetEnvIf User-Agent "^Mozilla/5.0 (Windows NT 6.1; rv:26.0) Gecko/20100101 Firefox/26.0" CSpam <Files mt-comments.cgi> Order allow,deny allow from all deny from env=CSpam </Files>

この例の場合、サイトごとの変更はいりません。そのままmt.cgiのあるディレクトリの.htaccessとして使えます。ただ、スパマーのUser-Agentが変わったら変更が必要です。

なお、私はCAPTCHAと併用しています。他に、国別でアクセス拒否をする方法もありますが、私のサイトは海外からのアクセスもあるのでつらいところです。

なお、Tiny Core LinuxでMovable TypeおよびCAPTCHAを入れる方法はこちらです。

(9 Mar 2015 Update) この方法だとmt-comments.cgiが動作してしまいマシンが重くなるので、スパマーを偽アドレスに「釣る」方式を作りました

こちらもよく読まれています