Bloccare i server pubblicitari con dnsmasq


Quello che segue è la traduzione di un piccolo tutorial su come utilizzare dnsmasq ( un server dhcp ma sopratutto un risolutore dns adatto alle lan domestiche ) per bloccare i banner inviati dai server pubblicitari  che spesso infestano le nostre ( altrimenti felici ) sessioni di navigazione.
Lo abbiamo utilizzato con Debian negli internet point che abbiamo creato in tutti gli spazi occupati e liberati dal Laboratorio Crash! durante i differenti percorsi di lotta che si sono susseguiti negli ultimi anni.

In Debian per installare dnsmasq utilizzate il comando:

apt-get install dnsmasq

Nel file /etc/dnsmasq.conf troverete tutte le voci di configurazione abbondantemente commentate in modo tale da permettervi di scegliere la configurazione che ritenete più adatta alle vostre necessità.

Perché utilizzarlo? Sceglilo da te il tuo motivo.

Può essere per una forma di rifuto ai continui stimoli che vi invitano all’iper consumo. Anche perché magari di seguire le indicazioni del premier e di consumare a natale per salvare oggi le banche che ieri hanno fatto da intermediatrici bancarie, vendendo consapevolmente le obbligazioni marcie della Parmalat PROPRIO NON TI VA.

Può essere perché ti fa incazzare terribilmente vedere la tua linea internet ( che già paghi a caro prezzo, spesso in cambio di un servizio pessimo ) rallentatata da continue pubblicità non richieste.

Può essere che non ti va di trovarti la cache del browser piena di cookie di doubleclick, il cui scopo, come in un circolo vizioso, è tracciarti e profilarti sempre di più fino a portare allo stremo la tua forza di sopportazione per obbligarti a comprare qualcosa prima o poi.

Può essere per un senso di fastidio permanente nel vedere pubblicizzato l’ultimo inutile, luccicante e costoso gingillo della Apple per ascoltare gli mp3  ( che tanto comunque non potrai mai comprarti perché se già prima arrivavi si e no a fine mese tra affitto, università, bollette, tasse ecc ecc ecc, ora che Sacconi ha avuto la bella pensata di proporre la settimana corta a salario ridotto sono proprio cazzi tuoi )

( Oh però mi raccomando… Non ti scaricare la musica pirata che uccide la cultura, Faletti (magari!)  finanzia il terrorismo, il mercato del narcotraffico e degli organi umani , ti fa spendere di più ( dice la saggia Gabriella Carlucci, un tempo soubrette di punta del peggiore trash televisivo italiano domenicale e oggi figura di spicco della Commissione Collaborazione Italia – Messico della camera dei deputati ) è un crimine e sopratutto non permette ai vertici della SIAE di avere la loro vacanzetta extra a Thaiti a Pasqua mentre tu non hai avuto neppure la tredicesima a Natale )

Buona lettura, e se avete suggerimenti in merito a come migliorare questo piccolo script ( realizzato da lindenle e apparso su Debian Administration ) non esitate a segnalarceli.

LINK ORIGINALE

Martedì stavo chiacchierando su IRC con un collega che mi raccontava incazzato del nuovo aggiornamento per Bind9, il quale, non rendeva più possibile il blocco automatico dei server di pubblicità. Naturalmente ero curioso e gli ho chiesto di che stesse parlando.

Mi ha indirizzato verso il sito pgl.yoyo.org/adservers che mantiene aggiornata una lista dei domini conosciuti di server pubblicitari. L’avido navigatore del web che è in me ha deciso immediatamente che non avrebbe potuto vivere un instante di più, tormentato dai banner pubblicitari durante le incursioni in rete dalla mia postazione di casa, e così ho deciso di risolvere questo problema.
La soluzione più semplice sarebbe stata quella di chiedere a "Roberto" i suoi script e installare Bind9 sul mio server. Però ci utilizzo già dnsmasq e così ho pensato che ci doveva ugualmente essere un modo di bloccare gli ads pubblicitari anche con quello.
Leggendo la pagina di manuale ho trovato le seguenti indicazioni.

A, –address=/<domain>/ [domain/] <ipaddr>
              Specify an IP address to  return  for  any  host  in  the  given
              domains.   Queries in the domains are never forwarded and always
              replied to with the specified IP address which may  be  IPv4  or
              IPv6.  To  give  both  IPv4 and IPv6 addresses for a domain, use
              repeated -A flags.  Note that /etc/hosts and DHCP  leases  over-
              ride this for individual names. A common use of this is to redi-
              rect the entire doubleclick.net domain to  some  friendly  local
              web  server  to avoid banner ads. The domain specification works
              in the same was as for –server, with  the  additional  facility
              that  /#/  matches  any  domain.  Thus –address=/#/1.2.3.4 will
              always return 1.2.3.4 for any query not answered from /etc/hosts
              or  DHCP  and  not sent to an upstream nameserver by a more spe-
              cific –server directive."

Sembrava esattamente ciò che volevo. Questa opzione redirige ogni server di un determinato dominio ad uno specifico indirizzo ip. Ora ciò di cui avevo bisogno era buttare giù uno script per scaricare la lista, riscrivere il mio file di configurazione dnsmasq.conf e far ripartire ad intervalli regolari il demone di dnsmasq.

Il seguente bash script è il risultato di circa un’oretta di hacking fatto ieri. Cosa fa? Scarica la lista dei server di pubblicità da yoyo, riscrive "etc/dnsmasq.conf" e riavvia il server ( n.d.t: in realtà riavvia il demone di dnsmasq che funge da risolutore locale di domini ).

#!/bin/sh



### piccolo script che scarica una lista di server pubblicitari e che


###se utilizzato con dnsmasq li blocca.


###




# l’indirizzo ip dove vogliamo mandare la richiesta, invece che


#ai server pubblicitari ( potete usare anche 127.0.0.1 )




addcatcherip=’192.168.1.4′


configfile=/etc/dnsmasq.conf




# the args to add to the request to the yoyo server, to tell it that we want


# a hosts file and that we want to redirect to the addcatcher


listurlargs="hostformat=nohtml&showintro=0&mimetype=plaintext"




# URL del server da cui scaricare la lista dei server di pubblicità


listurl="http://pgl.yoyo.org/adservers/serverlist.php?${listurlargs}"




# in questo file potete agiungere a mano i domini che volete bloccare ma che non


#sono inclusi nella lista di yoyo


extrasfile=’/etc/banner_add_hosts.manual’




## comando per ricaricare dnsmasq – cambialo a seconda


##del sistema che utilizzi


reloadcmd=’/etc/init.d/dnsmasq restart’  




# file temporanei da usare


tmpfile="/tmp/.adlist.$$"


tmpconffile="/tmp/.dnsmasq.conf.$$"




# comando per scaricare la lista (alternatives commented out)


fetchcmd="/usr/bin/wget -q -O $tmpfile $listurl"




$fetchcmd




# aggiungi  i nomi di dominio extra


 [ -f "$extrasfile" ]  && cat $extrasfile >> $tmpfile




# controlla che il file temporaneo esista prima di sovrascrivere la lista esistente


if  [ ! -s $tmpfile ]


then


echo "temp file ‘$tmpfile’ either doesn’t exist or is empty; quitting"


exit


fi




# prepara una lista fresca fresca di server pubblicitari che dnsmasq rifiuti


cat $configfile | grep -v "address=" > $tmpconffile




while read line; do


    ADDRESS="/${line}/${addcatcherip}"


    echo "address="${ADDRESS}"" >> $tmpconffile


done < $tmpfile




mv $tmpconffile $configfile


$reloadcmd


rm $tmpfile


exit




##GAME OVER!



Questo script inoltre ha una simpatica funzione per cui i nomi dei domini che si vogliono rifiutare o a cui non ci si vuole connettere possono anche eventualmente essere aggiunti a mano nel file /etc/banner_add_hosts.manual

Ho installato lo script nella cartella /usr/local/bin e ho cambiato i permessi a 700 poi ho eseguito lo script

$ sudo cp update_bannerhosts /usr/local/bin
$ sudo chown root.root /usr/local/bin/update_bannerhosts
$ sudo chmod 700 /usr/local/bin/update_bannerhosts
$ sudo  /usr/local/bin/update_bannerhosts
Restarting DNS forwarder and DHCP server: dnsmasq.

Dando un’occhiata al mio /etc/dnsmasq.conf ho notato che erano state aggiunte dallo script molte nuove linee con nuovi indirizzi.

address="/ac.rnm.ca/192.168.1.4"
address="/accelerator-media.com/192.168.1.4"
address="/action.ientry.net/192.168.1.4"
address="/actionsplash.com/192.168.1.4"
address="/actualdeals.com/192.168.1.4"

In seguito ho eseguito alcuni piccoli test per verificare che tutti i domini di server pubblicitari venissero rediretti verso il mio addcatcherip.

$ nslookup doubleclick.net
Server:         192.168.1.4
Address:        192.168.1.4#53

Name:   doubleclick.net
Address: 192.168.1.4
$ nslookup ads.doubleclick.net
Server:         192.168.1.4
Address:        192.168.1.4#53

Name:   ads.doubleclick.net
Address: 192.168.1.4
 

In questo modo ogni server presente nel dominio doubleclick.net viene risolto verso il mio indirizzo ip locale. Il seguente grosso test è stato di aprire una pagina web e controllare che i banner pubblicitari fossero spariti. Ho scelto heise.de a il grande banner pubblicitario in cima alla pagina non c’era più. Successo!

L’ultima fase di questo piccolo progetto è stata quella di aggiungere a crontab un comando per cui lo script veniva eseguito ogni 4 ore per aggiornare la lista dei server pubblicitari:

$ cat /etc/cron.d/update_bannerhosts

#Update the banner hosts…
0 0,4,8,12,16,18,20 * * * root /usr/local/bin/update_bannerhosts

Spero che questo piccolo script aiuti qualcuno a sbarazzarsi dei banner pubblicitari senza avere la necessità di installare ed imparare l’uso di Bind9.

  1. #1 di minimal il Marzo 15, 2009 - 9:42 pm

    Ciao caro.
    Diciamo che si tratta di due modi diversi per fare la stessa cosa.
    Chiaramente ci sono delle differenze. Dal mio punto di vista lo preferisco perché:

    1)In lan dai 6 computer in su è più comodo utilizzare questo script con dnsmasq piuttosto che installare in ongi singolo host l’estensione di adblock

    2)Data la nota pesantezza e monoliticità di firefox preferisco tenerlo il più leggero possibile installandoci solo le estensioni che sono assolutamente necessarie. Usare questo metodo mi permette di averne due in meno ( Adblock plus e adblock updater )

    3)Adblock è un’ottima estensione ma va configurato. A volte mi è capitato di incappare durante il suo utilizzo in noiosi problemini: per esempio mentre navigavo sul network du noblogs alcuni banner mi venivano bloccati NON perché fossero pubblicità ma perché il loro nome era “banner.jpg”. oppure a volte adblock mi bloccava i pulsanti dell’editor visuale di noblogs in quanto javascript.
    Lo script postato sopra invece risolve come 127.0.0.1 domini che sono noti per fare riferimento a network di server pubblicitari ( come per fare un esempio double click dimmerdavivenisseuncancromanonfulminanteperchédovetesoffrire alungoprimadischiattare ).

    Comunque ci sono anche altri modi per bloccare la pubblicità.
    In questo post per esempio
    http://cavallette.autistici.org/2007/05/459
    i compagni di AI spiegano un metodo simile utile per bloccare la pubblicità di google.

    Buona lettura.
    Baci

  2. #2 di Mario il Marzo 15, 2009 - 7:15 pm

    Ma scusate che differenza c’è tra questo metodo e l’estensione adblock di firefox che blocca banner pubblicitari?

    Saluti

  3. #3 di nessuno il Marzo 1, 2009 - 1:11 pm

    si, penso proprio di si 😀

    $ cat /etc/cron.d/update_bannerhosts

    questo comando stampa solo il contenuto…. ma se il file non esiste, non fa’ nulla.

    quindi direi o il metodo proposto da simone sopra, oppure anche un bel:

    echo “0 0,4,8,12,16,18,20 * * * root /usr/local/bin/update_bannerhosts” > /etc/cron.d/update_bannerhosts

    grazie della segnalazione simone 😉

    ps: i commenti sono moderati… bisogna aspettare per vederli comparire

  4. #4 di simone il Febbraio 28, 2009 - 11:10 pm

    Grazie per questo interessante articolo…c’è solo credo un piccolo errore:

    per inserire il comando per crontab va usato root, perciò

    # gedit /etc/cron.d/update_bannerhosts

    e aggiungere

    #Update the banner hosts…
    0 0,4,8,12,16,18,20 * * * root /usr/local/bin/update_bannerhost

    Almeno credo….

  5. #5 di iff il Gennaio 8, 2009 - 4:25 pm

    Grazie mille. Ci fa piacere che tu l’abbia trovato utile. Se hai problemi relativi al funzionamento dello script facci sapere ( anche se a noi su debian ha sempre funzionato regolarmente ).
    Ah.. Con l’articolo di “Test: il tuo pensiero è uguale a quello delle masse?” qualcuno di noi ha mandato in depressione i coinquilini! Mentre lo facevano la loro faccia diventava via via sempre più terrea! Non ti immagini le risate! 😀

  6. #6 di Avvelenato il Gennaio 8, 2009 - 3:08 pm

    Grazie per l’articolo.
    Davvero utile. Ora sono in live e non posso provarlo. Se posso ti faccio sapere.
    Ciao!

(non verrà pubblicata)