Smart TV — может и не следит. Но всё-таки…

от автора

Производители 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *