В ряде случаев администратору веб-сайта может потребоваться ограничить доступ к ресурсу из определенных стран. Это может быть необходимо по причинам безопасности, законодательным требованиям или для снижения нежелательного трафика. Рассмотрим настройку этой функции для веб-сервера Nginx и Apache.
Скачивание и установка базы GeoIP2
Регистрация на MaxMind
- Перейдите на сайт: https://www.maxmind.com;
- Зарегистрируйтесь и получите лицензионный ключ (license key).
Установка geoipupdate (Ubuntu/Debian)
sudo apt install geoipupdate
Настройка geoipupdate
Отредактируйте файл /etc/GeoIP.conf и укажите:
AccountID YOUR_ACCOUNT_ID LicenseKey YOUR_LICENSE_KEY EditionIDs GeoLite2-Country
Загрузка базы
sudo geoipupdate
База по умолчанию будет находиться в /usr/share/GeoIP/GeoLite2-Country.mmdb
Настройка GeoIP2 в Nginx
Установка модуля ngx_http_geoip2_module
Проверьте наличие модуля командой:
nginx -V 2>&1 | grep -- '--with-http_geoip2_module'
Если модуль отсутствует, нужно собрать Nginx вручную или использовать OpenResty.
Пример конфигурации:
Подключается база GeoIP2 и создаётся правило, разрешающее доступ только из РФ и Казахстана.
load module modules/ngx_http_geoip2_module.so; http { geoip2 /usr/share/GeoIP/GeoLite2-Country.mmdb { $geoip2_data_country_code country iso_code; } map $geoip2_data_country_code $allowed_country { default no; RU yes; KZ yes; } server { listen 80; location / { if ($allowed_country = no) { return 403; } # остальная конфигурация сайта } } }
Настройка GeoIP2 в Apache
Установка модуля mod_maxminddb:
sudo apt install libmaxminddb0 libmaxminddb-dev mmdb-bin sudo apt install apache2-dev sudo a2enmod maxminddb
Подключение базы в конфигурации Apache или .htaccess
Пример: включение базы, установка переменной страны и правила доступа
<IfModule mod_maxminddb.c> MaxMindDBEnable On MaxMindDBFile DB /usr/share/GeoIP/GeoLite2-Country.mmdb MaxMindDBEnv MM_COUNTRY_CODE DB/country/iso_code SetEnvIf MM_COUNTRY_CODE ^RU$ AllowCountry SetEnvIf MM_COUNTRY_CODE ^KZ$ AllowCountry Order Deny,Allow Deny from all Allow from env=AllowCountry </IfModule>
Перезапуск Apache
sudo systemctl restart apache2