Фильтрация трафика в 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.

Помощь

Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!

Нужна помощь?Наши инженеры бесплатно помогут с любым вопросом за считанные минутыНаписать нам