Pull to refresh

История посещения сайтов через журналы маршрутизатора Mikrotik

Reading time 3 min
Views 60K
В своей работе мне часто приходится использовать данные маршрутизаторы для решения своих задач. В данном случае, необходимо было предоставить доступ в интернет через роутер RB450G, имея возможность блокировать определенные сайты по маске имени и сохранять историю посещений. Далее будет показан пример решения такой задачи с использованием бесплатного ПО.

Для начала было решено настроить прозрачный прокси. В роутере есть свой Web-proxy, чтобы сделать его прозрачным выполняем согласно примеру в документации

code>ip firewall nat add in-interface=ether1 dst-port=80 protocol=tcp action=redirect to-ports=8080 chain=dstnat
ip proxy set enabled=yes port=8080

что перебрасывает запросы по 80(HTTP) порту на порт прокси сервера 8080. Теперь можно добавить блокируемые адреса, например так

/ip proxy access add action=deny redirect-to=192.168.0.1/404 dst-host=:facebook

В данном случае будут блокироваться запросы содержащие слово «facebook» и переадресовываться на внутреннюю страницу 192.168.0.1/404 (что конечно же необязательно). После двоеточия в параметре dst-host можно использовать и регулярные выражения.

Далее встал вопрос, как же, собственно накапливать и обрабатывать журнал посещений. Встроенного или иного продукта от производителя предусмотрено не было. После чтения документации и поиска по тематическим форумам был найден продукт Webproxy-log. Продукт несколько топорный, но подсказывающий направление (хотя для небольшой нагрузки и он вполне сгодится). Как это работает:
1. В настройке назначения журналирования добавляется раздел для предачи в syslog сервер.

/system logging action add name=proxylog target=remote remote=192.168.0.1 src-address=192.168.0.3


192.168.0.1 — адрес syslog сервера, в который мы будем направлять журнал. 192.168.0.3 — внутренний адрес маршрутизатора.
2. Создадим раздел самого журнала, который будет использовать созданное назначение и направлять туда логи прокси сервера
.
/system logging add topics=web-proxy action=proxylog

На этом этапе роутер будет отсылать логи вида

web-proxy,account 192.168.0.59 GET imgcdn.ptvcdn.net/pan_img/appDownload/PandoraService/Service_Info.
xml action=allow cache=MISS
web-proxy,debug GET /pan_img/appDownload/PandoraService/Service_Info.xml HTTP/1.1
web-proxy,debug Cache-control: no-cache
web-proxy,debug Pragma: no-cache
web-proxy,debug Host: imgcdn.ptvcdn.net
web-proxy,debug Accept: text/html, */*
web-proxy,debug Accept-Encoding: identity
web-proxy,debug User-Agent: Mozilla/3.0 (compatible; Indy Library)
web-proxy,debug X-Proxy-ID: 1074695054
web-proxy,debug X-Forwarded-For: 192.168.0.59
web-proxy,debug Via: 1.1 192.168.0.3 (Mikrotik HttpProxy)
web-proxy,debug


где с префикса web-proxy,account будет записан адрес пользователя пославшего запрос, и сам запрос.

3. В качестве сервера можно использовать вышеуказанный продукт, который состоит из двух частей:
WebProxy Log Catcher — приложение (как служба не устанавливается) сам простой syslog сервер, собирающий логи для последующей обработки и добавляющий метки времени.
WebProxy Log — интерфейс просмотра журналов, при каждом запуске импортирующий накопленные сборщиком логи в локальную БД.
image

Настройка приложения сложностей не вызывает и достаточно описана в документации.

Учтя несложный формат логов, не сложно написать свой анализатор журналов отправляемых маршрутизатором и позже для собственных целей была написана небольшая служба с вэб-интерфейсом, используя Delphi и компоненты ICS, сохраняющая журналы в бд на базе SQL server express.

Возможно, всё перечисленное поможет Вам сэкономить время при решении подобных задач и немного познакомит с возможностями маршрутизаторов данного производителя.
Tags:
Hubs:
+6
Comments 2
Comments Comments 2

Articles