コメントスパマーを偽アドレスに釣りだす
前回、Movable Typeでコメントスパマーを偽のアドレスに転送させる方式を紹介しました。
あまりに面白く釣れるので、釣れたスパマーは.htaccessでブロックすることにしました。そのためにスクリプトを組みました。
スパマーを集計して締め出す
ダウンロード
スクリプトを置きましたので、よかったら使ってみてください。
カスタマイズ(オプション)
スクリプトの最初のほうに以下のような行があります。
$spam_file = "\/nospam\.html";
$spam_threshold = 10;
$spam_fileは、ここにアクセスしたらスパマーと認定するファイル名を記述します。前回説明したとおりに対策している場合、/nospam.htmlにアクセスしたらスパマー認定なので、変更する必要はありません。
$spam_thresholdは、同じホストから何度$spam_fileにアクセスしたらスパマーと認定するかの閾値を設定します。デフォルト値は10です。
動かしてみる
元の.htaccessが存在しない場合は、次のように空の入力を与えます。
$ echo | perl chk_spammer.pl > .htaccess.new
元から.htaccessがある場合は、それを入力させます。
$ cat .htaccess | perl chk_spammer.pl > .htaccess.new
出力内容をチェックして、問題ないようだったら、.htaccessファイルを入れ替えます。
$ mv .htaccess .htaccess.bak
$ mv .htaccess.new .htaccess
出力ミス、スクリプトのバグなどで.htaccessが間違っていると、あらゆるアクセスに対して"500 Internal Server Error"が出てしまうので注意してください。.htaccessを入れ替えたら、ためしに自分でどこかのWebページにブラウザでアクセスしてみて正常動作することを確認してください。
処理結果
スクリプトを動かすと、次のようなファイルができます。
# Generated by chk_spammer.pl
# Last updated: 05/Mar/2015:10:00:00 +0900
deny from 27.159.253.65 "# 633 spam access"
deny from 120.43.22.135 "# 627 spam access"
deny from 222.77.200.134 "# 587 spam access"
deny from 110.89.26.93 "# 463 spam access"
deny from 120.33.217.48 "# 456 spam access"
deny from 120.40.145.226 "# 372 spam access"
deny from 140.237.39.89 "# 316 spam access"
deny from 110.85.103.242 "# 279 spam access"
deny from 120.43.23.58 "# 266 spam access"
deny from 120.37.238.39 "# 254 spam access"
(以下延々と続く)
最初の2行はプログラムが自動生成部分を認識するために必要なので、削除しないでください。逆に言うと、この2行より前に手書きのhtaccessエントリがある場合は、その内容を消さずに出力にコピーします。
2行目のLast updatedを見て、awstatsと同様に、この日付よりも新しいログのみを処理して、既存のエントリに新たなスパム元を追加する処理をしています。そのため、自動生成部分を間違って消してしまったときは"Last updated"の行を消せば処理しなおしをしてエントリを作成します。
なお、下のほうにコメントアウトされたdenyエントリが出力されますが、これはスパムアクセス数の累計を取るためのものですので、削除しないでください。次回集計されたときにアクセス数を累計して、$spam_thresholdを超えている場合はコメントが外れて対象ホストがブロックされます。
cronを使って自動で動かしてもよいのですが、万が一間違いがあるとまったくWebサーバにアクセスできなくなってしまうので、手動にしています。無保証ですので、十分注意の上利用してください。
匿名
画面が真っ暗、でもカーソルは出てる状況。
探して、ここにたどり着きました。
パスワード入力で、復活!
修理に出す寸前でした。ホントにありがとう!