网站搜索

如何在 RHEL 和 CentOS 中为 Apache 安装 Mod_GeoIP


Mod_GeoIP 是一个 Apache 模块,可用于将访问者的 IP 地址的地理位置获取到 Apache 网络服务器中。通过此模块,您可以确定访问者的国家/地区组织位置。它对于地理广告服务目标内容垃圾邮件打击欺诈检测重定向特别有用根据访问者所在国家/地区等/阻止访问者。

GeoIP 模块允许系统管理员根据客户端的地理位置重定向或阻止网络流量。地理位置是通过客户端 IP 地址获知的。

Mod_GeoIP 有两个不同的版本,一个是免费,另一个是付费,使用 MaxMind GeoIP/GeoCity 数据库。

  1. 免费版本:在免费版本中,地理城市国家数据库的准确度为99.5%
  2. 付费版本:在付费版本中,您将获得准确度99.8%的两个数据库,以及有关IP地址的一些更高级的详细信息。

如果您想了解免费付费版本之间的更多差异,请访问Maxmind.com

本文介绍如何在 RHELCentOS 使用 EPEL 存储库和 YUM 包管理器实用程序。

我们假设您已经运行 RHELCentOS 系统以及可用的 LAMPLinuxApache 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 下正常工作,我们需要在 Apachetestgeoip.phpPHP 文件strong> 根目录(例如 /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 数据库更新

我们编写了一个小 shell 脚本,每月自动下载最新版本的 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 模块时遇到任何问题,请通过评论告诉我们,并且不要忘记与您的朋友分享。