flatray.com | 戻る 更新日時: 2021-01-08

MaxMind GeoLite2 を Apache httpd で利用する

GeoLite2 を Apache httpd で利用する方法を解説します。 (配布元の README.md に大体書いてありますが)

インストール

パッケージが提供されているならそれをインストールしてください。提供されてない場合は手動でコンパイル・インストールする必要があります。 (Debian系のLinuxディストリビューションでは Apache httpd 用モジュールのパッケージが用意されてない)

httpd の設定ファイル

Debian系だと /etc/apache2/sites-enabled の下にWebサイトの設定ファイルを用意してるでしょうから、そこに記述する。

モジュールの読み込み例:

    <IfModule mod_maxminddb.c>
        MaxMindDBEnable On
        MaxMindDBFile DB /usr/share/GeoLite2/GeoLite2-Country.mmdb
        MaxMindDBEnv MM_COUNTRY_CODE DB/country/iso_code
    </IfModule>

許可リスト方式(指定した国だけアクセスを許可する)の例:

    SetEnvIf MM_COUNTRY_CODE ^JP AllowCountry
    SetEnvIf MM_COUNTRY_CODE ^US AllowCountry
    Require env AllowCountry
    Require all denied

拒否リスト方式(指定した国のアクセスを拒否する)の例:

    SetEnvIf MM_COUNTRY_CODE ^CN DenyCountry
    SetEnvIf MM_COUNTRY_CODE ^(RU|BR) DenyCountry
    Require not env DenyCountry

SetEnvIf の行は複数行列挙しても正規表現で一行にまとめても機能としては同じです。 好みの方で記述してください。

拒否リストで RewriteEngine を使う場合は、上記の Require not 行の代わりに例えばこう書く:

    RewriteCond %{ENV:DenyCountry} 1
    RewriteRule ^.*$ http://127.0.0.1/ [R=404,L]

アクセスログ

アクセスログに国コードを残したい場合は LogFormat に %{MM_COUNTRY_CODE}e と記述する。 標準で用意される LogFormat の combined に追加する例:

    LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
    ↓
    LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\" \"%{MM_COUNTRY_CODE}e\"" combined

(以上)