1 GeoIP2、およびGeoLite2とは
本記事では、
「GeoIP2」の無料版である「GeoLite2」の利用方法について説明します。
「GeoIP2」は、
MaxMind社が提供する、
特定のIPアドレスに関する情報を提供するサービスの名前です。
IPアドレスを基に、IPアドレスの属性である、
国や地域の情報、ISPといったネットワーク情報を取得できるというサービスになっています。
利用者には、独自形式のデータベースかCSV形式のファイルと、
独自形式データベースへのアクセスAPIライブラリという形で提供されます。
有料版と無料版があります。
無料版は、GeoLite2といい、
City、Country、ASN(AS番号)の3種類のデータベースと、
アクセスAPIライブラリが提供されます。
このサービスを知るまでは、
迷惑メールやサーバーの不正アクセス元探るために、
”Whois”サービスを利用していました。
Whoisのデータベースは、下に示すように、
いくつか地域(RIR: Regional Internet Registry)に分かれています。
・ARIN(北アメリカとサブサハラアフリカ)
・APNIC(アジア太平洋地域)
・LACNIC(南・中央アメリカとカリブ海地域)
・RIPE NCC(ヨーロッパと北アフリカ)
このため、目的のIPアドレスに関する情報を得るには、
場合によっては何度もRIRを変更して検索しなければなりません。
けっこう面倒な作業でした。
「IPひろば」というサイトがありますが、
有料化してからは欲しい情報が得にくくなり、
使い難くなったような気がします。
そんななかで、「GeoIP2」のサービスを知ったということです。
本記事では、この「GeoIP2」の無料版「GeoLite2」の利用方法について説明していきます。
「GeoLite2」を利用するには、次の2つの大きな山があります。
(1) GeoLite2データベースの入手とローカル環境への設置
(2) データベース・アクセスのためのAPIライブラリの入手と使い方
本記事は、これらのことを中心に説明していきます。
どちらも長いステップではなく、また難しいものではありません。
難しすぎて、途中で諦めてしまうようなものではないと思います。
GeoLite2データベースのアクセスAPIは、
Web APIと次の言語向けのものが用意されているそうです。
.NET(C#)
Java
Node.js
Perl(非推奨)
PHP
Python
Ruby
本記事では、PHP版のAPIライブラリの利用方法について示します。
HTMLだと、
思うように編集することは難しく、やろうすればとっても時間が掛かります。
ですので、本記事の元となっているWordで作成したPDFを
ページ最後に貼り付けました。
役に立てていただければ、うれしく思います。
このPDFファイルは、自由に配布されてもかまいません。
ただし、再配布の際には、
入手元と著者名は明らかにしてください。
なお、上のPDFファイルの内容、また本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。
2 GeoLite2データベースの入手と配置
本章では、下に示す3つのポイントから、
GeoLite2データベースの入手とローカル環境への設置について示します。
(1) MaxMindアカウントの作成
(2) GeoLite2データベースのダウンロード
(3) GeoLite2データベースの自動更新
2.1 MaxMindアカウントの作成
GeoLite2データベースを入手するには、MaxMindへのアカウント登録が必要です。
アカウント登録の入力自体は説明の必要は無いと思いますので、
本節では「GeoLite2 Sign Up」ページを開くまでの過程だけを示します。
まず、下に示すURLから、MaxMindのページを開きます。
https://www.maxmind.com/en/home
トップメニューの「Products」から、「GeoLite2 Free Geolocation Data」を選択します。
「Accessing GeoLite2 Free Geolocation Data」で、
「Sign Up for GeoLite2」をクリックします。
GeoLite2のSign UPページが、図2.1-3に示すように開きます。
各項目を入力して、
「I agree to the terms of the GeoLite2 End User License Agreement.」をチェック、
「Continue」をクリックします。
以下、省略。
この時に設定した下のものが
次回MaxMindへログインするためのキーとなります。
ユーザー名(メールアドレス)
パスワード
2.2 GeoLite2データベースのダウンロード
GeoLite2で、無料でダウンロード可能なデータベースは、 表2.2-1に示す6種類となります。
ちなみに、
無料版と有料版の違いは、
更新頻度と思われるのかもしれませんが「データの精度」だそうです。
【備考】
yyyymmdd : ファイルをダウンロードした年月日
GeoIp2¥Model¥Asn
GeoIp2¥Model¥City
GeoIp2\Model\Country
これらデータベースのダウンロード・ページは、以下に示す通りです。
ダウンロード・ページを開く前に、MaxMindにログインしている必要があります。
ログインしていな場合は、図2.2-2に示す「Login」のページが開きます。
ダウンロードした”*.tar.gz”のファイルの内容は、次のようになっています。
データベース本体の”*.mmdb”ファイルは、
Linux系で運用する場合、次のディレクトリ下に置くと良いでしょう。
1 |
/usr/share/GeoIP |
データベースの自動アップデートを有効にした際の、
デフォルトのデータベースを置くディレクトリが上記のようになっているからです。
ディレクトリを変更することも可能ですが、
変更すべき未知のパラメータががあるのかもしれませんので、
上記のようにしておく方が面倒が少なくなります。
2.3 GeoLite2データベースの自動更新
本節では、GeoLite2データベース自動更新の設定について説明します。
GeoLite2データベースの自動更新ができるようになるには、
次の4つのステップを経なければなりません。
(1)ライセンスキーの作成
(2) GeoIP2データベース更新プログラム(geoipupdate)のインストール
(3) GeoIP.confファイルの編集
(4) geoipupdateのcron設定
2.3.1 ライセンスキーの作成
GeoIP2のデータベース自動更新を行うには、ライセンスキーが必要です。
GeoLite2は、無料で取得することができます。
まずは、MaxMindにログインします。
https://www.maxmind.com/en/account/login
左メニューの「Account」から、「Manage License Keys」を選択します。
図2.3-2において、 「Generate new license key」をクリックします。
GeoIPからではなく、GeoIP2から利用するのであれば、
図2.3-3では「No」を選択します。
ここで「Confirm」をクリックすれば、ライセンスキーが作成されます。
ライセンスキー全桁の表示は、
この一回のみですので、ここできちんとメモしておくようにしましょう。
「Account」マネージで表示されるライセンスキーは、先頭の文字数桁だけです。
ライセンスキー全体が分からなくなってしまった場合は、再作成しなければなりません。
2.3.2 GeoIP2データベース更新(geoipupdate)のインストール
GeoIPデータベース更新プログラム(以降、”geoipupdate”と記す)は、
Linux(x86, x64, Arm)、Windows(x86, x64)、macOS(x64, Arm)、その他の版があります。
本記事では、CentOS、RHELでのインストールについて示します。
他のOSの場合については、次のページをご覧いただければと思います。
geoupdateのインストールパッケージは、次のページよりダウンロードします。
https://github.com/maxmind/geoipupdate/releases
x64のCentOS、RHELの場合は、次のパッケージをダウンロードします。
geoipupdate_4_9_0_linux_amd64.rpm
4_9_0 version no.
amd64 CPU architecture
そして、root権限で次のコマンドを実行します。
1 |
# rpm -Uvhi geoipupdate_4.9_0_linux_amd64.rpm |
2つのファイルが、その右に示すディレクトリ下に配置されます。
2.3.3 GeoIP.confの編集
/etc/GeoIP.confファイルの内容は、図3.3-1に示すようになっています。
(1)AccountID、LicenseKey
あなたのアカウントIDとライセンスキーに書き換えてください。
(2)EditionIDs
”EditionIDs”の行は、自動更新すべきデータベースの”Edition ID”に書き換えてください。
”GeoLite2 ASN”を自動更新したい場合は、”GeoLite2-ASN”となります。
CSV形式のデータベースの”Edition ID”は、次のページで確認することができます。
(3)データベース・ディレクトリの変更
データベースのデフォルトのディレクトリは、次のようになっています。
1 |
/usr/share/GeoIP |
これを違うディレクトリに変更する場合は、次の2行を追加します。
2.3.4 geoipupdateのcron設定
データベースの更新間隔は、”Twice weekly”とありますから、1週に2度のようです。
下に示すページで、最近数回の更新日が確認できます。
https://www.maxmind.com/en/accounts/738339/geoip/downloads?show_all_dates=1
ですが、1週間に1度更新すれば実用上問題無いと思います。
下に示す設定は、毎週月曜の午前3時にデータベースを更新する場合の例です。
1 |
0 3 * * 1 /usr/bin/geoipupdate |
3 PHP版GeoIP2 APIライブラリ
GeoIP2データベースのアクセスAPIは、
Web APIと次の言語向けのものが用意されているそうです。
.NET(C#)
Java
Node.js
Perl(非推奨)
PHP
Python
Ruby
本記事では、PHP版のAPIライブラリについて示します。
実はわたし、
Webやユーザーインタフェースにかかわる分野の実務経験はゼロなのです。
この分野については、
ここ数カ月前から勉強し始めましたのでほとんど素人に近い状態です。
ですので、本章では、わたしの理解できるところだけとなってしまいます。
もし誤っている箇所が見つかりましたら、連絡ご指摘いただければ幸いです。
https://dotiga.software/contact
なお、GeoIPデータベースである無償版GeoLite2の利用に際しては、
下に示す表記が必要とのことです。
GeoLite2を利用しているページには、MaxMindへのリンクが必要です。
1 2 |
This product includes GeoLite2 data created by MaxMind, available from <a href="https://www.maxmind.com">https://www.maxmind.com</a>. |
3.1 GeoIP2 APIのインストール
PHP版APIのインストールはComposerを使います。
Github上の公式ページが参考になります。
3.1.1 Composerのインストール
PHP版GeoIP2 APIライブラリのインストールには、Composerを使います。
まず、Composerをダウンロードします。
1 |
$ curl -sS https://getcomposer.org/installer | php |
成功すると”composer.phar”というファイルができるので、
”/usr/local/bin”に配置してコマンドとして実行できるようにします。
1 |
# mv composer.phar /usr/local/bin/composer |
3.1.2 GeoIP2 APIインストール
任意のディレクトリ下で、以下のコマンドを実行するとGeoIP2 APIがインストールされます。
1 |
$ composer require geoip2/geoip2:~2.0 |
ディレクトリの下に、下に示すように2つのファイルとディレクトリが展開されます。
3.2 GeoLite2データベースアクセスPHPサンプル
データベースのアクセスは、Readerクラスがを受け持ちます。
Readerクラスのpublic関数や、publicメンバー変数などの仕様については、
次のページでご確認ください。
図3.2-1にCityデータベースアクセスのコード例を示します。
実行結果は、図3.2-2のようになります。
3.3 Cityデータベースのレコード構成と主要なメンバー
C系以外の言語が不得手な人間にとっちゃ、
PHPのクラス・インターフェース仕様は分かりにくい。
ということで、
よく参照されると思われるクラス・メンバー変数を表3.3-1に整理してみました。
以上
本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。