apacheモジュールのインストール
モジュールがインストール可能か確認
dnf search mod_maxminddb
インストールされているかの確認
dnf list installed | grep mod_maxminddb
インストール
dnf install mod_maxminddb
データベースのインストール
データベースをダウンロードするには、MaxMindのサイトにアクセスして、アカウントを作る必要がある。
アカウント作成が完了したら、ログインして、GeoLite2データベースをダウンロードする。
国別のIP制限をしたいので GeoLite2 Country
を選択。
ダウンロードしたファイルをサーバーにアップロードして解凍。
tar -xvzf GeoLite2-Country.tar.gz
GeoLite2-Country.mmdbというファイルがあるので/usr/share/GeoIPに移動。
sudo mv GeoLite2-Country.mmdb /usr/share/GeoIP/
/usr/share/
は、共有データファイルやアプリケーションデータを配置するための標準的なディレクトリ。読み取り専用のデータを配置するための場所。
shareディレクトリにgeoipというディレクトリがなければ作る
sudo mkdir -p /usr/share/GeoIP
sudo chmod 755 /usr/share/GeoIP
apacheの設定
/etc/httpd/conf.d/ に maxminddb.conf というファイルができていたのでそこの記述する
<IfModule mod_maxminddb.c>
MaxMindDBEnable On
MaxMindDBFile COUNTRY_DB /usr/share/GeoIP/GeoLite2-Country.mmdb
MaxMindDBEnv COUNTRY_CODE COUNTRY_DB/country/iso_code
</IfModule>
# ロシア、ブラジル、北朝鮮、ウクライナ、イランを拒否
<Location "/">
SetEnvIf MM_COUNTRY_CODE ^(RU|BR|KP|UA|IR) BlockCountry
Deny from env=BlockCountry
</Location>
設定を反映させるために再起動
sudo systemctl restart httpd
データベースの自動更新
地域の割り振られたIPアドレスの情報は常に更新されるので、データーベースも定期的に更新する必要がある。
IPv4アドレス移転履歴
IPv4アドレス移転履歴 - JPNIC
データベースの更新には geoipupdate を利用する
geoipupdate がインストールされているか
dnf list installed | grep geoipupdate
インストール
sudo dnf install geoipupdate
geoipupdate がリポジトリにない場合、raven リポジトリを追加
# almalinux9用
$ sudo dnf install https://pkgs.dyn.su/el9/base/x86_64/raven-release.el9.noarch.rpm
リポジトリがインストールできたかの確認
sudo dnf repolist
GeoIP.confに以下の情報を追加
AccountID xxxx #なんらかの数字(メールアドレスではない!)
#LicenseKey YOUR_LICENSE_KEY_HERE
LicenseKey 文字列 # 公式ページにログイン後に発行が必要
EditionIDs GeoLite2-Country GeoLite2-City # 必要なデータベース名を指定
(必要であれば)
# DatabaseDirectory DATADIR #データベースの保存先(デフォルトから変更しているなら必要)
更新できるかテスト
sudo geoipupdate
ファイルを日付を見て更新できたか確認
sudo ls -l /usr/share/GeoIP
実行したらメールを受け取りたいのでシェルスクリプトに記述
geoip_update.sh
#!/bin/sh
# #!で始まる一行目の記述はインタプリタの指定
# シェルスクリプトの最初に書くおまじない
#monit の unmonitor をリフレッシュ
/usr/bin/geoipupdate
{
echo "From: GeoIP_db_Update <myshellscript@myserver.com>"
echo "To: abc@example.com"
echo "Subject:サーバーのGeoIP_db_Update"
echo
echo 表現2024サーバーがGeoIPのデータベースをアップデートした
echo "毎週月曜日にアップデートをかけている"
} | /usr/sbin/sendmail -i -t
crontabに追記
#月曜日am03:30 execution
30 3 * * 1 /var/myshellscript/geoip_update.sh
その他
MaxMindのライセンスキー取得方法はこちらが分かりやすい