овольно часто требуется запретить доступ к сайту для пользователей из определенной страны, или даже города. К примеру, во время DDoS-атак (http-флуда), или запретить трафик из неугодных нам стран (Китая, Южной Америки, и .д.). Я расскажу как это можно сделать с помощью Nginx и GeoIP.
Лирика: конечно, можно было бы настроить и с помощью файрвола iptables, но в данной ситуации необходимо было использовать именно nginx (просьба клиента — закон).
И так, для установки нам потребуется Nginx, GeoIP и OS Debian
Устанавливаем Nginx и GeoIP:
1
|
apt-get install nginx libgeoip-dev |
На всякий случай, обновим базы данных GeoIP:
1
2
3
4
5
|
cd /usr/share/GeoIP wget http: //geolite .maxmind.com /download/geoip/database/GeoLiteCountry/GeoIP .dat.gz gunzip GeoIP.dat.gz wget http: //geolite .maxmind.com /download/geoip/database/GeoLiteCity .dat.gz ginzip GeoLiteCity.dat.gz |
В конфигурационном файле Nginx, /etc/nginx/nginx.conf в секцию http добавим код
1
2
3
4
5
|
geoip_country /usr/share/GeoIP/GeoIP .dat; map $geoip_country_code $bad_country { default 1; include /etc/nginx/geo ip/good_countries ; } |
Мы подключили файл GeoIP.dat и определили переменную $bad_country, указав так же файл,good_countries в котором будем указывать страны, доступ из которых разрешен. Далее, в интересующий нас location, например / добавим условие блокировки пользователя:
1
2
3
4
5
6
7
8
9
10
|
location / { proxy_pass http: //127.0.0.1 :80; proxy_redirect http: //proggear.ru :8080/ /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; if ($bad_country){ return 403; } } |
Где 192.168.1.1 — это IP Вашего сайта. Наполняем файл geo/good_countries. Поскольку мы используем переменную $geoip_country_code, то коды стран должны быть представлены в виде двухбуквенных аббревиатур. Например, для Украины код будет UA. В файле good_countries список стран должен быть соответствующим образом оформлен:
1
2
3
|
RU 0; UA 0; US 0; |
Ноль и точка с запятой обязательны. Готовый файл good_countries Вы можете скачать здесь. Полный список кодов стран доступен на сайте разработчиков GeoIP.
После изменения настроек nginx, не забываем перезагружать nginx:
1
|
/etc/init .d /nginx reload |
Вот и все. Просто удалите неугодную страну из файла good_countries или добавьте в него нужную страну, чтобы разрешить доступ.
PS. Я не претендую на авторство, т.к. способ настройки подсмотрен на каком-то из сайтов, точного адреса не вспомню уже. Просто записал, чтобы не забыть как делал
Просмотров: 1777
Здравствуйте скажите. В 2020 году уже не получиться GeoIP сделать, базы платные? Я правильно понимаю?