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

Тема в разделе "Хостинг и настройка серверов", создана пользователем X-Shar, 24 фев 2016.

↑ ↓
  1. X-Shar :)
    X-Shar
    Ответить в чате

    Администрация

    Регистрация:
    03.06.2012
    Сообщения:
    5.812
    Симпатии:
    432
    Пол:
    Мужской
    Репа:
    +966 / 152 / -29
    Jabber:
    Skype:
    ICQ:

    638294628

    i.

    Всем привет !

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

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

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

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

    Итак можно ограничить по странам многими способами, вообще супер-мега гуру рекомендуют XTablets, это надстройка к Iptablets, в плане производительности весьма не плох, вот почитайте, что думает по этому поводу "Хакер":https://xakep.ru/2011/08/23/58089/

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

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

    2.Можно сделать свои страницы ошибок, например как здесь на сфере, кого заблокирует по GeoIP, тот получит такое сообщение:Блокировка по 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 !
     

    Вложения:

    • Информативный пост Информативный пост x 2
    • Мне нравится Мне нравится x 1

Поделиться этой страницей