Smart TV - vielleicht nicht gucken. Aber immer noch ...

SmartTV-Hersteller bieten ihren Fernsehgeräten viel Komfort. Davon benutze ich Fernsehen, IP-Fernsehen, um den Inhalt meines DNLA-Servers, Youtube und Skype anzusehen.

Im Gegenzug möchten Hersteller (dies steht in der nächsten Vereinbarung nach dem nächsten Firmware- und Software-Update, es ist unmöglich, dies abzulehnen) wissen, was und wann ich schaue, was ich starte usw. Ich mag besonders die Möglichkeit, eine Remote-Verbindung zum Fernseher herzustellen, um Hilfe zu erhalten - dies ist sicherlich nützlich, aber dennoch ...

Wenn möglich, habe ich versucht, diese Statistiken zu verzerren, indem ich Pakete vom Fernseher zu den entsprechenden Domänen blockiert habe.

Als Mikrotik-Gateway befindet sich unter dem Schnitt ein Skript, das den Zugriff durch den DNS-Namen aus der Liste einschränkt.
Die Liste der blockierten Domains ist nicht vollständig und wurde aus dem Internet zusammengestellt.

Das Skript kann auch zum Blockieren anderer Domänen verwendet werden.

Skriptparameter:
  • Die Liste der zu blockierenden Domänen wird im Hauptteil des Skripts angegeben.
    Sie können die Domain blockieren, indem Sie sie in der genauen Form angeben
    "msecnd.net";

    oder alle Domänen einer höheren Ebene, die * anzeigen
    "*.adform.net";
  • NameAddressList - Name der Adressliste zur späteren Verwendung in Firewall-Regeln


Das Skript läuft planmäßig - ich habe 1 Mal pro Minute.

In der Firewall müssen Sie eine Regel hinzufügen, die den Zugriff von SmartTV auf Domänen aus der Liste (im Skript angegeben, Parameter NameAddressList) des Formulars blockiert
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 - die Adresse des Fernsehgeräts.

Wie es funktioniert:
  • Nach dem ersten Zugriff auf die Domain fällt die entsprechende IP-Adresse in den Mikrotik-Cache
  • Das Skript überprüft den Cache und wenn es übereinstimmt, wird die entsprechende IP-Adresse mit TTL blockiert, um die Liste nicht zu verstopfen. Wenn TTL = 0, dann ist TTL = 59 Sekunden.
  • Die entsprechende Regel in der Firewall blockiert Pakete an diese IP-Adresse.

Es stellt sich heraus, dass innerhalb von 1 Minute (in meinem Fall) nach dem Auflösen der Domain die IP-Adresse blockiert wird.

Eine Minute nach dem Einschalten des Fernsehgeräts - ungefähr zwei Dutzend blockierte IP-Adressen. Es passiert mehr.

Die Beobachtung blockierter Domänen für eine halbe Stunde zeigte:
  • Sie werden auch dann aufgerufen, wenn sich Kanal und Lautstärke nicht ändern
  • genug Anrufe, um sich Sorgen zu machen


Die auf dem Router erzeugte Last - auf der Fehlerstufe - bemerkte keinen Anstieg.

Skript selbst
: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 ;
			}
		}
	}
}



Update 2017.06.13
Nach der Veröffentlichung von RouterOS 6.36 wurde es möglich, nach DNS-Namen und nicht nach IP-Adresse zu blockieren. Das Skript wurde überarbeitet.
Der aktuelle Status von
github.com/ErshovSergey/Mikrotik_update_AddressList_ip

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


All Articles