Производители SamrtTV добавляют много удобств в свои телевизоры. Из которых я пользуюсь телевидением, IP телевидением, просмотром содержимого своего DNLA сервера, youtube и skype.
В замен производители (об этом написано в очередном соглашении после очередного обновления прошивки и ПО, отказаться невозможно) хотят знать что и когда смотрю, что запускаю и т.п. Особенно «нравиться» возможность удаленно подключаться к телевизору для помощи — это конечно полезно, но всё-таки…
По возможности постарался исказить эту статистику путем блокирования пакетов от телевизора на соответствующие домены.
В качестве шлюза 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 ; } } } }
ссылка на оригинал статьи https://geektimes.ru/post/270242/
Добавить комментарий