Делаем анонимайзер на 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/
 
Последнее редактирование:
moder

moder

Администратор
Команда форума
Для удобства, мы сделаем анонимайзер на поддоменах (по такому принципу работает известный анонимайзер hideme.ru).
Сейчас hideme.ru использует другой алгоритм генерации ссылок.
 
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
 
Сверху