【GeoIP2】GeoLite2のインストールと使い方 (IPから地域情報、ネットワークの取得など)

1 GeoIP2、およびGeoLite2とは

本記事では、
GeoIP2」の無料版である「GeoLite2」の利用方法について説明します。

GeoIP2」は、
MaxMind社が提供する、 特定のIPアドレスに関する情報を提供するサービスの名前です。

IPアドレスを基に、IPアドレスの属性である、
国や地域の情報、ISPといったネットワーク情報を取得できるというサービスになっています。

利用者には、独自形式のデータベースかCSV形式のファイルと、
独自形式データベースへのアクセスAPIライブラリという形で提供されます。

有料版と無料版があります。

無料版は、GeoLite2といい、
CityCountryASN(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

これらデータベースのダウンロード・ページは、以下に示す通りです。

Download GeoIP Databases

ダウンロード・ページを開く前に、MaxMindにログインしている必要があります。
ログインしていな場合は、図2.2-2に示す「Login」のページが開きます。

ダウンロードした”*.tar.gz”のファイルの内容は、次のようになっています。

データベース本体の”*.mmdb”ファイルは、
Linux系で運用する場合、次のディレクトリ下に置くと良いでしょう。

データベースの自動アップデートを有効にした際の、
デフォルトのデータベースを置くディレクトリが上記のようになっているからです。

ディレクトリを変更することも可能ですが、
変更すべき未知のパラメータががあるのかもしれませんので、
上記のようにしておく方が面倒が少なくなります。

2.3 GeoLite2データベースの自動更新

本節では、GeoLite2データベース自動更新の設定について説明します。

GeoLite2データベースの自動更新ができるようになるには、
次の4つのステップを経なければなりません。

(1)ライセンスキーの作成
(2) GeoIP2データベース更新プログラム(geoipupdate)のインストール
(3) GeoIP.confファイルの編集
(4) geoipupdatecron設定

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)、その他の版があります。

本記事では、CentOSRHELでのインストールについて示します。
他のOSの場合については、次のページをご覧いただければと思います。

maxmind/geoipupdate

geoupdateのインストールパッケージは、次のページよりダウンロードします。

https://github.com/maxmind/geoipupdate/releases

x64CentOSRHELの場合は、次のパッケージをダウンロードします。

geoipupdate_4_9_0_linux_amd64.rpm

4_9_0   version no.
amd64  CPU architecture

そして、root権限で次のコマンドを実行します。

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”は、次のページで確認することができます。

https://www.maxminf.com/en/accounts/738339/geoip/downloads

(3)データベース・ディレクトリの変更
データベースのデフォルトのディレクトリは、次のようになっています。

これを違うディレクトリに変更する場合は、次の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時にデータベースを更新する場合の例です。

3 PHP版GeoIP2 APIライブラリ

GeoIP2データベースのアクセスAPIは、
Web APIと次の言語向けのものが用意されているそうです。

.NET(C#)
Java
Node.js
Perl(非推奨)
PHP
Python
Ruby

本記事では、PHP版のAPIライブラリについて示します。

実はわたし、
Webやユーザーインタフェースにかかわる分野の実務経験はゼロなのです。
この分野については、
ここ数カ月前から勉強し始めましたのでほとんど素人に近い状態です。

ですので、本章では、わたしの理解できるところだけとなってしまいます。
もし誤っている箇所が見つかりましたら、連絡ご指摘いただければ幸いです。

https://dotiga.jp/contact

なお、GeoIPデータベースである無償版GeoLite2の利用に際しては、
下に示す表記が必要とのことです。
GeoLite2を利用しているページには、MaxMindへのリンクが必要です。

3.1 GeoIP2 APIのインストール

PHP版APIのインストールはComposerを使います。
Github上の公式ページが参考になります。

maxmind / GeoIP2-php

3.1.1 Composerのインストール

PHP版GeoIP2 APIライブラリのインストールには、Composerを使います。

まず、Composerをダウンロードします。

成功すると”composer.phar”というファイルができるので、
/usr/local/bin”に配置してコマンドとして実行できるようにします。

3.1.2 GeoIP2 APIインストール

任意のディレクトリ下で、以下のコマンドを実行するとGeoIP2 APIがインストールされます。

ディレクトリの下に、下に示すように2つのファイルとディレクトリが展開されます。

3.2 GeoLite2データベースアクセスPHPサンプル

データベースのアクセスは、Readerクラスがを受け持ちます。

Readerクラスのpublic関数や、publicメンバー変数などの仕様については、
次のページでご確認ください。

Reader

図3.2-1Cityデータベースアクセスのコード例を示します。
実行結果は、図3.2-2のようになります。

3.3 Cityデータベースのレコード構成と主要なメンバー

C系以外の言語が不得手な人間にとっちゃ、
PHPのクラス・インターフェース仕様は分かりにくい。

ということで、
よく参照されると思われるクラス・メンバー変数を表3.3-1に整理してみました。

【備考】
ISO-3166 国コードと ISO-639 言語コード

以上

本文中の記述に、
誤字や脱字、誤った内容の記述など見つかりましたら、
下に示すフォームでご連絡いただければ幸いです。

お問い合わせ