В замен производители (об этом написано в очередном соглашении после очередного обновления прошивки и ПО, отказаться невозможно) хотят знать что и когда смотрю, что запускаю и т.п. Особенно «нравится» возможность удаленно подключаться к телевизору для помощи — это конечно полезно, но всё-таки…
По возможности постарался исказить эту статистику путем блокирования пакетов от телевизора на соответствующие домены.
В качестве шлюза Mikrotik, под катом скрипт, который ограничивает доступ по dns имени из списка.
Список блокируемых доменов не полный, был собран с просторов интернет.
Скрипт можно использовать и для блокирования других доменов.
Параметры скрипта:
- Список доменов, которые надо заблокировать — задается в теле скрипта.
Можно заблокировать домен указав его в точном виде
"msecnd.net";
или все домены большего уровня указав *
"*.adform.net";
- NameAddressList — имя AddressList для последующего использования в правилах firewall
Скрипт запускается по расписанию — у меня 1 раз минуту.
В firewall надо добавить правило, которое блокирует доступ для SmartTV до доменов из списка (задается в скрипте, параметр NameAddressList) вида
chain=forward action=reject reject-with=icmp-network-unreachable src-address=192.168.100.123 dst-address-list=BlockSpySmartTV log=no log-prefix="BlockSpySmartTV: "
192.168.100.123 — адрес телевизора.
Как работает:
- после первого обращения к домену — соответствующий ip адрес попадает в кэш Mikrotik
- скрипт проверяет кеш и при совпадении соответствующий IP адрес блокируется с указанием TTL чтобы не засорять список. Если TTL=0, то TTL=59 секунд.
- соответствующее правило в firewall блокирует пакеты на этот IP адрес.
Получается, что в течении 1 минуты (в моем случае) после резолва домена — IP адрес будет заблокирован.
Спустя минуту после включения телевизора — порядка двух десятков заблокированных IP адресов. Бывает и больше.
Наблюдение в течении получаса за заблокированными доменами показало:
- обращение к ним идет даже если не меняется канал и громкость
- количество обращений достаточное для беспокойства
Создаваемая на роутер нагрузка — на уровне погрешности — увеличения не заметил.
:local NameAddressList "BlockSpySmartTV"
# блокируемые домены
:local DNSDomains {
"*.samsungelectronics.com";
"*.samsungcloudsolution.com";
"*.samsungcloudsolution.net";
"*.samsungcloudsolution.com";
"*.samsungrm.net";
"*.samsungotn.net";
"*.samsungosp.com";
"*.internetat.tv";
"*.samsungyosemite.com";
"*.cloudfront.net";
"*.google-analytics.com";
"*.googletagservices.com";
"*.googlesyndication.com";
"*.amazonaws.com";
"*.krxd.net";
"*.cloudapp.net";
"*.doubleclick.net";
"*.xiti.com";
"*.pavv.co.kr";
"*.adform.net";
# youtube
#"*.ytimg.com";
#
"msecnd.net";
}
# количество доменов
:local QuantDNSDomains [:len $DNSDomains]
:for iDNSDomain from=0 to=($QuantDNSDomains-1) do={
# текущий домен
:local CurrentDNSDomain (:put ($DNSDomains->($iDNSDomain)))
:log debug " CurrentDNSDomain:'$CurrentDNSDomain'"
:local prfx [:pick $CurrentDNSDomain 0 1];
:log debug " prfx:'$prfx'"
:if ($prfx != "*") do={
# если dns имя есть в кеше dns
:foreach i in=[/ip dns cache all find where (name~$CurrentDNSDomain ) ] do={
# ищем соответстсвующее dns имя и ip адрес
:local cacheName [/ip dns cache get $i name] ;
:local tmpAddress [:resolve $cacheName]
:log debug " cacheName :'$cacheName' tmpAddress:'$tmpAddress'"
#prevent script from using all cpu time
delay delay-time=10ms
# если этот адрес не блокируется
:if ( [/ip firewall address-list find where address=$tmpAddress] = "") do={
:local cacheName [/ip dns cache get $i name] ;
:local cacheNameTTL [/ip dns cache get $i ttl] ;
# если ttl<1m, то ttl=1m
:log debug " cacheNameTTL: $cacheNameTTL "
:if ( $cacheNameTTL < "00:00:59" ) do={
:set cacheNameTTL "00:00:59"
:log debug " SET cacheNameTTL: $cacheNameTTL "
}
:log warning (" added entry: dns-name: $cacheName ip-addr:$tmpAddress ttl:$cacheNameTTL ");
/ip firewall address-list add address=$tmpAddress list=$NameAddressList comment=$cacheName timeout=$cacheNameTTL ;
}
}
} else {
# есть префикс - убираем
:set CurrentDNSDomain [:pick $CurrentDNSDomain 1 [:len $CurrentDNSDomain] ];
# если dns имя есть в кеше dns
:foreach i in=[/ip dns cache all find where (name~$CurrentDNSDomain ) ] do={
# ищем соответстсвующее dns имя и ip адрес
:local cacheName [/ip dns cache get $i name] ;
:local tmpAddress [:resolve $cacheName]
:log debug " cacheName :'$cacheName' tmpAddress:'$tmpAddress'"
#prevent script from using all cpu time
delay delay-time=10ms
# если этот адрес не блокируется
:if ( [/ip firewall address-list find where address=$tmpAddress] = "") do={
# ttl для записи в кеше dns
:local cacheNameTTL [/ip dns cache get $i ttl] ;
# если ttl<1m, то ttl=1m
:log debug " cacheNameTTL: $cacheNameTTL "
:if ( $cacheNameTTL < "00:00:59" ) do={
:set cacheNameTTL "00:00:59"
:log debug " SET cacheNameTTL: $cacheNameTTL "
}
:log debug (" CurrentDNSDomain: '$CurrentDNSDomain' added entry: dns-name: $cacheName ip-addr:$tmpAddress ttl:$cacheNameTTL ");
/ip firewall address-list add address=$tmpAddress list=$NameAddressList comment=$cacheName timeout=$cacheNameTTL ;
}
}
}
}
Комментарии (40)
sarhome
01.02.2016 16:11Спасибо! Давно искал что-то подобное. Подскажите пожалуйста, у меня роутер Dlink-DIR 615 с прошивкой DD-WRT, мне этот скрип вставить в поле Cron?
Спасибо.u010602
01.02.2016 16:13А DD-WRT поддерживает скрипты от Микротика?
sarhome
01.02.2016 16:16А что там прошивка не на основе Linux?
Rumlin
01.02.2016 16:34На DD-WRT можно свой hosts положить, заодно и рекламу «порезать».
svosin
01.02.2016 16:48На OpenWRT (и DD-WRT тоже) можно не насиловать hosts, а поставить Privoxy с примотанными синей изолентой фильтрами от AdBlock Plus. blog.vanutsteen.nl/2014/01/05/installing-privoxy-with-adblock-filters-on-openwrt
Rumlin
01.02.2016 17:28У меня adBlock не берет то что берет специальный список hosts, например начисто вычищает рекламу Яндекс. И в данном случае в борьбе с телевизором adBlock не поможет.
Alexeyslav
01.02.2016 18:21А пробовали правила по хостам ввести в adBlock? hosts — это очень грубый инструмент и неэффективный против CDN например. Неужели adBlock не умеет банально блокировать хосты?
Rumlin
01.02.2016 18:32Каким-то образом реклама появлялись вновь, пока hosts хороший не скачал. И теперь ставлю только Ghostery без Adblock. Только антивирусы hosts не любят — норовят удалить.
u010602
01.02.2016 19:14Посоветуйте хороший hosts, пожалуйста.
Rumlin
02.02.2016 08:23Самый простой способ, которым я пользовался — я взял hosts из андроид приложения adfree.
Как вариант свежий сборник — github.com/StevenBlack/hosts
Ниже комментарии пример статьи на хабре geektimes.ru/post/270242/#comment_8981766
Alexeyslav
01.02.2016 20:06Т.е. вы принципиально ручками не хотите прописывать правила в Adblock? Блокировать рекламу при помощи hosts — это из пушки по воробьям. Крайне неэффективно и сложно обходить рекламные CDN. Может они вам ещё не попадались…
Rumlin
02.02.2016 08:13Покрайней мере с hosts мне стало комфортнее, примерно как в статье habrahabr.ru/post/263081
Хоть и пользовался много лет Adblock, это только браузер, а hosts — всё.
dartraiden
05.02.2016 15:18+1Насколько помню, такое решение (Privoxy с фильтрами AdBlock) весьма требовательно к ресурсам процессора и памяти.
Вариант с hosts намного менее прожорлив. Для OpenWRT есть очень недурственная реализация, посмотрите «teffalump OpenWRT adblock implementation» (ссылки вставлять не могу, увы). Этот скрипт умеет брать из интернета уже готовые списки «плохих» доменов и склеивает их в один файл. Поддерживает «чёрные» (добавляем в специальный файл собственные домены) и «белые» (если нужно какой-то конкретный домен разблокировать) списки. У меня сейчас там используется около 8 разных списков, и на роутере с 32 мегабайтами оперативной памяти никаких тормозов при этом нет.
Кроме того, в репозиториях OpenWRT и Gargoyle (упрощённый форк, расчитанный на неискушённого пользователя) уже разрабатываются пакеты с аналогичным функционалом. Так что, в следующем выпуске OpenWRT такой «адблок на роутере» можно будеть легко установить из родного репозитория.
Varkus
01.02.2016 21:40На основе, но есть одно большое НО
Маша и Саша оба из мяса, костей и прочего, тогда почему Саша инженер, а Маша учитель?
Аналогия может не из лучших, но принцип тот же.
Если конкретнее: синтаксис данного скрипта я никогда не видел ни в DD-WRT ни в OpenWRT.
Вот буквально первые строки моих скриптов в OpenWRT, 4я строка переделана из предложенного скрипта
#!/bin/sh
# Copyright © 2016 Varkus.pro
NameAddressList=«BlockSpySmartTV»
saboteur_kiev
01.02.2016 18:23С уверенностью на 99%, могу сказать что LG TV с WebOS, выпуском до начала 2016 года, пока еще не следят.
А в каких ТВ, можно удаленно подключаться «для помощи»? А то хотелось бы знать потенциального врага в лицо…
Koshkodevka
01.02.2016 21:40Статистику по просмотрам собирают у клиентов. С аналоговым TV такое куда труднее провернуть. Приходится платить, выдавать железяки, да подписывать контракты с людьми для этого. Даже результаты не точные получаются, так как охват аудитории мал. Так по большей части рейтинги и додумываются. Не вдавался в договоры на цифровое телевидение, но наверняка там присутствует пунктик насчет сбора статистических данных. Хорошо это или плохо? Время покажет.
Rumlin
02.02.2016 08:26+1Как только на экранах появятся кнопки like и dislike на телевидении появится много безработных телеведущих.
Demon_i
01.02.2016 21:41А как этот скрипт работает с обновлением прошивки? Насколько я вижу он блокирует домен полностью. По Вашему мнению лучше оставаться на дырявой прошивке доступной для всех, чем отсылать данные производителю?
ErshoFF
01.02.2016 21:51За последний месяц обновления не было. Проверяется отключением правила firewall и принудительной проверкой обновления.
Опять же новая версия обычно новые правила навязываемые в одностороннем порядке.
Что в вашем понимании «дырявой прошивке доступной для всех»?
Телевизор в «серой» сети — доступ снаружи (в вашем определении «всем») запрещен.
JerleShannara
02.02.2016 17:49Бррр, хватит с меня обновлений прошивки телевизора. Лыжу пришлось два раза восстанавливать после очередного «хазяина, я тут прашивка нашёль, давай обновлюсь». Причём если в первый раз оно тупо потеряло звук, то во второй раз оно стало вырубаться раз в 2 минуты, очень весело восстанавливать прошивку, когда оно посреди процесса отключается. А про дыры — мне как-то пофигу, доступа извне к телевизору нет + всякие «подключи сюды свитер и пейсбук» не использую
ppl2scripts
01.02.2016 21:55Могу сказать за LG. Там только статистика просмотров, и то в очень обрезанном виде.
Всё, на самом деле, для улучшения качества вещания. Но Россия — не целевой сегмент.ErshoFF
01.02.2016 21:58С LG проще — список необходимых для блокировки доменов гораздо короче и более предсказуем
Пока искал для SmartTV натыкался на список для LG, всего 3 или 4 домена.
Опять же вроде LG закрыла направление smart для России.ppl2scripts
01.02.2016 22:05Очень жаль. На самом деле, я бы не рассматривал это всё исключительно в негативном свете.
Широковещательные каналы чёткой статистики не имеют, но очень хотели бы её иметь. Может быть они показывают то, что никто смотреть не хочет?
До целевой рекламы именно для вас, на вашем телевизоре ещё очень далеко.ErshoFF
01.02.2016 22:08Вы считаете, что производители умных телевизоров будут делится статистикой с широковещательными каналами четкой?
ppl2scripts
01.02.2016 22:09Уже делятся, за денежку.
ErshoFF
01.02.2016 22:11Поделитесь ссылкой пожалуйста, желательно с каналами вещающими на территории РФ.
ppl2scripts
01.02.2016 22:14+1Про Россию не скажу, потому что этот рынок мне совсем не знаком. В США эти данные продаёт, например, Sorenson Media.
Dmitry_Th
01.02.2016 22:03А почему не разрешить телевизору ходить только на белый список адресов?
Мало ли куда он полезет, особенно когда вирус схватит.ErshoFF
01.02.2016 22:09«Белый список» — это более правильно.
Не нашел такого списка пока был в процессе создания этого скрипта.Dmitry_Th
01.02.2016 22:13Полагаю, раньше или позже появится. Смотрите зарубежные форумы. Не у вас одного такая потребность возникла же. И вайфай в телевизоре отключите, а то через соседский незапароленный вылезет и зловредов наловит.
under-c
05.02.2016 15:06На моем самсунге можно кастомно принять пункты соглашения. По крайне те, в которых говорится о сборе данных я расчекбоксил при первичной настройке телика. Это конечно ни чего не гарантирует, но по крайней мере я выразил свое несогласие на сбор данных самсунгом.
sergarcada
05.02.2016 15:10Всем чего-то хочется собрать. Пора бы уже за пользование интернетом начать пользователям платить. Как в старом анекдоте: «Однако, я хотел — шкурку тебе давал. Ты хотел — шкурку мне давай.»
AndreyUA
05.02.2016 15:17Я на устройствах, таких как спутниковые ресиверы, блокировал непонятные хождения по сети не имея iptables маршрутами.
ip route add blackhole 0.0.0.0/0
u010602
Не знаю как тут принято делать, в свете возможности комментировать с гостевых аккаунтов, но не возможности голосовать.
Но скажу от себя — большое спасибо за скрипт.