Использование модуля GeoIP который позволяет перенаправлять или блокировать веб-трафик в соответствии с географическим положением.
Репозиторий EPEL в RHEL и CentOS
По умолчанию для Apache/2.4.6 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
После того, как модуль установлен, откройте и отредактируйте основной файл конфигурации модуля текстовым редактором и активируйте модуль:
nano /etc/httpd/conf.d/geoip.conf
Установите строку GeoIPEnable с Off в положение On. Так же убедитесь, что вы добавили абсолютный путь к файлу базы данных GeoIP.
<IfModule mod_geoip.c>
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
</IfModule>
Перезапустите службу Apache.
systemctl restart httpd
Перенаправление пользователей на основе страны
В описанном примере код перенаправит пользователей на основе страны, который мы установили как AS (Азия).
Таким образом, вы можете перенаправить всех пользователей на основе их кода страны.
GeoIPEnable On
GeoIPDBFile /usr/share/GeoIP/GeoIP.dat
# Redirect one country
RewriteEngine on
RewriteCond %{ENV:GEOIP_COUNTRY_CODE} ^AS$
RewriteRule ^(.*)$ https://www.testing.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
Каждый запрос на сайт содержит специальный заголовок GeoIp-Country-Code, в котором содержится двухбуквенный код страны посетителя ISO 3166. Страна определяется исходя из IP адреса посетителя по данным MaxMind GeoLite.
Например:
- AF – Africa
- AN – Antarctica
- AS – Asia
- EU – Europe
- NA – North America
- OC – Oceania
- SA – South America
- UA – Ukraine
- CN – China
- PL – Poland