RHEL および CentOS に Apache 用の Mod_GeoIP をインストールする方法
Mod_GeoIP は、訪問者のIP アドレスの地理的位置をApache ウェブサーバーに取得するために使用できる Apache モジュールです。このモジュールを使用すると、 訪問者の国、組織、場所を特定できます。これは、地域広告配信、ターゲット コンテンツ、スパム対策、詐欺検出、リダイレクトに特に役立ちます。/国などに基づいて訪問者をブロックします。
GeoIP モジュールを使用すると、システム管理者はクライアントの地理的位置に応じて Web トラフィックをリダイレクトまたはブロックできます。地理的位置はクライアント IP アドレスを通じて学習されます。
Mod_GeoIP には 2 つの異なるバージョンがあり、1 つは 無料 で、もう 1 つは 有料 で、MaxMind GeoIP/ GeoCity を使用します。データベースです。
- 無料版: 無料版では、地域都市と国のデータベースを99.5%の精度で利用できます。
- 有料バージョン: 有料バージョンでは、IP アドレスに関するより高度な詳細情報を含む両方のデータベースを 99.8% の精度で取得できます。
無料バージョンと有料バージョンの違いをさらに確認したい場合は、Maxmind.comにアクセスしてください。
この記事では、Apache の Mod_GeoIP モジュールをRHEL およびCentOS は、YUM パッケージ マネージャー ユーティリティでEPEL リポジトリを使用します。
すでに RHEL と CentOS システムを実行しており、 LAMP (Linux、Apache) が動作していることを前提としています。 、MySQL、 、PHP) のセットアップ。そうでない場合は、LAMP を使用した両方のオペレーティング システムのインストールを示した記事をお読みください。
RHEL/CentOSのインストール
- RHEL 7 および CentOS 7 Minimal のインストール。
- RHEL 8 および CentOS 8 Minimal のインストール。
RHEL/CentOS での LAMP セットアップ
- RHEL および CentOS 7 に LAMP (Linux、Apache、MySQL、PHP) をインストールする方法
- RHEL および CentOS 8 に Apache、MySQL/MariaDB、および PHP をインストールする方法
RHEL および CentOS で EPEL リポジトリを有効にする
デフォルトでは、mod_Geoip は RHEL/CentOS 公式リポジトリでは利用できないため、サードパーティのEPEL リポジトリをインストールして有効にする必要があります。
yum install epel-release
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm [On RHEL 8]
RHEL および CentOS に Mod_GeoIP をインストールする
システムでEPELリポジトリを有効にしたら、依存関係パッケージを指定して次のコマンドを実行してmod_geoipをインストールするだけです。
yum install mod_geoip GeoIP GeoIP-devel GeoIP-data zlib-devel
最新の地域都市および国データベースをダウンロード
最新の地域都市と国データベースをダウンロードして最新の状態に保つことをお勧めします。
cd /usr/share/GeoIP/
mv GeoIP.dat GeoIP.dat_org
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
gunzip GeoLite2-Country.tar.gz
gunzip GeoLite2-City.tar.gz
Apache で Mod_GeoIP を有効にする
モジュールがインストールされたら、以下の抜粋に示すように、vi などのコマンドライン テキスト エディタでモジュールのメイン構成ファイルを開いて編集し、サーバー全体でモジュールをアクティブ化します。
vi /etc/httpd/conf.d/geoip.conf
GeoIPEnable 行をオフからオンに設定します。また、GeoIP データベース ファイルには必ず絶対パスを追加してください。
<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat MemoryCache
</IfModule>
変更を反映するには、Apache サービスを再起動します。
systemctl restart httpd
OR
service httpd restart
ただし、GeoIP モジュールをサーバー全体で有効にすることはお勧めできません。実際にトラフィックのリダイレクトまたはブロックを実行する
ブロックまたは
ブロックでのみ GeoIP モジュールを有効にする必要があります。
Mod_GeoIP モジュールのテスト
mod_geoip モジュールが Apache で正しく動作することをテストするには、Apache の下に testgeoip.php というPHP ファイルを作成する必要があります。 ルート ディレクトリ (例: /var/www/html)。
vi /var/www/html/testgeoip.php
次の php コードをそれに挿入します。
<html>
<head>
<title>What is my IP address - determine or retrieve my IP address</title>
</head>
<body>
<?php
if (getenv(HTTP_X_FORWARDED_FOR)) {
$pipaddress = getenv(HTTP_X_FORWARDED_FOR);
$ipaddress = getenv(REMOTE_ADDR);
echo "Your Proxy IP address is : ".$pipaddress. " (via $ipaddress) " ;
} else {
$ipaddress = getenv(REMOTE_ADDR);
echo "Your IP address is : $ipaddress";
}
$country = getenv(GEOIP_COUNTRY_NAME);
$country_code = getenv(GEOIP_COUNTRY_CODE);
echo "<br/>Your country : $country ( $country_code ) ";
?>
</body>
</html>
ここで、Web ブラウザ (例: http://localhost/testgeoip.php) を使用してファイルを呼び出してみます。 IP アドレスと国の詳細が表示されます。
GeoIP データベースの更新
GeoIP データベースは毎月初めに更新されます。したがって、GeoIP データベースを最新の状態に保つことが非常に重要です。データベースの最新バージョンをダウンロードするには、次のコマンドを使用します。
cd /usr/share/GeoIP/
mv GeoIP.dat GeoIP.dat_org
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
gunzip GeoLite2-Country.tar.gz
gunzip GeoLite2-City.tar.gz
GeoIP データベースの自動更新
GeoIP データベースの最新バージョンを毎月自動的にダウンロードする小さなシェル スクリプトを作成しました。次のスクリプトのいずれかを /etc/cron.monthly に配置するだけです。
スクリプト 1
Automatic GeoIP Database Update
#!/bin/sh
cd /usr/share/GeoIP
mv GeoIP.dat GeoIP.dat_org
wget -q http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.tar.gz
gzip -d -f GeoLite2-Country.tar.gz
スクリプト 2
#!/bin/sh
GEOIP_MIRROR="http://geolite.maxmind.com/download/geoip/database"
GEOIPDIR=/usr/share/GeoIP
TMPDIR=
DATABASES="GeoLiteCity GeoLiteCountry/GeoIP asnum/GeoIPASNum GeoIPv6"
if [ -d "${GEOIPDIR}" ]; then
cd $GEOIPDIR
if [ -n "${DATABASES}" ]; then
TMPDIR=$(mktemp -d geoipupdate.XXXXXXXXXX)
echo "Updating GeoIP databases..."
for db in $DATABASES; do
fname=$(basename $db)
wget --no-verbose -t 3 -T 60 "${GEOIP_MIRROR}/${db}.dat.gz" -O "${TMPDIR}/${fname}.dat.gz"
gunzip -fdc "${TMPDIR}/${fname}.dat.gz" > "${TMPDIR}/${fname}.dat"
mv "${TMPDIR}/${fname}.dat" "${GEOIPDIR}/${fname}.dat"
chmod 0644 "${GEOIPDIR}/${fname}.dat"
done
[ -d "${TMPDIR}" ] && rm -rf $TMPDIR
fi
fi
国に基づいてユーザーをリダイレクトする
以下のコード例は、AS (アジア) に設定した国コードに基づいてユーザーをリダイレクトします。こうすることで、郡コードに基づいてユーザーをリダイレクトできます。
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AS$
RewriteRule ^(.*)$ https://linux-console.net$1 [R,L]
国に基づいてユーザーをブロックする
この例では、GeoIP が設定する国コードに基づいてユーザーをブロックします。以下の例では、AS (アジア) および US (米国) 諸国からのユーザーをブロックします。
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
SetEnvIf GEOIP_COUNTRY_CODE AS BlockCountry
SetEnvIf GEOIP_COUNTRY_CODE US BlockCountry
... place more countries here
Deny from env=BlockCountry
国に基づいてユーザーを許可する
この以下の例では、以下に示す国のユーザーのみが許可されます。
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
SetEnvIf GEOIP_COUNTRY_CODE AS AllowCountry
SetEnvIf GEOIP_COUNTRY_CODE US AllowCountry
... place more countries here
Deny from all
Allow from env=AllowCountry
mod_geoip とその使用法の詳細については、http://www.maxmind.com/app/mod_geoip を参照してください。 mod_geoip モジュールのセットアップで問題が発生した場合は、コメントでお知らせください。また、お友達と共有することも忘れないでください。