半年ぶり更新。
(ノ・・)ン。。。。。。(((●コロコロッ
ケータイサイトを作ると必ず考慮することになる
IP制限。
端末IDを使う会員制サイトを作る時はまずつけることになる。
一般的な方法はApacheのmod_access(デフォルトで装備)を利用する。
Order Deny,Allow
Deny from all
Allow from xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx
Allow from xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx
Allow from xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx
すべてのアクセスを拒否した後、
アクセス承認するIPアドレスの一覧を記述する。
ただ、毎回思うのが、
IPのメンテナンスってもうちょっとわかりやすくならないかなぁ。
IP一つに対してAllow Fromを一つずつ書いていくと、
縦長になって非常に見辛い。
かといって一つのAllow Fromに複数のIPを書くと
追加されたIPがすでに登録されたものかどうか探しにくい。
数ヶ月に一回ぐらいの作業なので、
それでも言いといわれればそれまでなのだが、
もうちょっとリスト化されてたりファイル化されていたりして欲しいところ。
最近、Klabがそう言ったものをリリースした。
mod_cidr_lookup(Apache License Version 2.0)
http://sourceforge.net/projects/modcidrlookup/
アクセス元IPアドレスから任意の環境変数を定義するApacheモジュール。
IPアドレスのメンテナンスする上でもファイル化されているのは素晴らしい。
SetEnvIfで利用出来るのであれば、
IP制限以外でも、
アクセス元IPごとにログを出し分けたり、
リライトしたりと用途は多い。
しかし、以前からこんなのはなかったのか?と疑問に思い探してみると、
やっぱりあった。
mod_ipenv(GPL)
http://mod-ipenv.sourceforge.net/ja/
こちらもアクセス元IPアドレスから任意の環境変数を定義するApacheモジュール。
どっちを使うか
軽く比較しながら内容を検証してみようかと。
[More:]
●インストール
mod_ipenv# /usr/sbin/apxs -c -i mod_ipenv.c
mod_cidr_lookup# /usr/sbin/apxs -c -i mod_cidr_lookup.c
●設定
mod_ipenv SetEnvIp access/localhost.conf LOCAL
Order deny,allow
deny from all
allow from LOCAL
localhost.confには
#コメント
192.168.0.1
192.168.0.
192.168.0.0/255.255.255.0
192.168.0.0/24
host.example.com
.example.com
mod_cidr_lookup CIDRFile "/etc/httpd/access/localhost"
SetEnvIf X_CLIENT_TYPE "^localhost" LOCAL
Order deny,allow
deny from all
allow from LOCAL
localhostには
192.168.0.1
192.168.0.0/24
●考察
設定方法に若干違いはあるものの、
「ファイルからIPを取り出し環境変数を設定する」
というところは全く同じ。
・
mod_cidr_lookupのメリット
- ファイル指定にワイルドカードが使える
- 高速動作
- 将来性
ファイルを特定のディレクトリに置いておき、
ワイルドカードで指定出来るのは便利。
リブートが必要と言うことは、
Apacheロード時にファイルを読み込み、
それ以降はファイルを見ていないと言うこと。
なので、mod_ipenvより
mod_cidr_lookupの方が高速に動作すると思われる。
NASなどを利用してファイルを一本化する方法もこちらならOKだ。
あと、個人でやっている上、2006年で止まっている
mod_ipenvと比べて、
こちらの方が将来性がありそう。
・
mod_ipenvのメリット
- コメントアウト、不完全なIPやドメインが使える
- ファイル名を考慮しなくてよい
- リブート不要
- .htaccessで利用可
使い勝手に関しては
mod_ipenvの方に分がある。
不完全なIPとかはクローラー指定などで使うこともあるので、
これがあると便利。
環境変数とファイル名が連動していないので、
その後、正規表現で書き直さなくて済む。
一見すると使い勝手の良い
mod_ipenvの方が良いかなと言う気はするが、
ファイル数、IPアドレスが多くなってくると遅くなりそう。
IPの格納したファイルは必ずサーバのローカルに置いておく必要があるので、
rsyncなどアップ方法は考慮が必要か。
mod_cidr_lookupを利用して負荷試験をしてみたが、
秒間10や20アクセスでは全然問題なく動作していた。
リリース当初不安定動作していたsetenvifの問題も最新バージョン(1.2)では解消されていた。
将来性を考えてしばらく
mod_cidr_lookupを使ってみよう。
「コメントアウト、不完全なIPやドメイン」
というところは是非とも対応して欲しい。