Blokowanie niechcianych stron
Ostatnia zmiana: 2020-03-27 18:49
Praktycznie każda nowoczesna przeglądarka posiada odpowiednie rozszerzenie pozwalające na blokowanie reklam (np. słynny AdBlock). Umożliwia to pozbycie się natrętnych reklam, przeładowania stron zbędnymi obrazkami oraz pozwala na zmniejszenie transferu. Ale...
Blokując reklamy zmniejszasz wpływy z jakich utrzymują się niektóre strony. Niektóre istnieją tylko dlatego że mogą być finansowane z modułów reklamowych.
Na routerach zwykle korzystamy z wbudowanego serwera cache
dnsmasq, który odpowiada na rozwiązywanie nazw DNS w sieci. Można do wykorzystać także do blokowania niechcianych serwerów, w szczególności serwerów reklamowych, portali społecznościowych i innych. Zasada działa jest bardzo prosta - podsuwany
dnsmasq spis adresów wraz innymi IP niż faktycznie posiadają - np. 127.0.0.1, przez co dane z tych serwisów nie będą pobierane bo wskazują host lokalny.
W przeciwieństwie do rozszerzeń w przeglądarkach ten sposób nie przeogranizuje wyglądu strony - najczęściej przeglądarka wyświetli puste miejsce zamiast reklamy. Poniższy przykład prezentuje działanie takiego rozwiązania (na podstawie
http://onet.pl) - przed włączeniem i po włączeniu:

To co będzie blokowane zależy do podania konkretnych adresów w pliku konfiguracyjnym. Dostępne jest kilka serwisów udostępniających bezpłatnie spis takich adresów które zostaną wykorzystane w tym projekcie; oczywiście nic nie stoi na przeszkodzie aby taki spis aktualizować i utrzymywać samemu.
Opracowano na podstawie
https://forum.openwrt.org/viewtopic.php?id=35023 choć to pomysł tak stary jak świat.
Lista adresów
Do działania niezbędna będzie lista adresów. Tworzymy plik
/tmp/block.hosts o następującej zawartości:
127.0.0.1 ads.ak.facebook.com
127.0.0.1 creative.ak.facebook.com
itd, gdzie jako adres podajemy
127.0.0.1, jako nazwę - adres blokowanej domeny.
Skrypty
Tworzenie takiej listy z adresami można wykonać we własnym zakresie, ale może to być pracochłonne. Skorzystamy więc z kilku serwisów które takie dane już oferują. Tworzymy plik
/usr/bin/adblock.sh o zawartości:
#!/bin/sh
rm -f /tmp/block.hosts
wget -qO- "http://www.mvps.org/winhelp2002/hosts.txt" | grep "^127.0.0.1" > /tmp/block.build.list
wget -qO- "http://www.malwaredomainlist.com/hostslist/hosts.txt" | grep "^127.0.0.1" >> /tmp/block.build.list
wget -qO- "http://hosts-file.net/.\ad_servers.txt" | grep "^127.0.0.1" >> /tmp/block.build.list
wget -qO- "http://adaway.org/hosts.txt" | grep "^127.0.0.1" >> /tmp/block.build.list
wget -qO- "http://pgl.yoyo.org/as/serverlist.php?showintro=0;hostformat=hosts" | grep "^127.0.0.1" >> /tmp/block.build.list
awk '{$1=$1}{gsub(/\r/,"")}{print }' /tmp/block.build.list|sort|uniq > /tmp/block.build.before
rm -f /tmp/block.build.list
grep -vf /etc/white.list /tmp/block.build.before > /tmp/block.hosts
rm -f /tmp/block.build.before
/etc/init.d/dnsmasq restart
exit 0
(nie zapominamy o nadaniu uprawnień:
chmod 755 /usr/bin/adblock.sh). Można też pobrać gotowy plik:
# wget http://dl.eko.one.pl/projekty/adblock.sx -O /usr/bin//adblock.sh
# chmod 755 /usr/bin/adblock.sh
Do poprawnego działania niezbędne jest jeszcze wskazanie
dnsmasq że ma korzystać z utworzonego pliku blokad:
# uci add_list dhcp.@dnsmasq[0].addnhosts=/tmp/block.hosts
# uci commit dhcp
Dodatkowo niezbędne jest przygotowanie pliku "whitelisty", czyli spisu serwisów które nie będą blokowane:
# touch /etc/white.list
# echo "eko.one.pl" >> /etc/white.list
Uruchomienie
Wystarczy teraz po prostu wykonać ten skrypt:
aby zostały pobrane odpowiednie dane, wygenerowany plik z listą hostów i zrestartowany dnsmasq. W logach systemowych (
logread) powinna pojawić się informacja o wczytaniu tego pliku przez
dnsmasq:
...
Oct 30 08:25:40 OpenWrt daemon.info dnsmasq[3277]: read /tmp/block.hosts - 30353 addresses
...
Przygotowana lista ma wielkość ok. 1MB i zajmuje cenną pamięć RAM. Jeżeli mamy extroota lub podłączony zewnętrzny dysk to warto tą listę przenieść na zewnętrzny nośnik.
Zakończenie
Pobieranie listy można w prosty sposób zautomatyzować przez crona (np. pobieranie raz dziennie) oraz dodać do skryptów startowych (np. do /etc/rc.local) aby wykonało się przy starcie routera.
Prezentowane rozwiązanie sprawdzi się jeżeli komputery korzystają z routera jako serwera dns. Można wymusić to (w Gargoyle - odpowiednia opcja dostępna jest gui) dodając odpowiednią regułę przekierowania np.
iptables -t nat -I PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -I PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
w pliku
/etc/firewall.user.
Chaos Calmer 15.05.1 i późniejsze wydania
W obecnych wydaniach OpenWrt pojawił się pakiet automatyzujący w/w czynności. Instalacja adblocka sprowadza się do instalacji pakietu o takiej nazwie:
# opkg update
# opkg install adblock
# opkg install libustream-mbedtls #lub libustream-openssl
Następnie należy włączyć źródła adresów w pliku /etc/config/adblock, każda sekcja z listą adresów ma swoją opcję
enabled którą można przestawić na
1. Domyślnie włączone są tylko niektóre z nich, można włączyć wszystkie oraz dodać własne źródła. Należy pamiętać że listy plików trzymane są pamięci ram (w katalogu
/tmp/), więc jeżeli mamy jej mało (np. tylko 32MB) to należy rozsądnie zarządzać źródłami plików.
Później wystarczy tylko ściągnąć odpowiednie listy przez wydanie poleceń:
# /etc/init.d/adblock enable
# /etc/init.d/adblock start
Jeżeli używamy środowiska graficznego
LuCI to można doinstalować odpowiedni dodatek:
# opkg install luci-app-adblock
i tym samym można aktywne listy wyklikać z GUI.
W katalogu
/etc/adblock w odpowiednich plikach jest możliwość umieszczenia własnych list adresów zablokowanych i dozwolonych.