GeoIPで特定の海外IPをブロックする

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のライセンスキー取得方法はこちらが分かりやすい

タイトルとURLをコピーしました