Фильтрация трафика в Nginx с помощью GeoIP
Пошаговое руководство по ограничению доступа к сайту по странам с использованием модуля GeoIP в Nginx.
При работе с Nginx на VPS или выделенном сервере может возникнуть необходимость ограничить доступ к сайту по странам. Это возможно сделать с помощью подуля Nginx GeoIP.
Установка необходимых пакетов
Для установки модуля GeoIP на сервере выполните соответствующие команды в зависимости от операционной системы.
Debian/Ubuntu
sudo apt-get install nginx-module-geoip
CentOS
yum install nginx-module-geoip
Обновление базы данных GeoIP
Для обновления базы данных GeoIP выполните команды:
mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak
cd /usr/share/GeoIP/
wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
gunzip GeoIP.dat.gz
Проверка сборки Nginx с поддержкой модуля GeoIP
После обновления базы GeoIP убедитесь, что Nginx был собран с параметром --with-http_geoip_module. Для этого используйте команду:
nginx -V
Если Nginx не был собран с нужным параметром, вам нужно будет выполнить сборку модулей Nginx.
Настройка Nginx для ограничения доступа по странам
В каталоге с конфигурационными файлами Nginx создайте файл block.map.include с содержанием:
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default yes;
CN no;
VN no;
TW no;
}
В этом примере доступ к сайту ограничен для пользователей из Китая, Вьетнама и Тайваня.
Для того чтобы разрешить доступ только пользователям из определённых стран, отредактируйте конфигурацию следующим образом:
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default no;
RU yes;
UA yes;
}
В этом примере сайт будет доступен только пользователям из России и Украины.
Внесение изменений в конфигурацию Nginx
В конфигурационном файле /etc/nginx/nginx.conf в секции http добавьте строку:
include include/block.map.include;
Затем в секции server вашего хоста добавьте следующий блок:
if ($allowed_country = no) {
return 404;
}
Примените изменения, перезапустив Nginx:
nginx -s reload
Внимание
MaxMind больше не поддерживает старый формат баз данных .dat и закрыла возможность их свободного скачивания. Сейчас доступ к файлам предоставляется только после авторизации и приобретения лицензии. В настоящее время используется новый формат баз данных .mmdb.
Помощь
Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!