ここ数日間、本サイトではスパムの連投が流行っています 。
こいつらに貴重なサーバー資源を食われるのは御免被りたいわけで、かつては日本以外の IP アドレスを .htaccess
に手作業で書き込んでいたこともありましたが、あまりにも量が多く、馬鹿げているので止めました。
そんなワケで作ったのが、海外からの投稿を Akismet の起動前に弾く IP Geo Block というプラグインなんですが、スパムは激減するものの、IP アドレスの検索に少々時間がかかるのが気になる点でした。
で、この度、一度検索した IP アドレスをキャッシュに保持する機構を付けたところ、思いの外、効果があったので、バージョン 1.1.0 として告知したいと思います 。
バージョン 1.1.0 での変化点
主に次の3つです。
- 一度検索した IP アドレスと国コードを一定期間キャッシュする機能を追加。
- サービス提供元で生じた障害を分析し易くするため、エラー処理を改善。
- ユーザーエージェント文字列をプラグイン独自のものに変更。
キャッシュ機構の追加
本プラグインは、IPアドレスの地理的位置情報が引ける無料RESTful API集
でピックアップした API を呼び出すか、IP2Location Tags など IP2Location が提供するプラグインのインストールで利用可能となるデータベースを用いて、IP アドレスの国コードを検索するのが仕様です。
前者は、API から返答が返ってくるまでの数百ミリ秒から数秒の間、コネクションが張られっぱなしになりますし、後者は、WordPress にインストールされたデータベース・ファイルの検索に50ミリ秒前後のCPU処理を必要としていました。
一方、今回のキャッシュ化により、2度目以降の検索は数ミリ秒で完了するようになりました。
スパムの投稿パターンにも依りますが、今のところデフォルトの設定で90%以上のヒット率をキープしています。
キャッシュの実装には Transient API を利用していて、デフォルトでは最大10個の IP アドレスを3600秒間保持するようにしています。
本プラグインの設定画面で上のようにならない場合、一旦本プラグインを「停止」し、再度「有効化」して下さい。自動的に設定値を更新します。
エラーメッセージ処理の改善
API 提供元の都合により、サービスに障害が起きたり停止したりすることがあります。例えば smart-ip.net はサイト自体が停止してしまったため、前バージョンの 1.0.3 で外しています。
このような状況を分析し易くするため、サービスが返すエラーメッセージや HTTP レベルで起きるエラーを検索タブで確認できるようにしました。
まぁ、ユーザーの皆さんにはあまり関係のない機能ですネ。
ユーザーエージェント文字列の変更
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.bin
と ip2location.class.php
というクラス・ライブラリのファイルです。
またデータベースを オープンソースの無料データベース に差し替えれば、さらに幸せになれます。メールアドレスの登録と IP2Location.com への 帰属リンク張りが必要 ですが、IPv6 もカバーされているので、* 他の サービス API を呼び出す頻度がグッと減ります。
* IPv6 の無料データベースは、こちら でした。
私は About ページにリンクを貼った上で DB5.LITE を利用していますが、月に一度、データベース更新の案内が届くぐらいで、特に面倒なく使えています。
今後の構想
今回のキャッシュ化により、例えば WordPress の管理領域にアクセスしに来た IP アドレスを記録して弾く仕様を追加すれば、セキュリティ向上にもつながるかな? などと夢想しています。
もっとも、優れた セキュリティ用プラグイン はたくさんありますし、より本質的な対策をすべきですけどネ。
まぁ、今後も細々とメンテはしていきますので、良かったら使ってやって下さい 。