Фильтрация трафика в Nginx с помощью GeoIP
Практическое руководство по настройке доступа к сайту через GeoIP
При работе с Nginx на VPS или выделенном сервере может возникнуть необходимость ограничить доступ к сайту по странам. Сделать это можно с помощью модуля Nginx GeoIP.
Устанавливаем необходимые пакеты в системе:
Debian/Ubuntu
sudo apt-get install nginx-module-geoip
CentOS
yum install nginx-module-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 -V убедимся, что наш web-сервер собран с параметром --with-http_geoip_module. Если нет — приступаем к самостоятельной сборке модулей Nginx
В каталоге с конфигурационными файлами web-сервера 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;
}
Теперь сайт будет доступен только пользователям из России и Украины.
В конфигурационном файле /etc/nginx/nginx.conf
в секции http
добавляем следующую строку:
include include/block.map.include;
После чего в настройках хоста (секция server
) вставляем следующую конструкцию:
if ($allowed_country = no) {
return 404;
}
Применяем изменения:
# nginx -s reload