騙し騙され・・・SPAMとの戦い(その2)
先に「ロシアとの戦い」でロシアからのアクセスをIPアドレスで拒否したために一時的にSPAMアクセスが少なくなったが、敵もそんなことでは引っ込まないらしく、アメリカを中心に欧州諸国からアクセスしてくるようになった。
こうなってくるともうイタチごっこ状態で泥沼化を呈し始めている。
そんな中、ふとこちらのサイトを見つけた。
そもそもSPAMerたちはは「URL収集→コメントSPAM開始→403(Forbidden)される→逆上してDDoS攻撃→鯖ダウン(500エラー)→達成感と共に立ち去る」という一連の流れで攻撃してくるのだから、鼻っからSPAMerに対して500エラーを出せばいいんとちゃうか?という心理戦法というのである
確かにIPアドレス制御では追いつかないので.htaccessでRemote_HostやUser-Agentでdenyし始めたのだが、それ以来突如逆上したかのようなSPAMアクセスが確認されることがある。
なるほどSPAMer心理からすれば「けっ、素人の分際でアク禁しよって。そんなヤツは神の鉄槌を食らえ!」とするわなぁ。私でもすると思うwww
であるなら、やまちうさんの言うことは正しくて、403エラーではなく500エラーを吐き出して相手に「ふっ、俺の手にかかればこんなもんよ」と満足させて止めさせる、というのは理にかなった防御である。しかも相手は人間じゃなくて「プログラム」なんだし。相手がIPアドレスを騙してくるなら、こちらはエラーを騙して勝負、ってところですね。
ということで、早速試してみる。
まず、エラーステータス500(Internal Server Error)を吐き出す403エラーファイル(403.php)を作成する
<?php header("HTTP/1.1 500 Internal Server Error"); ?> <!-- ここからは自由に --> <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don't have permission to access this directory or file on this server.</p> </body></html>
ポイントは最初の3行で、phpを使ってエラーステータス500を吐き出すようにする。プログラムはこれで騙せるはず。で人間には下のhtmlで403エラーの表示に。
さらに、.htaccessに
ErrorDocument 403 /403.php
を追加する。
これでOK。アクセスログを見ると、ちゃんとエラーステータス500を吐き出していることをが確認された。