設置していた掲示板に、もの凄い数のスパムコメントがされるようになってしまったため、何ヶ月か前にページを撤去しました。
しかし、掲示板があったURLには未だにたくさんのアクセスがあります。
アクセスログを見てみると、リクエスト元のIPはバラバラで、アクセスの約8割がPOST。1分に4回くらいのアクセスがあります。
もともと流行っていた掲示板でもなかったので、アクセスはほぼ間違いなくスパムコメントを記入するためのBOTでしょう。
これらのアクセスに対し、初めは.htaccessでアクセスを禁止し、403を返すようにしていたのですが、それでもアクセスが止まないため、404を返すようにしてみました。
ところが、なおアクセスは続きます。
このように、明らかにスパムだとわかっているアクセスが続くと、ネットワークやサーバーに負荷がかかるというのは勿論ありますが、特に不便しているのはアクセスログが汚れてしまうことです。
アクセスログはこの掲示板へのアクセスのログで埋め尽くされ、容量が肥大していくだけでなく、現在運営しているページへのアクセスログが確認しづらくなってしまいます。
また、エラーログは、これらのアクセスに対する403や404のログで埋まってしまい、開発中のCGIの動作確認をしようと思っても、すぐにログが流れてしまいます。1
ということで、この旧掲示板に対するアクセスログとエラーログを、他のログとは分けて保存できないかを考えました。
調べてみたところ、アクセスログは SetEnvIf というディレクティブを使うことで、条件ごとのログが保存できるようでしたので、httpd.confに以下のように設定してみました。
SetEnvIf Request_URI "mybbs" spam
CustomLog logs/spam_log common env=spam
CustomLog logs/access_log common env=!spam
これは、リクエストされたURLに "mybbs" を含む場合に spam というタグを付けて、このタグが付いたアクセスを spam_log に保存し、それ以外を access_log に保存するという意味です。
"mybbs" の部分は正規表現で自由に設定できますので、スパムアクセスがあるアドレスに合わせて設定します。
エラーログの方は分ける方法がわかりませんでした。
なので、旧掲示板に対するアクセスがあった場合、リダイレクトさせてしまうことにしました。
そうすればエラーにならないので、エラーログは残りません。
リダイレクトには、410 Goneを使ってみました。410の場合リダイレクト先を指定しません。
アクセスを無くさせるためには他のステータスを返した方がいいのかもしれませんが……。
- 開発環境と運用環境が同じサーバーですから。 ↩