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 BlockedNot 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 NatPrivoxy RegExp – Хорошая статья на русском
Centos Iptables Official manualP.S>Очень жду комментариев, буду рад ответить на вопросы.
8 Comments
Leave a Reply
You must be logged in to post a comment.
накрутил в добавок еще squid-havp(clamav-eset) вообще шикарно.
Афтар, нету такой OS Mikrotik а есть RouterOS.
А MikroTik это производитель.
Замечательная статья! Премного благодарен, не с первого раза (с учетом того что в html вообще и javascript в частности первый раз сунулся), но в целом получилось сделать практически все, что задумывал. Появилась мысль к данному сабжу до кучи добавить еще вот это чудо – дабы пользователи хот-спота при всем желании не могли зарезать рекламу через ADBlocker. Но вот тут встал затык – никак не хочет сиё работать. Сделал отдельный js-файл, который тянется вместе с jscript, но он никак не отрабатывает. Вообще. Не отрицаю, что скорее всего мог тупо накосячить с синтаксисом javascript’а. Поэтому, если не тяжело, то был бы весьма признателен за помощь в реализации этой задумки (параллельно сам пока ковыряю основы javascript…глядишь может и сам дойду, но мало ли 🙂 )
Автор, не поделишься своим мылом пожалуйста
nixman@nixman.info, пишите!
Автор, а как сделать авторизацию через социальные сети, можешь рассказать? Тут или в почте?
Сейчас работаем над реализацией. Продукт коммерческий, так что деталей не раскрываю. В будущем схематично опишу в блоге, как и что.
Дата релиза?