13時40分10秒 [Web関連]
最近、ブログ(のコメント投稿用CGI)に対して、かなり頻繁にスパム投稿があります。
自前のスパムフィルタで、ほぼ100%自動ブロックができているのですが、いかんせん件数が多いので、「スパムフィルタが実行されること」自体がウェブサーバに負荷をかけているっぽいことがわかりました。
ぬう……。(フィルタ自体はそこまで重たい処理はしていないと思うんですけども……。)
というわけで、別の対策を加えることにしました。
自前のスパムフィルタでは、例えば、特定の用語が含まれている場合には拒否する……といった規則で判定していますが、それ以前に「日本語が含まれていなければ拒否」みたいなベーシックな処理も行っています。
最近は外国からのスパム投稿でも、適当にそのページに含まれている文章をコピーするなどして日本語文を含んでくるので、「日本語が含まれていなければ拒否」という手段は有効ではないだろうな……と認識していたのですが、実際にログを調べてみると、大半のスパムは、この「日本語が含まれていない」という点に該当して自動ブロックされていることが分かりました。
まだまだそういう投稿もあるんですねえ。(判別しやすくてありがたいですが、迷惑であることに変わりはありません。-_-)
つまり、やはり外国からのスパム投稿が多いってことですね。
そこで、スパム投稿に使われているIPアドレスのうち、特に高頻度で使われているものを適当に抜き出して、nslookupコマンドを使ってホスト名を調べてみたところ、中国ドメインで「dynamic.163data.com.cn」というDynamic DNSサービスっぽいホスト名が頻繁に該当しました。
うちのブログの場合は、ブログ記事は静的なHTMLで生成されており、コメント投稿はそれ専用のCGIにアクセスして実行される仕様になっています。
なので、スパムフィルタに通す前に、「コメント投稿用CGI」に対してウェブサーバ側でアクセス制限を掛けてしまえば良さそうです。そうすれば、投稿処理自体を減らせるので、スパムフィルタの実行頻度も減りますから。
というわけで、ウェブサーバ(Apache)の設定で、IPアドレスをベースにして、ざっくりした範囲からのアクセスを拒否することにしました。
あくまでも「コメント投稿用CGI」に対してのアクセスだけをブロックするので、ブログ記事そのものの閲覧には全く支障はありません。
なので、いっそのこと「.cn」ドメインからのアクセスをすべてブロックしてもいいかな……、とも思ったんですが、どうもホスト名を指定する方法では、「dynamic.163data.com.cn」からのアクセスをブロックできませんでした。(※後から分かったんですが、原因は「Deny from で、ブロックできないホスト」に書いてありました。なるほど、Apacheはそんな仕様になっているんですねえ。)
で、元々コメントの投稿自体はさほど多くないブログなので(^_^;)、問題のないIPアドレスからのアクセスも含めて拒否してしまってもさほど問題になならないかな(^_^;)と考えて、スパム投稿に使われているIPアドレスを含む大きなアドレス範囲をざっくりブロックすることにしました。(スパム投稿に使われたIPアドレスをピンポイントにブロックするのではなく、その周辺をごっそりブロックします。)でないとキリがなさそうなので。
で、そのようにアクセス制限を施してみると、スパム投稿(がスパムフィルタによってログに記録される頻度)が1時間に数回程度にまで下がりました。
めでたし、めでたし。
どんだけ頻繁に投稿してきていたんだ……。(-_-)
スパム投稿がすべてなくなったわけではありませんけども、スパムフィルタの実行頻度が低下したので、サーバの負荷も減るでしょう。
今回試した具体的な方法を書こうかな……と思ったんですが、以下のサイトなどに詳しく書かれていましたので、リンクだけしておきます。(^_^;)
改めて「dynamic.163data.com.cn」でググってみると、結構この被害は多いことが分かりました。(-_-)
なお、アクセス制限を施すための.htaccessファイルの書き方については、過去にAll Aboutでも記事にしていますので、よろしければ以下の記事もご参照下さい。
まあ、ホスト名やIPアドレスを使ってアクセスを制限しよう、と考える段階に至る方々は、既に.htaccessの書き方は知っているでしょうから、あまり必要ないかも知れませんが。(^_^;;;
■ログインページに他人がアクセスするのを拒否する方法(@All About ホームページ作成)
■.htaccessファイルの書き方と設置方法(@All About ホームページ作成)
この日記へのコメントはお気軽に! コメント数:0件
コメント数: 0件