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

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

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

Задачи и цели

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

Строить, строить, мастерить: 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, будет выглядеть следующим образом:

This Page is Blocked

Not Found

The requested URL @protocol@@hostport@@path@ was blocked on this server.

Теперь файл запуска – 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@@$&// <![CDATA[
@sigx

FILTER: main_div_gl Add bottom baner
s@@

\n\n \n \n $&@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>Очень жду комментариев, буду рад ответить на вопросы.

8 Comments

  1. Автор, а как сделать авторизацию через социальные сети, можешь рассказать? Тут или в почте?

    1. Сейчас работаем над реализацией. Продукт коммерческий, так что деталей не раскрываю. В будущем схематично опишу в блоге, как и что.

Leave a Reply