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
- Загрузите последние Geo City и Country Database
- Включите Mod_GeoIP в Apache
- Тестирование модуля Mod_GeoIP
- Обновление базы данных GeoIP
- Автоматическое обновление базы данных GeoIP
- Скрипт 1
- Скрипт 2
- Перенаправление пользователей на основе страны
- Блокировка пользователей на основе страны
- Разрешение доступа пользователей на основе страны
Включите репозиторий 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





