スパムの連続投稿によく効くキャッシュを装備したIP Geo Blockの更新告知

ここ数日間、本サイトではスパムの連投が流行っています 😡 。

こいつらに貴重なサーバー資源を食われるのは1ミリたりとも許せないワケで、かつては日本以外の IP アドレスを .htaccess に手作業で書き込んでいましたが、あまりにも量が多く、馬鹿げているので止めました。

そんなワケで作ったのが、海外からの投稿を Akismet の起動前に弾く IP Geo Block というプラグインなんですが、スパムは激減するものの、IP アドレスの検索に少々時間がかかるのが気になる点でした。

で、この度、一度検索した IP アドレスをキャッシュに保持する機構を付けたところ、思いの外、効果があったので、バージョン 1.1.0 として告知したいと思います 🙂 。

バージョン 1.1.0 での変化点

主に次の3つです。

  1. 一度検索した IP アドレスと国コードを一定期間キャッシュする機能を追加。
  2. サービス提供元で生じた障害を分析し易くするため、エラー処理を改善。
  3. ユーザーエージェント文字列をプラグイン独自のものに変更。

キャッシュ機構の追加

本プラグインは、IPアドレスの地理的位置情報が引ける無料RESTful API集 でピックアップした API を呼び出すか、IP2Location Tags など IP2Location が提供するプラグインのインストールで利用可能となるデータベースを用いて、IP アドレスの国コードを検索するのが仕様です。

前者は、API から返答が返ってくるまでの数百ミリ秒から数秒の間、コネクションが張られっぱなしになりますし、後者は、WordPress にインストールされたデータベース・ファイルの検索に50ミリ秒前後のCPU処理を必要としていました。

一方、今回のキャッシュ化により、2度目以降の検索は数ミリ秒で完了するようになりました。

IP Geo Block 投稿の統計

スパムの投稿パターンにも依りますが、今のところデフォルトの設定で90%以上のヒット率をキープしています。

キャッシュの実装には Transient API を利用していて、デフォルトでは最大10個の IP アドレスを3600秒間保持するようにしています。

IP Geo Block キャッシュの設定

本プラグインの設定画面で上のようにならない場合、一旦本プラグインを「停止」し、再度「有効化」して下さい。自動的に設定値を更新します。

エラーメッセージ処理の改善

API 提供元の都合により、サービスに障害が起きたり停止したりすることがあります。例えば smart-ip.net はサイト自体が停止してしまったため、前バージョンの 1.0.3 で外しています。

このような状況を分析し易くするため、サービスが返すエラーメッセージや HTTP レベルで起きるエラーを検索タブで確認できるようにしました。

IP Geo Block IPアドレスの位置情報を検索

まぁ、ユーザーの皆さんにはあまり関係のない機能ですネ。

ユーザーエージェント文字列の変更

WordPress 標準の wp_remote_get() を使うと、ユーザーエージェント文字列は、例えば次のようになります。

WordPress/3.9.2; http://tokkono.cute.coocan.jp/blog/slow

これを次のように変えました。

WordPress/3.9.2; ip-geo-block 1.1.0

ただそれだけのことです。

IP2Locationのデータベースについて

海外からの投稿を弾くスパム対策用WordPressプラグインをリリースします にも書きましたが、本プラグインは IP2Location の無料プラグイン をインストールするか、それぞれを ip2location にリネームし wp-content にアップロードすることで、そのデータベースが利用可能になります(配置後、本プラグインを一旦「停止」、再度「有効化して下さい)。

必要なのは、データベース本体の database.binip2location.class.php というクラス・ライブラリのファイルです。

またデータベースを オープンソースの無料データベース に差し替えれば、さらに幸せになれます。メールアドレスの登録と IP2Location.com への 帰属リンク張りが必要 ですが、IPv6 もカバーされているので、* 他の サービス API を呼び出す頻度がグッと減ります。

* IPv6 の無料データベースは、こちら でした。

私は About ページにリンクを貼った上で DB5.LITE を利用していますが、月に一度、データベース更新の案内が届くぐらいで、特に面倒なく使えています。

今後の構想

今回のキャッシュ化により、例えば WordPress の管理領域にアクセスしに来た IP アドレスを記録して弾く仕様を追加すれば、セキュリティ向上にもつながるかな? などと夢想しています。

もっとも、優れた セキュリティ用プラグイン はたくさんありますし、より根本的な対策をすべきですけどネ。

まぁ、今後も細々とメンテはしていきますので、良かったら使ってやって下さい 😉 。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

海外からの投稿は受け付けていません