Home > Linux > | Movable Type > トラックバックスパムとコメントスパム

トラックバックスパムとコメントスパム

コメントスパムが多いので, 仕方なく全角文字の無いコメントは 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
としておかなくては ならない。

今回の対策では, スパムを送りつけてくるホストをこまめに切り替えてくるタイプの攻撃には対処できない。しかし, ひとまず目に余る負荷上昇は消えたようだ。

Home > Linux > | Movable Type > トラックバックスパムとコメントスパム

Search
Feeds

Return to page top