• Для скачивания ресурсов Форума пользователь должен написать не менее 5 полезных сообщений и получить 5 симпатий.
    Если Вы не хотите выполнять условия, Вы должны купить переход в группу "Работяга" или любое наше дополнение и сможете скачивать ресурсы, перевод происходит по email, который указывается при оплате.

Блокируем страны на уровне Nginx на Centos 7

baltun

Администратор
Сообщения
8.324
Реакции
1.969
Баллы
1.833
Предполагается что у нас уже установлен Nginx и нам требуется только модуль, так же требуется установить GeoIP.
Код:
yum install -y nginx-module-geoip GeoIP GeoIP-data GeoIP-update
В нашем случае GeoIP не понадобился т.к у нас установлена панель ISPmanager.
Далее смотрим, что модуль установился:
Код:
ls -l /usr/lib64/nginx/modules/

В конце фала /etc/nginx/fastcgi_params добавляем параметры:
Код:
# для стран:
fastcgi_param GEOIP_ADDR $remote_addr;
fastcgi_param GEOIP_COUNTRY_CODE $geoip_country_code;
fastcgi_param GEOIP_COUNTRY_NAME $geoip_country_name;
# для городов:
fastcgi_param GEOIP_REGION $geoip_region;
fastcgi_param GEOIP_REGION_NAME $geoip_region_name;
fastcgi_param GEOIP_CITY $geoip_city;
fastcgi_param GEOIP_AREA_CODE $geoip_area_code;
fastcgi_param GEOIP_LATITUDE $geoip_latitude;
fastcgi_param GEOIP_LONGITUDE $geoip_longitude;
fastcgi_param GEOIP_POSTAL_CODE $geoip_postal_code;
# для провайдеров/организаций:
fastcgi_param GEOIP_ORGANIZATION $geoip_org;

Подключаем модуль GeoIP в конфигурационном файле nginx:
Код:
load_module "modules/ngx_http_geoip_module.so";

Далее в секции http конфига nginx прописываем пути к скаченным БД (страны, города, провайдеры):
Код:
geoip_country  /usr/share/GeoIP/GeoLiteCountry.dat;
geoip_city     /usr/share/GeoIP/GeoLiteCity.dat;
geoip_org      /usr/share/GeoIP/GeoLiteASNum.dat;

В этом же файле если требуется заблокировать определенные страны или страну пишем:
Код:
map $geoip_country_code $allowed_country {
  default yes;
  CN no;
}

Если требуется дать доступ определенным странам или стране пишем так:
Код:
map $geoip_country_code $allowed_country {
  default no;
  RU yes;
  UA yes;
  BY yes;
  KZ yes;
}

Теперь осталось добавить в конфиг виртуального хоста (секция server):
Код:
if ($allowed_country = no) {
  return 404;
}

Перезапускаем Nginx:
Код:
systemctl restart nginx.service
После этого должна заработать блокировка по странам.
 
Верх Низ