こちらのサイトに国別に発行されているIPアドレス(ipv4)が公開されています。
http://ftp.apnic.net/pub/stats/apnic/delegated-apnic-extended-latest
http://ftp.arin.net/pub/stats/arin/delegated-arin-extended-latest
http://ftp.ripe.net/pub/stats/ripencc/delegated-ripencc-extended-latest
http://ftp.lacnic.net/pub/stats/lacnic/delegated-lacnic-extended-latest
http://ftp.afrinic.net/pub/stats/afrinic/delegated-afrinic-extended-latest
(それぞれ大量のリストが表示されます)
例えば日本国に発行されているIPアドレスを知りたい場合、2ケタの国識別IDの"JP"で検索すると以下のような行が見つかります。
"apnic|JP|ipv4|121.58.176.0|2048|"
ここの4列目の121.58.176.0がネットワークアドレスで5列目の2048がネットマスク値に相当します。ちなみにこの定義では121.58.176.0~121.58.183.255の範囲となります。
このサイトに公開されている、各国割り当てブロックをすべてデータベース化し、Webサービス等にアクセスしてきたリモートIPと比較することで IPアドレスによる制限が可能です(いちおう公的サイトの様なので定期的にデータを取得してパース&DB化を行っても問題は無いと思います)
Linux系OSではiptablesというファイアウォールが利用できる場合がありますのでIPブロックの一例を示します。拒否設定例(58.221.55.0~58.221.55.255)
# /sbin/iptables -I INPUT -s 58.221.55.0/24 -j DROP
(設定を間違えるとサーバにアクセスできなくなる可能性があります)
設定確認方法
# /sbin/iptables -L
ちなみにブラウザの使用言語属性によって国を判別する方法もありますが、ユーザが任意に変更できるのでかなり緩い方式となります。
コメント