nginx+GeoIP. Блокируем доступ к сайту на nginx пользователям из нежелательных стран.

geoiptpl_208_130Иногда возникает ситуация, когда необходимо заблокировать доступ к сайту пользователям, находящимся в определенных странах. Для этого мы настроим фильтр по IP адресам, находящимся в нежелательных странах. Конечно, пользователи  всегда смогут воспользоваться прокси и прочими вариантами маневра, но в большинстве случаев фильтра по странам нам хватит. Итак, задача ясна, начнем действовать. В наших руках сервер nginx, установленный на Debian. Мы будем использовать модуль GeoIP для определения принадлежности IP к стране.

Для начала нам необходимо проверить, скомпилирован ли nginx с поддержкой HttpGeoipModule.

Для этого введем команду:

nginx -V

Если в выдаче мы найдем значение —with-http_geoip_module, то все впорядке. В случае с Debian модуль из пакетного nginx уже присутствует, так что пойдем дальше, считая, что с nginx все как надо.

Установим  базу GeoIP:

sudo apt-get install geoip-database libgeoip1

 База GeoIP располагается в файле /usr/share/GeoIP/GeoIP.dat.

Обновим базу до последней актуальной.

sudo mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak
cd /usr/share/GeoIP/
sudo wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
sudo gunzip GeoIP.dat.gz

Теперь настроим сам nginx.

sudo nano /etc/nginx/nginx.conf

Впишем следующее содержание в блок http, перед всеми инклудами:

geoip_country /usr/share/GeoIP/GeoIP.dat;
 map $geoip_country_code $allowed_country {
        default yes;
        CN no;
        CU no;
        CY no;
}

 Данным конфигом мы запретили сайт для пользователей Китая, Кубы и Кипра.

Для того, чтобы разрешить использование сайта только пользователям определенных стран, перепишем конфиг следующим образом:

geoip_country /usr/share/GeoIP/GeoIP.dat;
    map $geoip_country_code $allowed_country {
        default no;
        RU yes;
        UA yes;

    }

 Теперь сайт будет доступен только пользователям из России и Украины.

Осталось сделать последний штрих — запретить пользователям, которые подпадают под запрет, использовать наш сайт. Будем отправлять им ошибку 404. Для этого зайдем в конфиг хоста и в секции server {} добавим следующие строки:

if ($allowed_country = no) {
            return 404;
        }

Применим новые настройки nginx:

sudo /etc/init.d/nginx reload

Если все настроили верно — больше нежелательные пользователи нас не побеспокоят.


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Подтвердите, что Вы не бот — выберите самый большой кружок: