ウェブサイト検索

RHEL および CentOS に Apache 用の Mod_GeoIP をインストールする方法


Mod_GeoIP は、訪問者のIP アドレスの地理的位置をApache ウェブサーバーに取得するために使用できる Apache モジュールです。このモジュールを使用すると、 訪問者の組織場所を特定できます。これは、地域広告配信ターゲット コンテンツスパム対策詐欺検出リダイレクトに特に役立ちます。/国などに基づいて訪問者をブロックします。

GeoIP モジュールを使用すると、システム管理者はクライアントの地理的位置に応じて Web トラフィックをリダイレクトまたはブロックできます。地理的位置はクライアント IP アドレスを通じて学習されます。

Mod_GeoIP には 2 つの異なるバージョンがあり、1 つは 無料 で、もう 1 つは 有料 で、MaxMind GeoIP/ GeoCity を使用します。データベースです。

  1. 無料版: 無料版では、地域都市国のデータベース99.5%の精度で利用できます。
  2. 有料バージョン: 有料バージョンでは、IP アドレスに関するより高度な詳細情報を含む両方のデータベースを 99.8% の精度で取得できます。

無料バージョンと有料バージョンの違いをさらに確認したい場合は、Maxmind.comにアクセスしてください。

この記事では、Apache の Mod_GeoIP モジュールをRHEL およびCentOS は、YUM パッケージ マネージャー ユーティリティでEPEL リポジトリを使用します。

すでに RHELCentOS システムを実行しており、 LAMP (LinuxApache) が動作していることを前提としています。 MySQL、 PHP) のセットアップ。そうでない場合は、LAMP を使用した両方のオペレーティング システムのインストールを示した記事をお読みください。

RHEL/CentOSのインストール
  1. RHEL 7 および CentOS 7 Minimal のインストール。
  2. RHEL 8 および CentOS 8 Minimal のインストール。
RHEL/CentOS での LAMP セットアップ
  1. RHEL および CentOS 7 に LAMP (Linux、Apache、MySQL、PHP) をインストールする方法
  2. RHEL および CentOS 8 に Apache、MySQL/MariaDB、および PHP をインストールする方法

RHEL および CentOS で EPEL リポジトリを有効にする

デフォルトでは、mod_GeoipRHEL/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 モジュールのセットアップで問題が発生した場合は、コメントでお知らせください。また、お友達と共有することも忘れないでください。