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

本文介绍如何为Apache安装Mod_GeoIP模块,以便根据CentOS和RHEL服务器中的国家/地区位置重定向,阻止和允许用户。

Mod_GeoIP是一个Apache模块,可用于将访问者IP地址的地理位置输入Apache Web服务器。 此模块允许您确定访客的国家组织位置 它特别适用于地理广告投放目标内容垃圾邮件战斗Cheat检测 ,根据其所在国家/地区重定向/阻止访问者等等。

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

Mod_GeoIP有两个不同的版本1是Free ,另一个是Paid并使用MaxMind GeoIP / GeoCity数据库。

  1. 免费版 :在免费版本中, Geo CityCountry数据库可用,准确率为99.5%
  2. 付费版本 :在付费版本中,您将获得两个数据库,准确率达到99.8%,并提供有关IP地址的更多优先详细信息。

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

本文介绍如何使用EPEL存储库和YUM包管理器实用程序在RHELCentOS中为Apache设置和安装Mod_GeoIP模块。

我们假设您已经运行RHELCentOS系统,并且运行LAMPLinuxApacheMySQLPHP )。 如果没有,那么阅读我们的文章,我们已经展示了使用LAMP安装两个操作系统。

安装RHEL / CentOS
  1. 安装红帽企业Linux(RHEL)7.3指南
  2. 安装CentOS 7.3指南
RHEL / CentOS上的LAMP设置
  1. 如何在RHEL和CentOS上安装LAMP(Linux,Apache,MySQL,PHP)

在RHEL和CentOS中启用EPEL存储库

默认情况下, mod_GeoipRHEL / CentOS官方存储库下不可用,因此我们需要安装并启用第三方EPEL存储库。

# yum install epel-release

在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/GeoLiteCountry/GeoIP.dat.gz
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# gunzip GeoIP.dat.gz
# gunzip GeoLiteCity.dat.gz

在Apache中启用Mod_GeoIP

安装模块后,使用命令行文本编辑器(如vi)打开并编辑模块主配置文件,然后在服务器范围内激活模块,如下面的摘录所示。

# vi /etc/httpd/conf.d/geoip.conf

将GeoIPEnable行从Off设置On 此外,请确保添加GeoIP数据库文件的绝对路径。

<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat MemoryCache
</IfModule>

重新启动Apache服务以反映更改。

# systemctl restart httpd
OR
# service httpd restart

但是,不建议在服务器范围内打开GeoIP模块。 您应该仅在实际执行流量重定向或阻止的<Location><Directory>块中启用GeoIP模块。

测试Mod_GeoIP模块

为了测试mod_geoip模块是否正常使用Apache,我们需要在Apache根目录下创建一个名为testgeoip.phpPHP文件( 例如/ 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/GeoLiteCountry/GeoIP.dat.gz
# wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
# gunzip GeoIP.dat.gz
# gunzip GeoLiteCity.dat.gz

自动GeoIP数据库更新

我们编写了一个smaill shell脚本,每个月会自动下载最新版本的GeoIP数据库。 只需将以下任何脚本放在/etc/cron.monthly下即可。

脚本1
# Automatic GeoIP Database Update from www.howtoing.com
#!/bin/sh
cd /usr/share/GeoIP
mv GeoIP.dat GeoIP.dat_org
wget -q http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gzip -d -f GeoIP.dat.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://www.howtoing.com$1 [R,L]

根据国家/地区阻止用户

此示例将根据GeoIP设置的国家/地区代码阻止用户。 以下示例将阻止来自AS亚洲 )和美国美国 )国家/地区的用户。

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模块时遇到任何问题,请通过评论告诉我们,请不要忘记与您的朋友分享。