Меню
Главная
Форумы
Новые сообщения
Что нового?
Новые сообщения
Вход
Регистрация
Что нового?
Новые сообщения
Меню
Вход
Регистрация
Соцсети заблокировали! Простой способ обхода блокировки Twitter и Facebook
здесь
-----
Форум блокируют за
антивоенную статью
-----
В связи с преследованиями за инакомыслие, теперь можно
анонимно
отвечать в темах.
-----
Обновлен
скрипт для определения IP госорганов
-----
Наш реестр запрещенных сайтов
с широким функционалом.
Создаем свой генератор зеркал
для обхода блокировки.
Главная
Форумы
Противодействие интернет-цензуре
Разработка, техподдержка, инструкции
Делаем анонимайзер на Nginx + Lua
JavaScript отключён. Чтобы полноценно использовать наш сайт, включите JavaScript в своём браузере.
Ответить в теме
Сообщение
<p>[QUOTE="moder, post: 558, member: 1"]</p><p>Сегодня, с развитием цензуры, <a href="https://roscenzura.com/forums/22/">анонимайзеры</a> востребованы все больше. В этой статье мы расскажем, как сделать свой собственный анонимайзер на Nginx в связке с модулем <a href="http://www.lua.org/about.html">Lua</a>. Можно, конечно, поставить готовый скрипт, наподобие <a href="https://roscenzura.com/threads/185/">Glype Proxy</a>, но решение на Nginx удобнее и производительнее.</p><p></p><p>На Хабре есть статья <a href="http://habrahabr.ru/post/158393/">Проксируем и Спасаем</a>, где описано, как проксировать сайт через Nginx в связке с модулем <a href="https://github.com/yaoweibin/ngx_http_substitutions_filter_module">ngx_http_substitutions_filter_module</a>. Данное решение годится, только если требуется проксировать какие-то конкретные сайты, но не годится для нашей задачи. Дело в том, что функция <strong>subs_filter</strong> (для поиска и замены текста в содержимом страницы) модуля ngx_http_substitutions_filter_module не умеет искать по переменной и такая конструкция не сработает:</p><p>[CODE]# $domain - проксируемый сайт, $mirror - наше зерало</p><p>subs_filter $domain $mirror;</p><p>[/CODE]</p><p>Эта странная особенность модуля ngx_http_substitutions_filter_module делает его непригодным для создания анонимайзера, если, конечно, не найдутся желающие <a href="https://github.com/yaoweibin/ngx_http_substitutions_filter_module/blob/master/ngx_http_subs_filter_module.c">доработать модуль</a>, либо появится новая версия, где поиск переменной будет работать.</p><p></p><p>Вместо ngx_http_substitutions_filter_module для замены ссылок в содержимом страницы мы будем использовать модуль <strong>Lua</strong>.</p><p>Скачиваем модуль <a href="http://www.lua.org/download.html">по ссылке</a>, либо через консоль:</p><p>[CODE]wget http://www.lua.org/ftp/lua-5.2.3.tar.gz</p><p>tar zxf lua-5.2.3.tar.gz</p><p>cd lua-5.2.3</p><p>make linux test[/CODE]</p><p></p><p><strong>Для сборки Nginx с новым модулем устанавливаем дополнительные пакеты.</strong></p><p></p><p>Для CentOS:</p><p>[CODE]</p><p>yum install gcc gcc-c++ kernel-devel</p><p>yum groupinstall 'Development Tools'</p><p>[/CODE]</p><p></p><p>Для Debian/Ubuntu:</p><p>[CODE]aptitude install build-essential[/CODE]</p><p></p><p><strong>Устанавливаем Lua.</strong></p><p>[CODE]</p><p>yum install gcc* -y # обновляем репозиторий</p><p>yum install libpcre3 libpcre3-dev libperl-dev lua liblua-dev</p><p>[/CODE]</p><p></p><p>Скачиваем новую версию Nginx:</p><p>[CODE]</p><p>wget http://nginx.org/download/nginx-1.6.1.tar.gz</p><p>tar –xvf nginx-1.6.1.tar.gz</p><p>cd nginx-1.6.1</p><p>[/CODE]</p><p></p><p>Смотрим, какие модули уже установлены:</p><p>[CODE]nginx -V[/CODE]</p><p></p><p>Теперь копируем вывод команды <strong>nginx -V</strong> в текстовой редактор, начиная от <strong>--prefix=</strong> и до первого <strong>--add-module=</strong> (все присутствующие в выводе --add_module= нам не нужны).</p><p>Должно получиться примерно следующее:</p><p>[CODE]--prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_spdy_module --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --with-http_gzip_static_module --with-pcre-jit --with-http_ssl_module[/CODE]</p><p></p><p>Теперь добавляем в конфигурацию запись <strong>--add-module=/root/lua-5.2.3</strong>, где /root/lua-5.2.3 - это пусть, куда мы распаковали модуль Lua.</p><p>И собираем Nginx:</p><p>[CODE]cd /root/nginx-1.6.1</p><p>./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_spdy_module --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --with-http_gzip_static_module --with-pcre-jit --with-http_ssl_module --add-module=/home/ngx_http --add-module=/root/lua</p><p></p><p>make</p><p>make install</p><p>[/CODE]</p><p></p><p></p><p><strong>Настраиваем конфиг Nginx.</strong></p><p><strong></strong></p><p>Для удобства, мы сделаем анонимайзер на поддоменах (по такому принципу работает известный анонимайзер hideme.ru). Так, если основной домен у нас domain.com, то проксируемый сайт будет выглядеть так: website.com.domain.com. Но есть одна проблема. Дело в том, что некоторые провайдеры блокируют <a href="http://www.rubanlist.com">запрещенные сайты</a> по маске *website.com*, а значит, адрес вида website.com.domain.com нам не подходит. Необходимо зашифровать ссылку. Например, мы можем использовать вместо точки последовательность цифр 00100, таким образом, проксируемый сайт будет выглядеть так: website00100com.domain.com.</p><p></p><p>Итак, для начала мы создадим скрипт на lua, который будем подключать в конфиг Nginx. Назовем его replace.lua и поместим в папку /etc/nginx/scripts/.</p><p>Содержимое replace.lua:</p><p>[CODE]</p><p>#! usr/bin/lua</p><p>-- /etc/nginx/scripts/subs.lua</p><p>response_body = ngx.arg[1]</p><p>response_body = response_body:gsub(ngx.var.domain, ngx.var.subdomain)</p><p>ngx.arg[1]=response_body</p><p>[/CODE]</p><p></p><p>Редактируем конфиг Nginx (/etc/nginx/nginx.conf):</p><p>[CODE]</p><p>...</p><p>server</p><p>{</p><p> listen 80;</p><p></p><p> server_name ~^(?<one>[a-z0-9-\.]+)00100(?<two>[a-z0-9\-]+)\..domain.com; # берем из адреса название домена и доменную зону проксируемого сайта</p><p></p><p> location /</p><p> {</p><p> root /home/domain.com/www;</p><p> try_files $uri @static;</p><p> }</p><p></p><p> location @static</p><p> {</p><p> set $domain $one.$two; # $domain - проксируемый сайт</p><p> set $t 00100$two;</p><p> set $subdomain $one$t.domain.com; # это наш поддомен вида website00100com.domain.com</p><p></p><p> body_filter_by_lua_file /etc/nginx/scripts/replace.lua; # скрипт lua заметит в проксируемом сайте все ссылки вида website.com на website00100com.domain.com</p><p></p><p> proxy_set_header Host $domain;</p><p> proxy_cookie_domain $domain $subdomain.domain.com;</p><p></p><p> proxy_set_header Accept-Encoding "";</p><p></p><p> resolver 8.8.8.8;</p><p></p><p> set $backend $domain;</p><p></p><p> proxy_pass http://$backend;</p><p></p><p> proxy_redirect http://$domain http://$subdomain.domain.com;</p><p> proxy_redirect https://$domain https://$subdomain.domain.com;</p><p> proxy_redirect http://www.$domain http://$subdomain.domain.com;</p><p> proxy_redirect https://www.$domain https://$subdomain.domain.com;</p><p></p><p> }</p><p>}</p><p>[/CODE]</p><p></p><p>Осталось перезагрузить Nginx командой:</p><p>[CODE]service nginx restart[/CODE]</p><p></p><p>Если у вас возникли сложности с настройкой, пишите в теме, постараемся помочь.</p><p></p><p>Также могут пригодиться следующие материалы:</p><p><a href="http://firstwiki.ru/index.php/Добавление_модулей_nginx_в_Linux_(Debian/Ubuntu/CentOS)">http://firstwiki.ru/index.php/Добавление_модулей_nginx_в_Linux_(Debian/Ubuntu/CentOS)</a></p><p><a href="http://habrahabr.ru/post/130861/">http://habrahabr.ru/post/130861/</a></p><p>[/QUOTE]</p>
[QUOTE="moder, post: 558, member: 1"] Сегодня, с развитием цензуры, [URL='https://roscenzura.com/forums/22/']анонимайзеры[/URL] востребованы все больше. В этой статье мы расскажем, как сделать свой собственный анонимайзер на Nginx в связке с модулем [URL='http://www.lua.org/about.html']Lua[/URL]. Можно, конечно, поставить готовый скрипт, наподобие [URL='https://roscenzura.com/threads/185/']Glype Proxy[/URL], но решение на Nginx удобнее и производительнее. На Хабре есть статья [URL='http://habrahabr.ru/post/158393/']Проксируем и Спасаем[/URL], где описано, как проксировать сайт через Nginx в связке с модулем [URL='https://github.com/yaoweibin/ngx_http_substitutions_filter_module']ngx_http_substitutions_filter_module[/URL]. Данное решение годится, только если требуется проксировать какие-то конкретные сайты, но не годится для нашей задачи. Дело в том, что функция [B]subs_filter[/B] (для поиска и замены текста в содержимом страницы) модуля ngx_http_substitutions_filter_module не умеет искать по переменной и такая конструкция не сработает: [CODE]# $domain - проксируемый сайт, $mirror - наше зерало subs_filter $domain $mirror; [/CODE] Эта странная особенность модуля ngx_http_substitutions_filter_module делает его непригодным для создания анонимайзера, если, конечно, не найдутся желающие [URL='https://github.com/yaoweibin/ngx_http_substitutions_filter_module/blob/master/ngx_http_subs_filter_module.c']доработать модуль[/URL], либо появится новая версия, где поиск переменной будет работать. Вместо ngx_http_substitutions_filter_module для замены ссылок в содержимом страницы мы будем использовать модуль [B]Lua[/B]. Скачиваем модуль [URL='http://www.lua.org/download.html']по ссылке[/URL], либо через консоль: [CODE]wget http://www.lua.org/ftp/lua-5.2.3.tar.gz tar zxf lua-5.2.3.tar.gz cd lua-5.2.3 make linux test[/CODE] [B]Для сборки Nginx с новым модулем устанавливаем дополнительные пакеты.[/B] Для CentOS: [CODE] yum install gcc gcc-c++ kernel-devel yum groupinstall 'Development Tools' [/CODE] Для Debian/Ubuntu: [CODE]aptitude install build-essential[/CODE] [B]Устанавливаем Lua.[/B] [CODE] yum install gcc* -y # обновляем репозиторий yum install libpcre3 libpcre3-dev libperl-dev lua liblua-dev [/CODE] Скачиваем новую версию Nginx: [CODE] wget http://nginx.org/download/nginx-1.6.1.tar.gz tar –xvf nginx-1.6.1.tar.gz cd nginx-1.6.1 [/CODE] Смотрим, какие модули уже установлены: [CODE]nginx -V[/CODE] Теперь копируем вывод команды [B]nginx -V[/B] в текстовой редактор, начиная от [B]--prefix=[/B] и до первого [B]--add-module=[/B] (все присутствующие в выводе --add_module= нам не нужны). Должно получиться примерно следующее: [CODE]--prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_spdy_module --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --with-http_gzip_static_module --with-pcre-jit --with-http_ssl_module[/CODE] Теперь добавляем в конфигурацию запись [B]--add-module=/root/lua-5.2.3[/B], где /root/lua-5.2.3 - это пусть, куда мы распаковали модуль Lua. И собираем Nginx: [CODE]cd /root/nginx-1.6.1 ./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-mail --with-mail_ssl_module --with-file-aio --with-ipv6 --with-http_spdy_module --with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic' --with-http_gzip_static_module --with-pcre-jit --with-http_ssl_module --add-module=/home/ngx_http --add-module=/root/lua make make install [/CODE] [B]Настраиваем конфиг Nginx. [/B] Для удобства, мы сделаем анонимайзер на поддоменах (по такому принципу работает известный анонимайзер hideme.ru). Так, если основной домен у нас domain.com, то проксируемый сайт будет выглядеть так: website.com.domain.com. Но есть одна проблема. Дело в том, что некоторые провайдеры блокируют [URL='http://www.rubanlist.com']запрещенные сайты[/URL] по маске *website.com*, а значит, адрес вида website.com.domain.com нам не подходит. Необходимо зашифровать ссылку. Например, мы можем использовать вместо точки последовательность цифр 00100, таким образом, проксируемый сайт будет выглядеть так: website00100com.domain.com. Итак, для начала мы создадим скрипт на lua, который будем подключать в конфиг Nginx. Назовем его replace.lua и поместим в папку /etc/nginx/scripts/. Содержимое replace.lua: [CODE] #! usr/bin/lua -- /etc/nginx/scripts/subs.lua response_body = ngx.arg[1] response_body = response_body:gsub(ngx.var.domain, ngx.var.subdomain) ngx.arg[1]=response_body [/CODE] Редактируем конфиг Nginx (/etc/nginx/nginx.conf): [CODE] ... server { listen 80; server_name ~^(?<one>[a-z0-9-\.]+)00100(?<two>[a-z0-9\-]+)\..domain.com; # берем из адреса название домена и доменную зону проксируемого сайта location / { root /home/domain.com/www; try_files $uri @static; } location @static { set $domain $one.$two; # $domain - проксируемый сайт set $t 00100$two; set $subdomain $one$t.domain.com; # это наш поддомен вида website00100com.domain.com body_filter_by_lua_file /etc/nginx/scripts/replace.lua; # скрипт lua заметит в проксируемом сайте все ссылки вида website.com на website00100com.domain.com proxy_set_header Host $domain; proxy_cookie_domain $domain $subdomain.domain.com; proxy_set_header Accept-Encoding ""; resolver 8.8.8.8; set $backend $domain; proxy_pass http://$backend; proxy_redirect http://$domain http://$subdomain.domain.com; proxy_redirect https://$domain https://$subdomain.domain.com; proxy_redirect http://www.$domain http://$subdomain.domain.com; proxy_redirect https://www.$domain https://$subdomain.domain.com; } } [/CODE] Осталось перезагрузить Nginx командой: [CODE]service nginx restart[/CODE] Если у вас возникли сложности с настройкой, пишите в теме, постараемся помочь. Также могут пригодиться следующие материалы: [URL]http://firstwiki.ru/index.php/Добавление_модулей_nginx_в_Linux_(Debian/Ubuntu/CentOS)[/URL] [URL]http://habrahabr.ru/post/130861/[/URL] [/QUOTE]
Предпросмотр
Имя
Проверка
Ответить
Главная
Форумы
Противодействие интернет-цензуре
Разработка, техподдержка, инструкции
Делаем анонимайзер на Nginx + Lua
Сверху