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