TV inteligente - talvez não esteja assistindo. Mas ainda ...

Os fabricantes de SmartTV estão adicionando muita comodidade às suas TVs. Dos quais eu uso televisão, televisão IP, visualizando o conteúdo do meu servidor DNLA, youtube e skype.

Em troca, os fabricantes (escritos no próximo contrato após a próxima atualização de firmware e software, é impossível recusar) querem saber o que e quando visualizo, o que inicio etc. Gosto especialmente da capacidade de conectar remotamente à TV para obter ajuda - isso é certamente útil, mas ainda assim ...

Se possível, tentei distorcer essas estatísticas bloqueando pacotes da TV para os domínios correspondentes.

Como um gateway Mikrotik, abaixo do corte há um script que restringe o acesso pelo nome do DNS da lista.
A lista de domínios bloqueados não está completa, foi compilada a partir da Internet.

O script também pode ser usado para bloquear outros domínios.

Parâmetros de script:
  • A lista de domínios a serem bloqueados é especificada no corpo do script.
    Você pode bloquear o domínio, especificando-o na forma exata
    "msecnd.net";

    ou todos os domínios de nível superior indicando *
    "*.adform.net";
  • NameAddressList - nome do AddressList para uso posterior nas regras de firewall


O script é executado dentro do cronograma - eu tenho 1 vez por minuto.

No firewall, você precisa adicionar uma regra que bloqueie o acesso do SmartTV a domínios da lista (especificada no script, parâmetro NameAddressList) do formulário
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 - o endereço da TV.

Como funciona:
  • após o primeiro acesso ao domínio - o endereço IP correspondente cai no cache do Mikrotik
  • o script verifica o cache e, se corresponder, o endereço IP correspondente será bloqueado com TTL para não obstruir a lista. Se TTL = 0, TTL = 59 segundos.
  • a regra correspondente no firewall bloqueia pacotes para esse endereço IP.

Acontece que dentro de 1 minuto (no meu caso) após a resolução do domínio - o endereço IP será bloqueado.

Um minuto depois de ligar a TV - cerca de duas dúzias de endereços IP bloqueados. Isso acontece mais.

A observação de domínios bloqueados por meia hora mostrou:
  • eles são acessados ​​mesmo que o canal e o volume não mudem
  • chamadas suficientes para se preocupar


A carga criada no roteador - no nível do erro - não notou um aumento.

Script em si
: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 ;
			}
		}
	}
}



Atualização 2017.06.13
Após o lançamento da versão do RouterOS 6.36 - tornou-se possível bloquear pelo nome do DNS e não pelo endereço IP. O script foi refeito.
O estado atual do
github.com/ErshovSergey/Mikrotik_update_AddressList_ip

Source: https://habr.com/ru/post/pt389821/


All Articles