はじめに
みなさま、mmdblookupコマンドを活用されていますでしょうか?
運用しているWebサーバーが突然のアクセス集中にみまわれて、いくつかのIPアドレスから
大量にアクセスされていといったケースが最近増えている気がします。
IPアドレスの国を確認して、海外の場合は、一時的に対象IPアドレスをドロップするといった
対応をとります。
この際の、IPアドレスから国を確認するために利用するのがmmdblookupというコマンドです。
なお、geoiplookupというコマンドもありますが、古い形式のデータベースを利用しており、
現在は更新もされていないことからmmdblookupの方が精度が高いと思われます。
そんな、mmdblookupコマンドについて、紹介させていただきます。
環境
OS : AlmaLinux 9
mmdblookupバージョン : 1.5.2
使い方
まずは事前の準備です。IPアドレスの検索用のデータベースを利用するためには、
MaxMaindのWebサイトにアカウントを登録する必要があります。
https://www.maxmind.com/en/geolite2/signup
必要事項を入力の上、登録を行います。
必要事項を入力の上、登録を行います。
登録ができたら、サインインからログインします。
https://www.maxmind.com/en/home
ログインしたら、MY ACCOUNT から Manage license keys にて、ライセンスキーと作成します。 
ライセンスキーを作成できたら、アカウントIDとライセンスキーを控えておきます。
続いて、データベースを取得するために、geoipupdateコマンドをインストールします。
GitbubからRPMファイルをダウンロードしてきて、インストールします。
$ curl -s https://api.github.com/repos/maxmind/geoipupdate/releases/latest | grep browser_download_url
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_checksums.txt"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_darwin_amd64.tar.gz"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_darwin_arm64.tar.gz"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_freebsd_386.tar.gz"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_freebsd_amd64.tar.gz"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_386.deb"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_386.rpm"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_386.tar.gz"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_amd64.deb"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_amd64.rpm"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_amd64.tar.gz"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_arm64.deb"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_arm64.rpm"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_arm64.tar.gz"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_armv6.deb"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_armv6.rpm"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_armv6.tar.gz"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_openbsd_386.tar.gz"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_openbsd_amd64.tar.gz"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_windows_386.zip"
"browser_download_url": "https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_windows_amd64.zip"
$
現時点では、v8.0.0が最新版のようなので、環境に合わせてgeoipupdate_8.0.0_linux_amd64.rpmをダウンロードしてインストールします。
$ curl -LO https://github.com/maxmind/geoipupdate/releases/download/v8.0.0/geoipupdate_8.0.0_linux_amd64.rpm
$ sudo dnf install ./geoipupdate_8.0.0_linux_amd64.rpm
/etc/GeoIP.conf を編集して、控えていたアカウントIDとライセンスキー記述します。
$cat /etc/GeoIP.conf
# GeoIP.conf file for `geoipupdate` program, for versions >= 3.1.1.
# Used to update GeoIP databases from https://www.maxmind.com.
# For more information about this config file, visit the docs at
# https://dev.maxmind.com/geoip/updating-databases.
# `AccountID` is from your MaxMind account.
AccountID XXXXXXXX
# `LicenseKey` is from your MaxMind account.
LicenseKey XXXXXXXXXXXXXXXX
# `EditionIDs` is from your MaxMind account.
EditionIDs GeoLite2-ASN GeoLite2-City GeoLite2-Country
$
この状態で、geoipupdateを実行すればデータベースファイルがダウンロードされます。
$ sudo geoipupdate
$
$ ls -la /usr/share/GeoIP/*mmdb
-rw-r--r-- 1 root root 12138498 Jul 18 18:31 /usr/share/GeoIP/GeoLite2-ASN.mmdb
-rw-r--r-- 1 root root 65977666 Jul 18 17:30 /usr/share/GeoIP/GeoLite2-City.mmdb
-rw-r--r-- 1 root root 8809422 Jul 18 17:30 /usr/share/GeoIP/GeoLite2-Country.mmdb
$
mmdblookupコマンドは、libmaxminddb パッケージをインストールすれば使えるようになります。
これで事前の準備が整いましたので、試してみましょう。
$ mmdblookup -f /usr/share/GeoIP/GeoLite2-Country.mmdb -i 8.8.8.8 country iso_code
"US" <utf8_string>
$
GoogleのパブリックDNSのIPアドレスを指定して、国コードを確認してみました。
-f で参照するデータベースファイルを指定して、-i で対象のIPアドレスを指定します。
確認結果はJSON形式で出力されますが、これだけの指定だと他の情報も出力されます。
加えて、cuntory iso_code を指定することで、知りたい国コードのみが出力されます。
まとめ
いかがでしたか?
実際の運用では、指定する引数が多いので、IPのみ指定で確認できるよう、ラッパースクリプトを作成して活用しています。
なお、データベースを定期的に更新しておく必要があります。geoipupdateコマンドをcronに登録して、自動更新できるようにしておきましょう。
ぜひとも、mmdblookupコマンドを活用してみてください。

