HotSpot в Mikrotik, или как заработать $: Часть 2

от автора

Общие сведения

Это вторая часть статьи, иллюстрирующие возможности использования OS Mikrotik, в качестве HotSpot точки. В первой части я рассказывал как настроить HotSpot, а так же познакомил с возможностью выдачи и покупки карт доступа. Ознакомиться с первой частью вы можете здесь.

Задачи и цели

Наша основная цель состоит в том что бы, на своем HotSpot’е научиться внедрять рекламу, на все сайты которые посещает пользователь.

Строить, строить, мастерить: Mikrotik

Для начала нам нужно немного перестроить текущий HotSpot для того что бы все запросы проксировались через вспомогательный сервер, выполняем следующую команду на маршрутизаторе:

/ip firewall nat add action=dst-nat chain=hs-auth comment="hotspot redirect to proxy" \ disabled=no dst-port=80 in-interface=!e2_v454 protocol=tcp to-addresses=\ XX.XX.XX.XX to-ports=3120 place-before=0 

где XX.XX.XX.XX — ip адрес вспомогательного сервера,
3120 — порт прокси.

Это правило перенаправляет весь трафик на вспомогательный прокси сервер, который его будет анализировать и модернизировать под наши нужды.

Строить, строить, мастерить: Вспомогательный сервер

Я использую в качестве вспомогательно сервера Centos 5.4. Добавляем следующие правило в iptables:

#proxy -A VZ_INPUT -p tcp -m tcp --dport 3120 -j ACCEPT 

Я использую не стандартные название таблиц фильтра, если хотите изменить их как у меня, сделаете следующие изменения в файле /etc/sysconfig/iptables:

:OUTPUT DROP [0:0] :VZ_FORWARD - [0:0] :VZ_INPUT - [0:0] :VZ_OUTPUT - [0:0] -A INPUT -j VZ_INPUT. -A FORWARD -j VZ_FORWARD. -A OUTPUT -j VZ_OUTPUT. 

Для проксирования трафика, я использую Privoxy, он довольно быстро обрабатывает большое количество соединений.
В начале моих опытов я использовал perl и библиотеку HTTP::Proxy, однако работает она крайне медленно и вообще не очень стабильно, зачем она написано, для меня так и осталось загадкой.

#создаем папки mkdir /usr/local/proxy mkdir /usr/local/proxy/privoxy cd /usr/local/proxy/privoxy #загружаем wget http://downloads.sourceforge.net/project/ijbswa/Sources/3.0.21%20%28stable%29/privoxy-3.0.21-stable-src.tar.gz #распаковываем и собираем tar xvf privoxy-3.0.21-stable-src.tar.gz cd privoxy-3.0.21-stable make #создаем папку bin для переноса только нужных файлов mkdir /usr/local/proxy/privoxy/bin/ 

И так копируем только следующие файлы:

templates config logfile match-all.action privoxy run.sh user.action user.filter 

В папке templates, рекомендую расположить следующие файлы:

blocked cgi-error-404 cgi-error-bad-param cgi-error-disabled cgi-error-file cgi-error-file-read-only cgi-error-modified cgi-error-parse connect-failed connection-timeout forwarding-failed no-server-data no-such-domain 

А так же изменить содержимое каждого из них на очень простое(по умолчанию Privoxy выдает кучу лишней информации клиенту), например файл blocked, будет выглядеть следующим образом:

<html><head> <title>This Page is Blocked</title> </head><body> <h1>Not Found</h1> <p>The requested URL @protocol@@hostport@@path@ was blocked on this server.</p> </body></html> 

Теперь файл запуска — run.sh:

#!/bin/sh  killall -9 privoxy ./privoxy 

Добавляем временно его в автозагрузку(так как для постоянного запуска лучше использовать команду service), а именно строчку
/usr/local/proxy/privoxy/bin/run.sh
в файл /etc/rc.d/rc.local

Настройка: Privoxy

В этом разделе я приведу пример конфигурационных файлов с комментариями.

config:

confdir . logdir . actionsfile user.action      # пользовательский конфиг действий filterfile user.filter      # пользовательский конфиг фильтра logfile logfile #лог файл listen-address  XX.XX.XX.XX:3120 #прослушиваемый адрес и порт accept-intercepted-requests 1 #важная строчка без неё прокси не будет обрабатывать перенаправленные запросы #остальные настройки я оставил как есть, они были в конфигурации по умолчанию toggle  1 enable-remote-toggle  0 enable-remote-http-toggle  0 enable-edit-actions 0 enforce-blocks 0 buffer-limit 4096 forwarded-connect-retries  0 allow-cgi-request-crunching 0 split-large-forms 0 keep-alive-timeout 5 socket-timeout 300 debug 12289 

А теперь файл user.action:

{+filter{inc_jsc} +filter{main_div_gl}} # Применяет фильтры inc_jsc и main_div_gl ко всем адресам /  {-filter{open-link-in-self-frame} -filter{main_div_gl}} # Блокирует применение фильтров для след. адресов(зачем добавлять рекламу google в сам google) .ad.doubleclick.net .ads.r.us/banners/ .google .googles. .googles .googleads. .doubleclick. .gstat. 

Собственно самый главный файл user.filter:

FILTER: inc_jsc #добавляет в тег head два js файла, один стандартный jquery, а второй наш специальный s@<head>@$&<script type="text\/javascript" src="http:\/\/lk.blablabla.ru\/js\/jquery.min.js"><\/script><script type="text\/javascript" src="http:\/\/lk.blablabla.ru/jscript"><\/script>@sigx  FILTER: main_div_gl Add bottom baner s@</body(\s+\w+(\s*=\s*(\w+|'[^']*'|"[^"]*"))?)*\s*>@<div align="center" id="div_m_gl" style="display: none;">\n<script type="text\/javascript">\n <!-- \n google_ad_client = "ca-pub-YYYYYYYYYYYYYYYYYYY";\n google_ad_slot = "MMMMMMMMMM"; \n google_ad_width = 728; \n google_ad_height = 15; \n \/\/--> \n <\/script> \n <script type="text\/javascript" src="http:\/\/pagead2.googlesyndication.com\/pagead\/show_ads.js"><\/script><\/div>$&@sigx 

А теперь вашему вниманию покажу файл lk.blablabla.ru/jscript, он проверяет на стороне клиента адреса, а так же контент и в зависимости от этого может включать или не включать рекламу, более этого этот файл динамический, а соответственно, можно глобально выключить показ рекламы(изменять список запрещенных к показу рекламы сайтов, сортировка клиентов, например тех кто пользуется платным доступом и т. д.) не останавливая прокси сервер:

$(document).ready(function() {      var view = 1; var arr_links = ['blabla.ru', 'bla.ru', 'file']  //проверяем по списку, мало ли, может сайт запрещенный var a = document.URL; for (var i in arr_links) {     var re = new RegExp(arr_links[i], 'i');     if (a.match(re)) {     	view = 0;     }      } //включаем рекламу, если всё в порядке if (view) {             	var state = 'block'; 	var layer_ref = 'div_m_gl'; 	if (document.all) { //IS IE 4 or 5 (or 6 beta) 		eval( "document.all." + layer_ref + ".style.display = state"); 	} 	if (document.layers) { //IS NETSCAPE 4 or below 		document.layers[layer_ref].display = state; 	} 	if (document.getElementById &&!document.all) { 		hza = document.getElementById(layer_ref); 		hza.style.display = state; 	}  }              }); 

Заключение

В этой статье я хотел показать как можно заработать $, на своем HotSpot предоставляя доступ в сеть интернет на бесплатно основе с ненавязчивой рекламой, самого различного характера. А так же прилагаю список материалов, откуда я черпал знания для реализации проекта.

HotSpot в Mikrotik, или как заработать $: Часть 1
HTTP::Proxy — модуль для создания proxy средствами Perl
Privoxy Official manual
Mikrotik Customizing Hotspot — создание своего HotSpot на Mikrotik
Mikrotik IP Firewall Nat

Privoxy RegExp — Хорошая статья на русском
Centos Iptables Official manual

P.S>Очень жду комментариев, буду рад ответить на вопросы.

ссылка на оригинал статьи http://habrahabr.ru/post/175303/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *