トラックバックスパムとコメントスパム
コメントスパムが多いので, 仕方なく全角文字の無いコメントは spam 扱いにしている。そのおかげもあって, 大量のコメントスパムは公開されることなく Movable typeのシステム内で留まっている。また, Movable typeに付属しているプラグインのspam フィルターは(MT4になってより一層)優秀だ。
しかし, それは 世に公開されずに済むとか 管理が楽 という意味であって, blog システムとしては, spamに対して 応答し解釈しなくてはいけない。短時間にあまりに大量なspam アクセスがあるため, サーバー機が頻繁に 激重となり, 使いにくいことこの上ない状態になってきた。
そこで 対策を考えてみた。以下は参考にした サイト
ルーターではじければ 一番良いが, 我が家でルーターのフィルターにスパマーの情報を反映させるには 人間がコツコツ登録するしかない。現実的ではない。
スパムでperlのスクリプトが起動するよりまし。ということで apache に対応してもらうことにした。
#!/bin/bash
# for list up mt-tb spam spam host
set -x
logfile='/var/log/apache2/access.log'
target_pattern='mt-tb.cgi'
threshold=30
spamerfile='mt_tb_spamer_list.txt'
temp_file='mt_tb_temp_file.tmp'
cat $logfile | grep "$target_pattern" | awk '$1 ~ /([0-9]+\.[0-9]+\.[0-9]+\.[0-
9]+)|([0-9a-zA-Z_\.\-]+\.[a-z]+)/ {print $1}' | sort | uniq -c | awk -v threshol
d=$threshold '$1 > threshold { print $1,$2 }' > $temp_file
cat $temp_file | awk '{print $2}' > $temp_file
if [ -f "$spamerfile" ];
then
cat $spamerfile >> $temp_file
fi
cat $temp_file | sort | uniq > $spamerfile
rm $temp_file
cat $spamerfile
上記のようなシェルスクリプトで スパマーのIPアドレス および ホスト名を 抽出。上の例では一定期間(access.logがloglotateされる期間)で mt-tb.cgi に 30個もアクセスしてくるのは スパマーしかいないでしょ という前提。
以下のperlスクリプトで上記で得られたリストファイルを利用する。以下のperlスクリプトはcron で定期的に実行するようにした。(シェルスクリプトと perl と混在したシステムで格好が悪いけど)
#!/usr/bin/perl
$mt_tb_spamerfile='mt_tb_spamer_list.txt';
$tempfile='t_temp.tmp';
$target_filename='/www/cgi-bin/mt/.htaccess';
$target_attr='hoge:www';
$str_directive = <<END_OF_DATA;
<Files "mt-tb.*cgi">
<Limit POST>
Order Allow,Deny
allow from all
deny from env=Spammer
</Limit>
</Files>
<Files "mt-comments.*cgi">
<Limit POST>
Order Allow,Deny
allow from all
deny from env=Spammer
</Limit>
</Files>
END_OF_DATA
system( '/bin/bash listup_mt-tb_spamer.sh');
open(OUT,"> $tempfile");
#for trackback spammer
open(IN, $mt_tb_spamerfile);
@xx = <IN>;
foreach $yy (@xx) {
#print $yy;
$yy =~ s/\s*$//;
#print substr($yy, length($yy)-1, 1) . "\n";
if (substr($yy, length($yy)-1, 1) =~ /[0-9]+/) {
$str = "SetEnvIf Remote_Addr " . $yy . " Spammer \n";
} else {
$str = "SetEnvIf Remote_Host " . $yy . " Spammer \n";
}
print $str;
print OUT $str;
}
close(IN);
print $str;
print OUT $str;
close(IN);
print OUT $str_directive;
close(OUT);
chmod(0640, $tempfile);
system ("chown $target_attr $tempfile");
system ("mv $tempfile $target_filename" );
ここで, 対象ディレクトリの.htaccessが有効になるには, /etc/apache以下の設定(httpd.conf もしくは /etc/apache2/sites-avairable/defaultなど)で対象ディレクトリに対して
AllowOverride FileInfo Limit
としておかなくては ならない。
今回の対策では, スパムを送りつけてくるホストをこまめに切り替えてくるタイプの攻撃には対処できない。しかし, ひとまず目に余る負荷上昇は消えたようだ。
トラックバック(2)
このブログ記事を参照しているブログ一覧: トラックバックスパムとコメントスパム
このブログ記事に対するトラックバックURL: http://www.tab2.jp/cgi-bin/mt/mt-tb.cgi/151
先日来「blogへのコメントspamが 多くて困る」と書いていたが, ついに ひ... 続きを読む
Movable Type のspam フィルター設定で rbl.bulkfeeds.jp を追加してみた。 続きを読む
コメントする