Rocky Linux 9のApache 2.4でmod_maxminddbを使って国制限をしてみよう

Rocky Linux 9でApache2.4にmod_maxminddbを使って国別アクセス制限を行う手順は以下の通りです。


1. 必要パッケージのインストール

EPELリポジトリと必要な開発ツール、ライブラリをインストールします。
sudo dnf install epel-release
sudo dnf install httpd httpd-devel gcc cmake make git libmaxminddb libmaxminddb-devel redhat-rpm-config


2. mod_maxminddb のダウンロードとインストール

最新バージョンを GitHub から取得し、ビルド・インストールします。
wget https://github.com/maxmind/mod_maxminddb/releases/download/1.2.0/mod_maxminddb-1.2.0.tar.gz
tar xvfz mod_maxminddb-1.2.0.tar.gz
cd mod_maxminddb-1.2.0
./configure --with-apxs=/usr/bin/apxs
make
sudo make install
※apxsのパスは環境によって異なる場合があります。


3. モジュールの読み込み設定

/etc/httpd/conf.modules.d/00-maxminddb.conf などに以下を記述して、モジュールを読み込みます。
LoadModule maxminddb_module modules/mod_maxminddb.so


4. GeoLite2 データベースの配置

MaxMind公式サイトから「GeoLite2-Country.mmdb」などのデータベースファイルをダウンロードし、/usr/share/GeoIP/ に配置します。
sudo mkdir -p /usr/share/GeoIP/
sudo wget https://your-download-link/GeoLite2-Country.mmdb -O /usr/share/GeoIP/GeoLite2-Country.mmdb
※MaxMind公式サイトでアカウント登録が必要です。


5. Apache 設定ファイルの編集

例: 日本(JP)とアメリカ(US)のみ許可
/etc/httpd/conf.d/geoip.conf などに以下を追加します。
<IfModule mod_maxminddb.c>
    MaxMindDBEnable On
    MaxMindDBFile DB /usr/share/GeoIP/GeoLite2-Country.mmdb
    MaxMindDBEnv MM_COUNTRY_CODE DB/country/iso_code
</IfModule>
<Directory "/var/www/html">
    Require all granted
    SetEnvIf MM_COUNTRY_CODE ^(JP|US)$ AllowCountry
    Require env AllowCountry
</Directory>
※対象ディレクトリが/var/www/htmlの場合です。
※他のディレクトリやバーチャルホストにも同様に設定できます。


6. 設定のテストとApache再起動

sudo apachectl configtest
sudo systemctl restart httpd


7. 動作確認

海外IPからアクセスしてブロックされるか、国内IPからアクセスして許可されるかを確認してください。
ポイント
MaxMindDBのパスや国コードは環境・要件に合わせて調整してください。
データベースは定期的に更新してください。
SetEnvIfの正規表現部分で許可・拒否する国を追加・削除できます。


この手順で mod_maxminddb を使った国別アクセス制限が可能です。

関連書籍
Apacheクックブック 第2版 ―Webサーバ管理者のためのレシピ集 Apacheハンドブック サーバ構築の実際がわかる Apache[実践]運用/管理
※本記事はアフィリエイトリンクを含みます。

コメント