Blokování reklam v operačních systémech I

Blokovat reklamy (a malware) v OS nebo neblokovat? To je etická otázka, kterou si musí každý vyřešit sám. Pokud jste se rozhodli blokovat, tak čtěte dále.

Tento článek píšu proto, že poslední dobou mi psalo dost lidí, proč skončil projekt EditHosts, který blokoval reklamy a malware prostřednictvím souboru /etc/hosts v operačním sytému Linux. EditHosts jsem dělal před lety, abych se něco naučil a dost věcí jsem řešil špatně.

Proč je blokování skrze /etc/hosts horší než blokování přes DNS

EditHosts fungoval tak, že periodicky upravoval soubor /etc/hosts v operačním systému. Pro každou reklamní nebo malwarovou doménu to byl jeden řádek. Při počtu několik tisíc záznamů přestal být efektivní. Fungovalo to jako jednoduché DNS – doménu přeložilo na IP adresu. Ale když už tady máme dnes veřejný DNS server zdarma, který blokuje, co potřebujeme, EditHosts ztratil smysl. Mnohem efektivnější je totiž blokovat reklamy přímo na úrovni DNS, a ušetřit ty desítky tisíc řádků, které při každém načtení stránky musel počítač projít, aby zjistil, jestli tam není náhodou blokovaná doména.

Blokování skrze DNS

Blokování přes DNS je obdobné tomu, jak fungovat EditHosts, prohlížeč se zeptá počítače na IP adresu domény, kde je nějaký soubor. Nevyužívá se ale lokální seznam, ale DNS server, který je na velké počty záznamů optimalizovaný. Pokud je doména blokovaná, skript, který má reklamu načíst, se vůbec nedostane do počítače a reklama se nestáhne a nenačte. Ušetříte data, která by vám zabralo stahování skriptů i samotné reklamy, šetříte i výkon svého počítače, které by to zpracovávání a zobrazování reklamy zabralo. A samozřejmě zabráníte i případným zlým skriptům a reklamám vám propašovat něco nepěkného do počítače, nebo třeba těžit v prohlížeči kryptoměny pro cizí osobu. Ale při blokování skrze DNS prostě můžete vypustit ty tisíce řádků, které by počítač musel projít, pokud byste blokovali na úrovni lokálního souboru.

Pokud zablokujeme například doménu padead2.googlesyndication.com, skript z domény padead2.googlesyndication.com se nestáhne do počítače, protože při blokování skrz DNS dostane prohlížeč úmyslně chybnou informaci o IP adrese – dostane IP adresu 0.0.0.0, na kterou se dále neptá přes internet a spojení je odmítnuto. Prohlížeč při této odpovědi nezhavaruje, ale pokračuje dál ve vykreslení toho, co vykreslit může.

Ukázka, jak se zeptat linuxovým programem dig na IPv4 adresu domény:

dig pagead2.googlesyndication.com
Ukázka, jak se zeptat linuxovým programem dig na IPv4 adresu domény.

Ne všechny reklamy je možné ale odfiltrovat přes DNS, například pokud jsou ze stejné domény, jako je web, kde je reklama použita. Pro tento účel – blokování prvků na stránce je dobré použít jiný typ blokátoru – například osvědčený Ublock Origin. Ten ale funguje jen ve webovém prohlíčeči, což ne vždy můžete dělat, například těžko budete blokovat reklamu skrze doplněk v Google Chrome na Androidu. Na androidu můžeme blokovat reklamu rovněž prostřednictvím DNS. K tomu se ale dostaneme v nějakém pokračování. Teď vám ukážu něco, co je absolutně super. Blokování reklamy na jedno kliknutí pro všechna zařízení ve vaší síti. Tedy pokud jste šťastlivci, jako já, a máte router Turris.

Jak jednoduše blokovat reklamy prostřednictvím DNS díky routeru

Blokování reklam v routeru Turris

Blokování skrze DNS je velmi univerzální. Teď si ukážeme, jak jednoduše blokovat reklamy v jakémkoliv OS ve vaší síti, bez toho, aniž byste museli instalovat cokoliv do počítačů. Pro tuto ukázku použiji router Turris. Nejprve vytvoříme soubor /etc/resolver/dns_servers/88_adguard.conf. Například takto:

cat <<'EOF'>/etc/resolver/dns_servers/88_adguard.conf
name="88_adguard.conf"
description="adguard"
enable_tls="0"
port="53"
ipv4="94.140.14.14 94.140.15.15"
ipv6="2a10:50c0::ad1:ff 2a10:50c0::ad2:ff"
ca_file="/etc/ssl/certs/ca-certificates.crt"
hostname="dns.adguard.com"
EOF

Vytvořením souboru se nám aktivuje možnost v rozhraní foris, abychom mohli toto nové dns aktivovat.

Vytvořením souboru se nám aktivuje možnost v rozhraní foris, abychom mohli toto nové dns aktivovat.

V kolonce DNS přeposílání vybereme adguard, který tam přibyl.
V kolonce DNS přeposílání vybereme adguard, který tam přibyl.

Na téže stránce můžete rovnou DNS server adguardu otestovat.

Test připojení s DNS serverem adguardu byl úspěšný
Test připojení s DNS serverem adguardu byl úspěšný

Všechna zařízení, která máte v síti, pokud nepoužívají nějaké vlastní DNS servery – nemají například nastavené natvrdo 4 osmičky, tak se budou na IP adresy ptát vašeho routeru Turris.

Blokování reklam na O2 Smart Boxu

A když nemáte router Turris, můžete i tak často ve svých routerech používat vlastní DNS server. Stačí nastavit IP adresy DNS na dns.adguard.com.

Kontrola IPv4 a IPv6 dns záznamů programem dig a kontrola reverzních záznamů v jednom:

dig aaaa dns.adguard.com +short|while read line; do printf "$line"'\t'; dig -x $line +short; done
2a10:50c0::ad1:ff	dns.adguard.com.
2a10:50c0::ad2:ff	dns.adguard.com.
Kontrola IPv4 a IPv6 dns záznamů programem dig a kontrola reverzních záznamů v jednom

Nyní se podíváme, jak se reklamy dají blokovat na O2 Smart Boxu. Přejděte do Konfigurační Centrum ve webovém prohlížeči:

Vstup do webového rozhraní O2 Smart Boxu

http://10.0.1.138/configurator/advConfigNetworkDns.html
Vstup do webového rozhraní O2 Smart Boxu
V konfiguračním centru vybereme rozšířené > nastavení sítě > DNS a zadáme IP adresy adguardu do sloupce Static DNS Servers a dáme enable.
V konfiguračním centru vybereme rozšířené > nastavení sítě > DNS a zadáme IP adresy adguardu do sloupce Static DNS Servers a dáme enable.

Od teď by měly být reklamy blokovány na O2 SmartBoxu pro vnitřní síť.

Příště napíšu, jak blokovat reklamu na Linuxu prostřednictvím DNS a systemd-resolved. A někdy, až bude příhodná chvíle, tak si můžeme ukázat, jak blokovat reklamu na Androidu nebo v OpenVPN tunelu.

Did you like this?
Tip Jiří Meitner, ml. with Cryptocurrency

Donate Bitcoin to Jiří Meitner, ml.

Scan to Donate Bitcoin to Jiří Meitner, ml.
Scan the QR code or copy the address below into your wallet to send some bitcoin:

Donate Bitcoin Cash to Jiří Meitner, ml.

Scan to Donate Bitcoin Cash to Jiří Meitner, ml.
Scan the QR code or copy the address below into your wallet to send bitcoin:

Donate Ethereum to Jiří Meitner, ml.

Scan to Donate Ethereum to Jiří Meitner, ml.
Scan the QR code or copy the address below into your wallet to send some Ether:

Donate Litecoin to Jiří Meitner, ml.

Scan to Donate Litecoin to Jiří Meitner, ml.
Scan the QR code or copy the address below into your wallet to send some Litecoin:

Donate Monero to Jiří Meitner, ml.

Scan to Donate Monero to Jiří Meitner, ml.
Scan the QR code or copy the address below into your wallet to send some Monero:

Donate ZCash to Jiří Meitner, ml.

Scan to Donate ZCash to Jiří Meitner, ml.
Scan the QR code or copy the address below into your wallet to send some ZCash: