Mój artykuł o blokowaniu reklam na routerze z alternatywnym oprogramowaniem OpenWrt / Gargoyle cieszy się bardzo dużym zainteresowaniem. Ze względu na to, że na moim drugim routerze zainstalowałem inne oprogramowanie – DD-WRT postanowiłem przerobić skrypt adblock
uwzględniając specyfikę DD-WRT. Są to bardzo drobne różnice, skrypty w obu wersja robią dokładnie to samo.
Instalacja skryptu Adblock w DD-WRT
Skrypt ze względu na duże ilości przetwarzanych danych wymaga obecności zewnętrznego nośnika USB. Ponadto, jako że w DD-WRT próżno szukać wymaganej przez skrypt komendy sort
, musimy ją doinstalować:
1 2 |
opkg update opkg install coreutils-sort |
Abyśmy to jednak mogli zrobić wymagane jest wcześniejsze zainstalowanie Optware. Jak ja to zrobiłem na moim TP-Linku TL-WDR4900 opisuję w artykule Optware – pakiety OpenWrt w DD-WRT.
Teraz możemy już przejść do samego skryptu. Oto on, data ostatniej modyfikacji skryptu to .
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 |
#!/bin/ash # ### BEGIN INIT INFO # Provides: adblock # Short-Description: Enable Adblock for DD-WRT # Homepage: http://jazz.tvtom.pl/adblock-w-dd-wrt/ # Requires: ca-certificates coreutils-sort wget ### END INIT INFO # HOSTSDENY='/opt/etc/hosts' HOSTSTEMP='/opt/tmp/hosts.temp' BLACKLISTS='https://adaway.org/hosts.txt https://raw.githubusercontent.com/Dawsey21/Lists/master/main-blacklist.txt http://hosts-file.net/ad_servers.txt http://jazz.tvtom.pl/download/hosts.txt http://mirror.cedia.org.ec/malwaredomains/justdomains http://pgl.yoyo.org/as/serverlist.php?hostformat=hosts;showintro=0;mimetype=plaintext http://ransomwaretracker.abuse.ch/downloads/RW_DOMBL.txt http://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt http://someonewhocares.org/hosts/hosts http://sysctl.org/cameleon/hosts http://winhelp2002.mvps.org/hosts.txt http://www.malekal.com/HOSTS_filtre/HOSTS.txt http://www.malwaredomainlist.com/hostslist/hosts.txt http://www.networksec.org/grabbho/block.txt http://zeustracker.abuse.ch/blocklist.php?download=hostfile' WHITELIST='http://jazz.tvtom.pl/download/hosts.whitelist' IP='0.0.0.0' do_start() { if ! grep -q "addn-hosts=$HOSTSDENY" /tmp/dnsmasq.conf ; then echo "addn-hosts=$HOSTSDENY" >>/tmp/dnsmasq.conf fi if [ -f $HOSTSDENY ] ; then do_restart else do_reload fi } do_reload() { : > $HOSTSTEMP for url in $BLACKLISTS ; do wget -O- $url | cut -d '#' -f 1 | grep -E -o '([a-zA-Z0-9](-?[a-zA-Z0-9])*\.){1,}[a-zA-Z]{2,}' | sed "s/.*/$IP \0/g" >> $HOSTSTEMP done echo 'Sorting' echo -e '127.0.0.1 localhost\n::1 ip6-localhost\n' > $HOSTSDENY /opt/usr/bin/sort $HOSTSTEMP | uniq >> $HOSTSDENY WHITELIST="`wget -qO- $WHITELIST`" for site in $WHITELIST ; do sed -i "/^$IP $site/d" $HOSTSDENY done do_restart } do_restart() { echo 'Restarting Dnsmasq' killall dnsmasq dnsmasq --conf-file=/tmp/dnsmasq.conf echo 'Done' } do_stop() { if grep -q "addn-hosts=$HOSTSDENY" /tmp/dnsmasq.conf ; then sed -i -e "/addn-hosts=/d" /tmp/dnsmasq.conf fi do_restart } do_disable() { do_stop if [ -f $HOSTSDENY ] ; then rm $HOSTSDENY fi if [ -f $HOSTSTEMP ] ; then rm $HOSTSTEMP fi } case "$1" in start|enable ) do_start ;; reload ) do_reload ;; restart ) do_restart ;; stop ) do_stop ;; disable ) do_disable ;; * ) echo "Usage: $0 start|stop|restart|reload|enable|disable" >&2 exit 3 ;; esac |
Skrypt ściągamy do wybranej przez nas lokalizacji i nadajemy mu prawa wykonywania:
1 2 |
wget /download/dd-wrt/adblock chmod +x adblock |
Opcje i parametry skryptu opisałem w pierwotnym artykule Adblock w OpenWrt / Gargoyle, do zapoznania się z którym w tym momencie zapraszam.
Poniżej opiszę tylko odmienne kroki w DD-WRT.
Aby reklamy były blokowane po restarcie routera musimy skorzystać z jednego z dwóch poniżej opisanych sposobów.
Przechodzimy na znaną już z artykułu o Optware kartę Administration -> Commands, gdzie do skryptu startowego dopisujemy przykładowe wywołanie: /mnt/sda3/bin/adblock start
. Po czym klikamy Save Startup.
Drugi, preferowany przez mnie sposób to przejście na kartę Services -> Services, gdzie w sekcji DNSMasq dopisujemy przykładowo: addn-hosts=/opt/etc/hosts.deny
. Pamiętajcie, że ścieżka do tego pliku musi istnieć już podczas bootowania routera.
Listy HOSTS, z których korzysta skrypt są co jakiś czas aktualizowane, abyśmy więc byli na bieżąco, dodamy nowe zadanie cron-a. W tym celu przechodzimy na kartę Administration -> Management, gdzie w sekcji Cron dopiszemy przykładowo: 0 3 * * 0 root /mnt/sda3/bin/adblock reload
.