Использование модуля 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>  

file

Перезапустите службу 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
Обновлено 4 июня 2020 г.