- PVSM.RU - https://www.pvsm.ru -
Это вторая часть статьи, иллюстрирующие возможности использования OS Mikrotik, в качестве HotSpot точки. В первой части я рассказывал как настроить HotSpot, а так же познакомил с возможностью выдачи и покупки карт доступа. Ознакомиться с первой частью вы можете здесь [1].
Наша основная цель состоит в том что бы, на своем HotSpot'е научиться внедрять рекламу, на все сайты которые посещает пользователь.
Для начала нам нужно немного перестроить текущий 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 [2], однако работает она крайне медленно и вообще не очень стабильно, зачем она написано, для меня так и осталось загадкой.
#создаем папки
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
В этом разделе я приведу пример конфигурационных файлов с комментариями.
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 [1]
HTTP::Proxy [2] — модуль для создания proxy средствами Perl
Privoxy Official manual [3]
Mikrotik Customizing Hotspot [4] — создание своего HotSpot на Mikrotik
Mikrotik IP Firewall Nat [5]
Privoxy RegExp [6] — Хорошая статья на русском
Centos Iptables Official manual [7]
P.S>Очень жду комментариев, буду рад ответить на вопросы.
Автор: somegreed
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/javascript/31112
Ссылки в тексте:
[1] здесь: http://nix.khd.ru/?p=2141
[2] HTTP::Proxy: http://search.cpan.org/~book/HTTP-Proxy-0.29/lib/HTTP/Proxy.pm
[3] Privoxy Official manual: http://www.privoxy.org/user-manual/index.html
[4] Mikrotik Customizing Hotspot: http://wiki.mikrotik.com/wiki/Manual:Customizing_Hotspot
[5] Mikrotik IP Firewall Nat: http://wiki.mikrotik.com/wiki/Manual:IP/Firewall/NAT
[6] Privoxy RegExp: http://greignar.blogspot.ru/2010/03/privoxy.html
[7] Centos Iptables Official manual: http://wiki.centos.org/HowTos/Network/IPTables
[8] Источник: http://habrahabr.ru/post/175303/
Нажмите здесь для печати.