Делаем анонимайзер на Nginx + Lua

moder

moder

Администратор
Команда форума
Сегодня, с развитием цензуры, анонимайзеры востребованы все больше. В этой статье мы расскажем, как сделать свой собственный анонимайзер на Nginx в связке с модулем Lua. Можно, конечно, поставить готовый скрипт, наподобие Glype Proxy, но решение на Nginx удобнее и производительнее.

На Хабре есть статья Проксируем и Спасаем, где описано, как проксировать сайт через Nginx в связке с модулем ngx_http_substitutions_filter_module. Данное решение годится, только если требуется проксировать какие-то конкретные сайты, но не годится для нашей задачи. Дело в том, что функция subs_filter (для поиска и замены текста в содержимом страницы) модуля ngx_http_substitutions_filter_module не умеет искать по переменной и такая конструкция не сработает:
Код:
# $domain - проксируемый сайт, $mirror - наше зерало
subs_filter $domain $mirror;
Эта странная особенность модуля ngx_http_substitutions_filter_module делает его непригодным для создания анонимайзера, если, конечно, не найдутся желающие доработать модуль, либо появится новая версия, где поиск переменной будет работать.

Вместо ngx_http_substitutions_filter_module для замены ссылок в содержимом страницы мы будем использовать модуль Lua.
Скачиваем модуль по ссылке, либо через консоль:
Код:
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
Для сборки Nginx с новым модулем устанавливаем дополнительные пакеты.

Для CentOS:
Код:
yum install gcc gcc-c++ kernel-devel
yum groupinstall 'Development Tools'
Для Debian/Ubuntu:
Код:
aptitude install build-essential
Устанавливаем Lua.
Код:
yum install gcc* -y # обновляем репозиторий
yum install libpcre3 libpcre3-dev libperl-dev lua liblua-dev
Скачиваем новую версию Nginx:
Код:
wget http://nginx.org/download/nginx-1.6.1.tar.gz
tar –xvf nginx-1.6.1.tar.gz
cd nginx-1.6.1
Смотрим, какие модули уже установлены:
Код:
nginx -V
Теперь копируем вывод команды nginx -V в текстовой редактор, начиная от --prefix= и до первого --add-module= (все присутствующие в выводе --add_module= нам не нужны).
Должно получиться примерно следующее:
Код:
--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=/root/lua-5.2.3, где /root/lua-5.2.3 - это пусть, куда мы распаковали модуль Lua.
И собираем Nginx:
Код:
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

Настраиваем конфиг Nginx.

Для удобства, мы сделаем анонимайзер на поддоменах (по такому принципу работает известный анонимайзер hideme.ru). Так, если основной домен у нас domain.com, то проксируемый сайт будет выглядеть так: website.com.domain.com. Но есть одна проблема. Дело в том, что некоторые провайдеры блокируют запрещенные сайты по маске *website.com*, а значит, адрес вида website.com.domain.com нам не подходит. Необходимо зашифровать ссылку. Например, мы можем использовать вместо точки последовательность цифр 00100, таким образом, проксируемый сайт будет выглядеть так: website00100com.domain.com.

Итак, для начала мы создадим скрипт на lua, который будем подключать в конфиг Nginx. Назовем его replace.lua и поместим в папку /etc/nginx/scripts/.
Содержимое replace.lua:
Код:
#! 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
Редактируем конфиг Nginx (/etc/nginx/nginx.conf):
Код:
...
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;

  }
}
Осталось перезагрузить Nginx командой:
Код:
service nginx restart
Если у вас возникли сложности с настройкой, пишите в теме, постараемся помочь.

Также могут пригодиться следующие материалы:
http://firstwiki.ru/index.php/Добавление_модулей_nginx_в_Linux_(Debian/Ubuntu/CentOS)
http://habrahabr.ru/post/130861/
 
Последнее редактирование:
Igorkoff

Igorkoff

New Member
Нужно НАСТРОИТЬ простой proxy скрипт типа web анонимайзера чтобы работал наподобие cameleo (пример cameleo xyz) с возможностью заходить и авторизоваться на разных сайтах ( в основном Гугл).

Для теста пробовалось скрипт Php-proxy и скрипт Glype (если по сайтам просто браузить то нормально, но при входе например в mail.google.com не реагирует при нажатии на кнопку "Далее"), а вот у других например как cameleo xyz скрипт работает и в гугл почту входишь нормально через него.

Возможно нужно как-то подкорректировать популярный скрипт анонимайзер Glype или аналоги.

Думаю работы там минут на 30!!!
Оплата 3000руб сразу после выполнения (Webmoney или ЯндексДеньги)
Мой Контакт ush_svp@mail.ru
 
Сверху