nginx geoip фильтрация

Дата | 01.09.2018

Привет.
Недавно мне поставили задачу, заблокировать весь трафик на сервер, но оставить только сети России и Испании.
В предыдущей статье я сделал все через системный файрвол ipfw.
Но вспомнилось, что есть способ и с помощью самого вэб сервера nginx фильтровать трафик.
Вот что получилось.
Для этого нам понадобится собрать nginx с модулем geoip и свежую базу ip
Качаем базу ip адресов.

# fetch http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

Распаковываем.

# gunzip GeoIP.dat.gz

Копируем базу.

# cp GeoIP.dat /usr/local/etc/nginx/

После пере собираем нгинс.
В http конфиг nginx

geoip_country /usr/local/etc/nginx/GeoIP.dat;
map $geoip_country_code $allowed_country {
  default 0;
  RU 1;
  ES 1;
}

А это в сам виртуальный хост добавить.

if ($allowed_country = '0') {
  return 403;
  break;
}

Перезагружаем вэб сервер.

# /usr/local/etc/rc.d/nginx restart

Вот как бы и все.
Но не забывайте о пагубных последствий сео в этом способе.
По-хорошему нужно разрешать еще поисковых ботов иначе на сайте может просесть трафик, но в моем случае на сео было всем пофиг.

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

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