トップページ»2.マイプロダクト»日本人限定のウェブページ

2.マイプロダクト



日本人限定のウェブページ

とある知人からこんな事を聞かれた。 「ホームページで日本人しか見れないページが作りたい。 何とかならないか?」 これに対し私はほぼ即答で「多分無理」と答えた。 その後で「それっぽいことならいくつか方法は考えられるけど、どれも完璧な方法ではない」と続けた。

あまりPCに強い人ではなかったので細かい説明はしなかった。 相手もそんな説明は必要としていない。 だが更に彼は食い下がってきた。 「それでは簡単に実現できて一番効果的な方法は無いか」

なぜそれがやりたいのか理由を聞いてみた。 ここでその内容を書くのは控えるが、なるほど、それなりに問題があって困っているようだ。

ここでふと思い出す。 そういえば去年だったか、某国の大統領のサイトも一時的に自国からのアクセス以外は全て拒否している時期があったっけ。 ニュースでやっていたなぁ。 そういう必要性に迫られるケースもあるのかもしれない。

と言うわけで以下の条件及び制限の下作業をする事にした。




今回行うアクセス制御の条件及び制限

  • 日本国内のIPアドレスだけを許可する様にする
  • 日本国内からのアクセスと偽る方法も存在するので完璧ではない
  • アクセスが集中するとサーバーに大きな負荷をもたらす可能性がある
  • 場合によってはアクセスが日本国内からでも拒否される可能性もある
  • ある程度日数がたったら設定を更新する必要がある

彼には詳しく説明しなかったが、2番目の事項は所謂オープンプロキシーの存在のことを指している。 日本にも数多くオープンプロキシーが存在するが、それを経由されてしまえば全く効果が無い。 またGoogleなどのキャッシュによる閲覧も可能だろう。(つまり必要であれば別途クローラーボット対策も必要になる) IPによるアクセス制限はこの様に直接閲覧できないものの間接的にであれば可能だ。

まぁどのみち見たい人は何が何でも見ようとするだろうし、また反対に面倒くさがりな人はすぐに諦めてしまうだろう。 彼にはその様な事一連を説明、了承してもらいIPによるアクセス制限のみで対策することにした。

尚、彼の使用しているサーバーはapacheであるようなので、実際の方法は本人が一番簡単に作業できるであろう.htaccessで行うことにした。

アクセス制御の方法

前述したとおり今回の話は以下の条件を満たしている必要がある。

  • 使用しているウェブサーバーがApacheであること
  • .htaccessが使用可能な状態になっていること

両方とも調べれば分かることなので各自調べて欲しい。
上の条件を満たしている場合は実際の作業に進もう。

日本国内からのアクセスのみを受け付けたいフォルダを選定して欲しい。 ルート(最上位)のフォルダでも良いがお勧めはしない。 また新規フォルダにアクセス制限をかけたい場合は予めフォルダを作成しておく。

準備が出来たら以下のファイルをダウンロードする。

日本国内のIPアドレスのみ許可する.htaccessファイル
http://akionweb.com/myobjects/apache_allowjp.txt

上記ファイルをダウンロード後.htaccessという名前にリネームし、アクセス制限をかけたいフォルダにアップロードする。 これで作業完了だ。

毎週日曜の毎日夜中(日本時間)に最新版に更新するようにしました。 それに伴い今までapache_allowjp.zipという名前でzipで圧縮していたのを単なるテキストに変更。 使ってる方は定期的に持っていってください。

効果の確認

効果の確認だが、自分が日本国内からアクセスしている場合は当然の事ながら許可されるはずだ。 とりあえずインデックスページなどを作成、アップロード後、自分が閲覧できるか確認しよう。

次に本当に海外からのアクセスが拒否されるかだが、今回はこれをチェックする手段としてAnonymizerを利用してみよう。

Anonymizer
http://www.anonymizer.com/

本来の用途とは違う使い方だが、これを使うことで海外からアクセスしたのと同等になる。 ちなみにAnonymizerを使用するとアメリカ合衆国からのアクセスの扱いとなる。

使い方は上記ページにある「Free Private Surfing」の右横に今回のアクセス制御を施したアドレスを入力する。 これで拒否されればアクセス制御が機能していることになる。

Movable Typeでの応用

応用としてMovable Typeでの利用例を書いておこうと思う。 Movable Typeではコメントやトラックバックといった機能があるが、困ったことにコメントスパム、トラックバックスパムという名前が一般化してしまうほどスパムの被害に遭うことも多い。

私も以前被害に遭ったことがあり、現在は各種スパム対策用のプラグインを入れて対処しているが、折角なので今回書いた方法でアクセス制御を行う方法も書いておこうと思う。

まず上のリンクからファイルをダウンロードし、.htaccessという名前にリネーム後メモ帳などのエディタで開く。 そして以下を一番先頭の行に挿入。

<FilesMatch "(mt-comments|mt-tb)\.cgi$">

続いて最後の行の後ろに続けて以下の行を挿入。

</FilesMatch>

出来たらファイルを保存し、Movable Typeのルート(mt.cgi等があるフォルダ)にアップロードする。

これでコメント、トラックバック共に日本国内のユーザーしか行えないようになるはずだ。

ちなみにこれはMovable Typeに限った事ではない。 全く関係ない他のファイルに対しても有効だ。 その場合はFileMatchの行の後ろにあるパラメーターを正規表現で記述すればいい。

注意

今回作ったアクセス制御のファイルは4月10日現在のARINのデータを元にしている。 情報が古くなってくると正確にアクセス制御しなくなる可能性があるのでご注意頂きたい。

今回私が受けたリクエストは将来にわたって必要というわけではなく、一時的にと言うことだったので、自動的に更新しないことにしたが、リクエストがあれば定期的に更新するのでコメントどうぞ。

2006/07/18追記:上にも追記したのと補足がかぶりますが、1年以上たった最近になって、ダウンロードされる件数が増えてきました。 なぜ?(・_・) というわけで古いままじゃまずいかなと思い、週1度毎日夜中に更新するようにしました。 使ってる方は定期的に更新してください。
2006-12-07追記: 更新頻度を毎日に変更しました。

尚、いつも書いているが、この情報を元に作業して問題が発生したとしても、ウチはいかなる責任もとりませんのでよろしくです。

追記。 ウチのサイトでは今のところ必要ないので使ってません。


投稿日 : 2005年4月10日

この記事に関する言及

このエントリーのトラックバックURL:
http://akionweb.com/mt-tb.cgi/186

このリストは、次のエントリーを参照しています: 日本人限定のウェブページ:

» apache_allowjpを定期的に更新するようにしました from AKI ON WEB
こっちのページに公開している、apache_allowjp(日本人のみアクセスを... [続きを読む]

トラックバック時刻: 2006年7月18日 17:48

» .htaccessで日本に割り当てられているIPだけ許可&スパム対策 from BSDあれこれ
「.htaccessデータ」と「前日差分データ」はこちら 最近、トラックバックス... [続きを読む]

トラックバック時刻: 2006年9月17日 15:27

コメント

crontabで自動取得するスクリプトを作ってみました。
よかったら使ってみてください。

wgetを使っていますが、libwww-perl 等にも置き換え可能です。(少し面倒ですが)

#!/usr/bin/perl

# allowjpのURL
$url_allowjp="http://akionweb.com/myobjects/apache_allowjp.txt";

# stdoutに出力できるhttpgetコマンドを入れる
$fetch="/usr/local/bin/wget -o /dev/null -O /dev/stdout";

# .htaccessを置く場所 (配列にて指定できる)
$htaccess_put[0]="/home/dekasegi/www/d/.htaccess";
$htaccess_put[1]="/home/dekasegi/www/mpeg/.htaccess";

# .htaccessの前に置く記述
$htaccess_before[0]=) {
chomp;
$buf.="$_\n";
}
close(PIPE);

for($i=0; $i$htaccess_put[$i]") || &err("$htaccess_put[$i] write error");
print W $htaccess_before[$i];
print W $buf;
print W $htaccess_after[$i];
close(W);
}
}

sub err {
print STDERR "$_[0]\n";
exit;
}

投稿者 ななみ : 2006年10月11日 08:05

↑のほうこわれていたのでこちら使ってください。

#!/usr/bin/perl

# allowjpのURL
$url_allowjp="http://akionweb.com/myobjects/apache_allowjp.txt";

# stdoutに出力できるhttpgetコマンドを入れる
$fetch="/usr/local/bin/wget -o /dev/null -O /dev/stdout";

# .htaccessを置く場所 (配列にて指定できる)
$htaccess_put[0]="/home/dekasegi/www/d/.htaccess";
$htaccess_put[1]="/home/dekasegi/www/mpeg/.htaccess";

# .htaccessの前に置く記述
$htaccess_before[0]=) {
chomp;
$buf.="$_\n";
}
close(PIPE);

for($i=0; $i$htaccess_put[$i]") || &err("$htaccess_put[$i] write error");
print W $htaccess_before[$i];
print W $buf;
print W $htaccess_after[$i];
close(W);
}
}

sub err {
print STDERR "$_[0]\n";
exit;
}

投稿者 ななみ : 2006年10月11日 08:09

ななみさん、ご無沙汰しております。

スクリプトの提供ありがとうございます。 私のほうではこのリスト自身使っていないので検証していませんが、置く場所を複数指定できるのは、使ってらっしゃる方ならではの機能ですね。

ありがとうございました。

投稿者 AKI ON WEB : 2006年10月12日 12:37

こちらのIPリストに日頃お世話になっている者です。(ありがとうございます!)

今頃コメントを付けて申し訳ないのですが、こちらのIPリストには漏れがあるようですが、IPはどこから取得されているのでしょうか?
今まで知らなかったのですが、日本のプロバイダだからといって必ずしもJPNIC(APNIC?)からIPを割り当てられているとは限らないらしいですね。
他の機関からIPを割り当てられたところはJPNICあるいはAPNICのリストには載らないようで、そういうものは別途該当する機関のリストから拾わなければならないとかなんとか…。
そんなわけで、参考までにこちらのIPリストの収集元をお教えいただけませんでしょうか。
よろしくお願いします。

投稿者 tany : 2008年2月26日 19:19

tanyさんはじめましてこんにちは。

データの収集元は以下の通りです。

arin (www.arin.net)
apnic (www.apnic.net)
lacnic (www.lacnic.net)
ripencc (www.ripe.net)
afrinic (www.afrinic.net)

これらの情報を単純に全て纏めて、中から日本の属性がついているものを抽出している(はず、汗)なので網羅できているのではないかと勝手に思い込んでいましたが…(^^;)

もしこれが漏れているよという情報がありましたらご指摘ください。 私無知&不勉強なのでその可能性も多分にありますので。(^^;)

投稿者 AKI ON WEB : 2008年2月27日 11:25

お返事ありがとうございます。
漏れの件ですが、あれから色々調べたところ、私の勘違いの可能性が濃厚な気がしてきました(汗)

私が漏れだと思ったのは
85.33.244.43.ap.yournet.ne.jp(43.0.0.0/8)
というIPなのですが、このIPをいくつかのIP検索でチェックしたところ、よく使っている検索サイトでは「IPアドレス割当国:日本(都道府県:東京)」と出ました。
しかし別なサイトではオーストラリアと…。
最初に使った検索サイトの情報が間違っていたのか私の見方が悪かったのか、いずれにせよ私の確認不足によるものだと思われます。
情報取得先についてもリストファイル一覧のページに明記してあったようで、二重に失礼致しました。
本当に申し訳ありません。

投稿者 tany : 2008年2月29日 00:04

tanyさんこんにちは。

いえいえとんでもありません。 こちらにもし間違った情報があった場合、指摘していただけたほうが良いですし、全く問題ありませんよ。

私は過去の記事のアップデートをかなり怠っていますし、もしかしたら本当に何か抜けている可能性もありますしね。

ただ間違いを元にむやみやたら叩かれちゃうと凹むのでそれは勘弁していただきたいですけど。(^^;)

情報取得先についても分かりづらいところにあると認識していますので、お気になさらないで下さい。

また何かあったらお願いしますね。

投稿者 AKI ON WEB : 2008年2月29日 08:50

tanyさん

一応こちらに非がないか調べてみました。 ウチのIPも43から始まるので、ちょっと気になりまして…

で結果、確かに43.0.0.0/8はすっぽりと抜け落ちていますね!

元データにもそのアドレスブロックは見当たらないので、もしかしたらレジストリ側で何か動きがあったのかもしれませんね。 元データになければ当然アドレス不明となるわけで…

しばらくかかるかもしれませんが、調査させていただきたいと思います。

情報有難うございました。

投稿者 AKI ON WEB : 2008年2月29日 09:08

43.0.0.0/8はRIR(ARINとかAPNICとかのこと)を経由せずにIANAから直接割り当てられており、現に日本の事業者(Yahoo! BBやFreeBit)が使っています。
以下のページが参考になるかと。
http://d.hatena.ne.jp/preclude/20080622

投稿者 えむけい : 2008年12月27日 18:46

えむけいさんこんにちは。

有益な情報ありがとうございます!
以前調べると言っておきながら忙しさにかまけて放置してました。(汗)

まだちゃんと見られていないのですが、後で時間のあるときに反映させたいと思います。

ありがとうございました。

投稿者 AKI ON WEB : 2008年12月28日 20:29

えむけいさんの情報を元にデータを追加する対応をしました。 ありがとうございました。(^_^)

しかし去年2月の話が今やっと対応って。 遅すぎ。(^^;) すいません。

投稿者 AKI ON WEB : 2009年1月 8日 18:25

このページに対する感想、意見をお寄せ下さい。




保存しますか?

(書式を変更するような一部のHTMLタグを使うことができます)

おことわり

当サイトに掲載している全ての情報は、全て当サイト管理者が個人的、実験的に試した事、又は独自に調査したものです。 従ってその情報に誤りがある可能性も多分にあります。 当サイトの情報をそのまま鵜呑みにされませんようお願い申し上げます。 また当サイトの情報を元に作業されたりする場合はそれをご理解頂いた上で、あくまで自己責任の元で行ってください。

トップページ»2.マイプロダクト»日本人限定のウェブページ