Как установить Mod_GeoIP для Apache в RHEL и CentOS

Mod_GeoIP доступен на веб-сервере Apache. Этот модуль позволяет определить страну, организацию и местоположение посетителя.

Это особенно полезно для сервисов Geo Ad, Target Content, Spam Fighting, Fraud Detection, перенаправления / блокировки посетителей по их стране и многое другое.

Модуль GeoIP позволяет системным администраторам перенаправлять или блокировать веб-трафик в соответствии с географическим положением клиента.

Географическое местоположение узнается по IP-адресу клиента.

Mod_GeoIP имеет две разные версии: Бесплатная, а другая — Платная и использует базы данных MaxMind GeoIP / GeoCity.

  • Бесплатная версия: в бесплатной версии базы данных Geo City и Country доступны с точностью 99,5%.
  • Платная версия: в платной версии вы получите обе базы данных с точностью 99,8% с некоторыми более подробными сведениями об IP-адресе.

Если вы хотите узнать больше различий между бесплатной и платной версией, посетите Maxmind.com.

В этой статье объясняется, как настроить и установить модуль Mod_GeoIP для Apache в RHEL и CentOS с использованием репозитория EPEL с утилитой диспетчера пакетов YUM.

Мы предполагаем, что у вас уже есть система RHEL и CentOS с работающей настройкой LAMP (Linux, Apache, MySQL и PHP).

Включите репозиторий EPEL в RHEL и CentOS

По умолчанию mod_geoip недоступен в официальном репозитории RHEL / CentOS, поэтому нам нужно установить сторонний репозиторий EPEL.

# yum install epel-release

Установите Mod_GeoIP в RHEL и CentOS

После того, как в вашей системе включен репозиторий EPEL, вы можете просто установить mod_geoip, выполнив следующую команду с его пакетами зависимостей:

# yum install mod_geoip GeoIP GeoIP-devel GeoIP-data zlib-devel

Загрузите последние Geo City и Country Database

Выполните команды:

# 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

Включите Mod_GeoIP в Apache

После того, как модуль установлен, откройте и отредактируйте основной файл конфигурации модуля текстовым редактором командной строки, таким как 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
или же
# service httpd restart

Тем не менее, не рекомендуется включать модуль GeoIP по всему серверу. Вы должны включить модуль GeoIP только в блоках <Location> или <Directory>, где вы фактически выполняете перенаправление трафика или блокируете его.

Тестирование модуля Mod_GeoIP

Чтобы протестировать модуль mod_geoip, корректно ли он работает с Apache, нам нужно создать PHP-файл testgeoip.php в корневом каталоге Apache (например, /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>

Теперь попробуйте вызвать файл с помощью веб-браузера (например, 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

Мы написали небольшой шелл-скрипт, который будет загружать последнюю версию базы данных GeoIP каждый месяц.

Просто добавьте следующий скрипт в /etc/cron.monthly.

Скрипт 1

# Automatic GeoIP Database Update from www.tecmint.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.itisgood.ru$1 [R,L]

Блокировка пользователей на основе страны

Этот пример заблокирует пользователей на основе кода страны, который устанавливает GeoIP.

Ниже приведен пример блокировки пользователей из стран AS (Азия) и USA (США).

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

 

cryptoparty

Cryptography is typically bypassed, not penetrated.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

5e7fa976b0640d40