Информация Блокировка стран по GeoIP


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 125
Репутация
8 243
i.jpg


Всем привет !

Хочу затронуть такую тему, как блокировка ненужных стран средствами сервера !

Зачем это нужно ?

1)Обычно это делают при сильном ддосе, это как минимум может ослабить силу ддоса, а как максимум вообще защитить от таких атак;

2)Есть сайты которые специально ограничивают доступ из других стран.

Итак можно ограничить по странам многими способами, вообще супер-мега гуру рекомендуют XTablets, это надстройка к Iptablets, в плане производительности весьма не плох, вот почитайте, что думает по этому поводу "Хакер":

Но мне всё-же больше нравится блокировать средствами nginx, вот почему:

1. Легко редактировать список стран, т.е. добавлять/удалять;

2.Можно сделать свои страницы ошибок, например как здесь на сфере, кого заблокирует по GeoIP, тот получит такое сообщение:

Итак рассказываю как всё сделать, а в конце дам список стран, который вы легко сможете редактировать как вам нужно:

Итак, давайте собирать из исходников, т.к. в новых версиях nginx нет модуля GeoIP, итак вводим следующие команды (Для Дебиан, для других ОС сами ищите):
Код:
nginx -V
Результат (Это пример):
Код:
nginx version: nginx/1.8.0
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --lock-path=/var/lock/nginx.lock
--pid-path=/var/run/nginx.pid --with-pcre-jit --with-http_gzip_static_module --with-http_ssl_module --with-ipv6
--without-http_browser_module --without-http_geo_module --without-http_limit_req_module --without-http_limit_zone_module
--without-http_memcached_module --without-http_referer_module --without-http_scgi_module --without-http_split_clients_module
--with-http_stub_status_module --without-http_ssi_module --without-http_userid_module --without-http_uwsgi_module
--add-module=/tmp/buildd/nginx-1.8.0/debian/modules/nginx-echo
Сохраним вывод команды nginx -V в какой-нибудь текстовый редактор - эта информация нам пригодится при конфигурировании. Видим, что версия nginx у нас установлена 1.8.0 - скачиваем такую же версию:
Код:
wget http://nginx.org/download/nginx-1.8.0.tar.gz
Распакуем архив и перейдём в папку nginx-1.8.0:
Код:
gunzip nginx-1.8.0.tar.gz
cd nginx-1.8.0
Далее, для сборки, нам потребуется установить в систему дополнительные пакеты.
Для Debian/Ubuntu выполняем:
Код:
aptitude install build-essential
Установим базу GeoIP:
Код:
apt-get install geoip-database libgeoip1
База GeoIP располагается в файле /usr/share/GeoIP/GeoIP.dat.
Обновим базу до последней актуальной (Это нужно обязательно сделать):

Код:
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 с добавлением модуля with-http_geoip_module.

Для этого копируем из текстового редактора вывод команды nginx -V начиная с --prefix= и до первого --add-module= (все присутствующие в выводе --add_module= нам не нужны). После чего пишем в консоли ./configure и вставляем скопированное из редактора. Должно получиться так:
Код:
./configure --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --lock-path=/var/lock/nginx.lock
--pid-path=/var/run/nginx.pid --with-pcre-jit --with-http_gzip_static_module --with-http_ssl_module --with-ipv6
--without-http_browser_module --with-http_geoip_module --without-http_memcached_module --without-http_referer_module
--without-http_scgi_module --without-http_split_clients_module --with-http_stub_status_module --without-http_ssi_module
--without-http_userid_module --without-http_uwsgi_module
В конец строки добавляем --with-http_geoip_module чтобы получилось так:
Код:
./configure --prefix=/etc/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log
--http-client-body-temp-path=/var/lib/nginx/body --http-fastcgi-temp-path=/var/lib/nginx/fastcgi
--http-log-path=/var/log/nginx/access.log --http-proxy-temp-path=/var/lib/nginx/proxy --lock-path=/var/lock/nginx.lock
--pid-path=/var/run/nginx.pid --with-pcre-jit --with-http_gzip_static_module --with-http_ssl_module --with-ipv6
--without-http_browser_module --with-http_geoip_module --without-http_memcached_module --without-http_referer_module
--without-http_scgi_module --without-http_split_clients_module --with-http_stub_status_module --without-http_ssi_module
--without-http_userid_module --without-http_uwsgi_module --with-http_geoip_module
Нажимаем Enter и ждём окончания процесса.
После успешного окончания конфигурирования увидим на экране что-то вроде:
Код:
nginx path prefix: "/etc/nginx"
nginx binary file: "/etc/nginx/sbin/nginx"
nginx configuration prefix: "/etc/nginx"
nginx configuration file: "/etc/nginx/nginx.conf"
nginx pid file: "/var/run/nginx.pid"
nginx error log file: "/var/log/nginx/error.log"
nginx http access log file: "/var/log/nginx/access.log"
nginx http client request body temporary files: "/var/lib/nginx/body"
nginx http proxy temporary files: "/var/lib/nginx/proxy"
nginx http fastcgi temporary files: "/var/lib/nginx/fastcgi"
Теперь можно собрать бинарник nginx - выполняем 2 команды:
Код:
make
make install
По окончании сборки проверяем, что nginx собрался с нужным нам модулем:
Код:
/etc/nginx/sbin/nginx -V

Теперь перейдём к настройки:

/etc/nginx/nginx.conf

Пишем туда следующее:
Код:
geoip_country /usr/share/GeoIP/GeoIP.dat;
    map $geoip_country_code $bad_country {
    default 1;
    include /etc/nginx/good_countries;
    }
В секцию http {....}

В /etc/nginx/good_countries создаём файлик, где будут содержаться разрешённые страны (См. вложение), если нужно заблокировать страну то достаточно просто закоментарить там, пример:
#AP 0; #"Asia/Pacific Region" - Заблокирует Азию !

Теперь в server {...} нужного домена прописать:
Код:
if ($bad_country){
              return 403;
    }

В общем-то и всё, теперь достаточно редактировать список стран (Файл good_countries) и перезагружать nginx и всё !like it

Не забывайте:service nginx restart !
 

Вложения

  • good_countries.zip
    2.4 КБ · Просмотры: 12
Верх Низ