C# と .NET Framework 4 を主にWindows Formのアプリケーション開発について

2006年8月19日

トラックバック スパム対策 トラックバック スパム対策

8月に入ってトラックバック スパムがすごい勢いで降って来てます。
中には、記事へのリンクまであると判定されるようで、迷惑トラックバックに入らないものまである始末。
ちなみに18日には180件投下されている。

そういう訳で、3つの対策を施しました。

  1. 日本語を含まないTBを迷惑トラックバックに判定する
  2. MovableTypeより手前でスパム弾く
  3. トラックバック URLの変更


日本語を含まないTBを迷惑トラックバックに判定する

トラックバックが入ると通知する設定にしてあるので、スパムを確実に弾けるとうれしい。
現在までの所、TBスパムは100%英語なので、日本語が含まれていなかったらスパムと判定してかまわないと判断。

早速探してみると、メールフォームでもお世話になったH.FujimotoさんのBlogに公開されています。
The blog of H.Fujimoto:日本語でないスパムをフィルタするプラグイン(MT3.2以降用)

丁寧に説明されているので、問題なく導入できました。
1週間ほど様子を見ましたが、正しくスパムが判別されるようになりました。


MovableTypeより手前でスパムを弾く


サーバのログを見るとTBスパムが連続で送りつけられたときにサーバの処理能力を超えている時もありました。
(これはDoSかと。ご老体の貧弱サーバにはちときつい。)
CGI動作前に弾く方法はないかと探した所mod-securityがありました。

mod-securityとは、Web Application Firewallの一種で簡単に言えばAppacheを保護してくれるモジュールです。
MovableTypeのCGIが動作する前にスパムを弾くことが出来るため軽いのではないかという期待を込めて試してみます。

参考はこの辺

サーバはDebian sarge でApache2を使用しています。
現在aptでインストールできるのは1.8.7ですが、設定のサンプルやマニュアル類が1.9.4をベースにしてあるため1.9を入れることにする。

本家のダウンロードページ にDebian用の非公式バイナリ パッケージがあるのでダウンロードしてインストール。

ルールファイルをGOT ROOT からダウンロードして展開。/etc/modsecurityディレクトリを作成して各confをコピー。

GOT ROOTのHow to setup, configure and install mod_security.を参考に、次の内容を /etc/apache2/mods-available/mod-security.conf ファイルとして作成する。

<IfModule mod_security.c>
SecFilterEngine On
# Reject requests with status 500
SecFilterDefaultAction "deny,log,status:500"
SecFilterScanPOST On
SecFilterCheckURLEncoding On
SecFilterCheckCookieFormat On
SecFilterCheckUnicodeEncoding Off
SecFilterNormalizeCookies On
SecFilterCookieFormat 1

SecServerResponseToken Off
SecFilterForceByteRange 1 255
SecServerSignature "NOYB"

SecAuditEngine RelevantOnly
SecAuditLog /var/log/apache2/audit_log

# You normally won't need debug logging
SecFilterDebugLevel 0
SecFilterDebugLog /var/log/apache2/modsec_debug_log

#And now, the rules
#Remove any of these Include lines you do not use or have rules for.

#First, add in your exclusion rules:
#These MUST come first!
Include /etc/modsecurity/exclude.conf

#Application protection rules
Include /etc/modsecurity/rules.conf

#Comment spam rules
Include /etc/modsecurity/blacklist.conf

#Bad hosts, bad proxies and other bad players
Include /etc/modsecurity/blacklist2.conf

#Bad clients, known bogus useragents and other signs of malware
Include /etc/modsecurity/useragents.conf

#Known bad software, rootkits and other malware
Include /etc/modsecurity/rootkits.conf

#Signatures to prevent proxying through your server
#only rule these rules if your server is NOT a proxy
Include /etc/modsecurity/proxy.conf

Include /etc/modsecurity/apache2-rules.conf
</IfModule>

準備は出来たので、mod-securityを有効にします。

# a2enmod mod-security
# /etc/init.d/apache2 force-reload

エラーが出なければ、無事 mod-security が動き始めています。
/var/log/apache2/audit_log ファイルにmod-security が弾いたリクエストの詳細が出力されます。

じばらく待っていると早速トラックバック スパムが来て、mod-securityが弾いてくれました。
成功!と感激するものつかの間でした。
う…重い。 HTTPリクエストの処理速度が一気に落ちてしまっていました。

という分けで、とりあえず停止してコンフィグレーションを見直すことにします。

# a2dismod mod-security
# /etc/init.d/apache2 force-reload

これで、元通りになりました。

調べてみると、ブラックリスト /etc/modsecurity/blacklist.conf のチェックが重い事が分かりました。
(それなりのスペックのサーバなら大丈夫かも知れませんが)

結局blocklist.confの内容を大幅に削り、ここ1週間に来たスパムを弾ける程度のものを記述。
SecFilterSelective HTTP_Referer|ARGS "XXXX\.com"
のようにごっそり弾くようにする。

再度有効にしてみると、以前より微妙に重いかな程度で弾いてくれています。


トラックバック URLの変更


ブラックリストを縮小してしまったので、漏れがどうしても起こります。

これには、mt-tb.cgi のファイル名を変えてしまうのが有効みたいです。
お気楽極楽ブログ:トラックバックスパム予防プラグイン for MovableTypeを参考に変更します。

こちらについては、検証中。

Comments

コメントする

(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)

トラックバックURL

このエントリーのトラックバックURL:
http://www.cs-dotnet.com/cgi-bin/mt-tb.cgi/86