Всем привет !
Хочу затронуть такую тему, как блокировка ненужных стран средствами сервера !
Зачем это нужно ?
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
Код:
wget http://nginx.org/download/nginx-1.8.0.tar.gz
Код:
gunzip nginx-1.8.0.tar.gz
cd nginx-1.8.0
Для Debian/Ubuntu выполняем:
Код:
aptitude install build-essential
Код:
apt-get install geoip-database libgeoip1
Обновим базу до последней актуальной (Это нужно обязательно сделать):
Код:
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 -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
Код:
./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
После успешного окончания конфигурирования увидим на экране что-то вроде:
Код:
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"
Код:
make
make install
Код:
/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;
}
В /etc/nginx/good_countries создаём файлик, где будут содержаться разрешённые страны (См. вложение), если нужно заблокировать страну то достаточно просто закоментарить там, пример:
#AP 0; #"Asia/Pacific Region" - Заблокирует Азию !
Теперь в server {...} нужного домена прописать:
Код:
if ($bad_country){
return 403;
}
В общем-то и всё, теперь достаточно редактировать список стран (Файл good_countries) и перезагружать nginx и всё !
Не забывайте:service nginx restart !