Guerra alla pubblicita' via Web con Squid


Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Login/Register

Come tutti (credo) io ho la mia serie di siti web 'favoriti' che mi leggo quasi tutti i giorni, molti sono di news e/o informazione tecnica e molti si guadagnano il pane pubblicando piu' o meno pubblicita' sulle loro pagine.

Io non ho niente contro il fatto che questa gente mangi (ovviamente), quello che mi fa girare i marroni e' la quantita' di pubblicita' "intrusive" che vengono propinate. Per pubblicita' intrusiva intendo un qualche tipo di pop-up, finestre del piffero o roba in flash che blocca praticamente tutta la pagina (e magari peggio) e che salta su e giu' di fronte al tuo naso urlando "GUARDAMI!!!" con tanta forza da creparmi gli occhiali.

Questo proprio non mi garba.

E, come tutti, anche io utilizzo vari 'accorgimenti' per evitare o ridurre il piu' possibile tali schifezze.

Gli accorgimenti fino ad ora erano i soliti: redirigere verso 127.0.0.1 i principali siti pubblicitari, blocco delle popup, blocco dei siti di pubblicita', spegnere flash... e cosi' via.

Ma questi accorgimenti funzionano fintanto che ti ricordi di attivarli su tutti i computer su cui lavori, e se, come me, lavorate su piu' sistemi o vi ritrovate in casa 3 diversi computer, e' abbastanza facile dimenticarseli per strada.

Oggi, essendo a casa in ferie ed essendo il clima... inclemente... ho deciso di risolvere il problema alla radice: un bel proxy!

Un proxy-server come Squid e' dotato di tutta una serie di controlli che possono essere attivati per impedire o bloccare certi siti dall'essere raggiunti. Se il sito non puo' essere raggiunto, lo sesso non puo' spararvi la sua pubblicita' sul naso. Allo stesso tempo l'agire come una cache aumenta la velocita' di accesso al web.

Ci sono vari modi di utilizzare un proxy, il sistema piu' semplice e' quello di configurarlo nel browser. Questo va bene se vi ricordate di farlo e non dovete cambiare configurazione ogni due minuti perche' lavorate con un portatile in vari uffici, se no...

Un sistema molto piu' efficiente e' l'impostare il tutto come proxy "trasparente". Con questo si intende che il proxy viene usato indipendentemente dalla configurazione del browser, anche se l'utente non lo sa, il proxy interviene nel mezzo.

Come funziona sta' cosa?

Per prima cosa si tratta di configurare il proxy (squid in questo caso) in modo che funzioni ed accetti connessioni su una porta, che di solito e' la 3128, ma puo' essere una qualunque. Nella documentazione suggeriscono di usare la porta 80, io ho preferito evitare.

Per seconda cosa si tratta di usare iptable (o ipfilter) per redirigere tutte le connessioni USCENTI sulla porta 80 verso il proxy e la sua porta, in modo che la connessione sia 'dirottata' e gestita dal proxy.

Squid implementa la filtratura delle connessioni mediante le ACL, queste sono delle semplici regole che specificano cosa e' permesso e cosa non e' mediante vari controlli sul dominio che si cerca di raggiungere, sull'URL, sulla porta, protocollo e cose cosi' (la documentazione di Squid specifica tutte le possibilita').

Per i miei scopi mi bastano due tipi di ACL: quella per dominio e quelle per 'URL con regex'. Quelle per dominio mi consentono di bloccare in toto l'accesso a certi domini, mentre quelle per URL con espressione regolare mi consentono di bloccare l'accesso a certi url che 'puzzano' di pubblicita'.

Vediamo un po' come si usano le ACL:

Per definire una ACL bisogna aggiungere al file di configurazione una cosa del tipo:

acl nomedellacl tipoacl parametri

Dove 'tipoacl' e' il tipo di acl che vogliamo definire (nel mio caso il tipo era dstdomain per il dominio o url_regex per url con espressione regolare) e 'parametri' e' il dominio o la regexp da controllare. Il nome e' ovviamente un nome con cui fare riferimento all'acl successivamente.

Si, perche' definire l'acl e' solo il primo passo, po si tratta di specificare se tale acl deve consentire o impedire l'accesso. Questo si fa aggiungendo una linea del tipo:

http_access [deny|allow] nomeacl

Questo rifiuta (deny) o consente (allow) l'accesso in base alla acl nominata. Quindi per ogni acl deve esserci una corrispondente 'regola' di uso.

Un'esempio di uso e' il seguente:

acl deathtoad0 url_regex .*ads.* acl deathtoad1 url_regex .*pagead.* acl deathtoad2 url_regex .*doubleclick.* http_access deny deathtoad0 http_access deny deathtoad1 http_access deny deathtoad2

Questo impedisce l'access a qualunque URL contenente 'ads', 'pagead' o 'doubleclick' in ogni sua parte.

Come detto prima, per rendere il proxy 'trasparente', e' necessario dirottare le richieste uscenti verso il proxy e la sua porta. E' anche necessario dire a Squid di accettare tali richieste 'dirottate'.

Per la prima parte e' sufficiente una linea di iptable:

iptable -t nat -A PREROUTING -i $interfaccialan -p tcp --dport 80 \ -j DNAT --to ip.del.proxy.server:$portaproxy

Dove "$interfaccialan" e' l'interfaccia di rete che serve la lan, "ip.del.proxy.server" e' l'indirizzo IP del proxy (ovviamente) e $portaproxy e' la porta su cui il proxy e' in ascolto.

Questa semplice regoletta 'scippa' tutte le connessioni uscenti dalla lan verso siti web esterni e redirige il tutto verso il proxy. Ora si tratta di fare in modo che il proxy accetti le connessioni e le serva in modo appropriato.

Vi sono vari documenti sull'argomento, ma il succo sta nell'aggiungere (o modificare se gia' presenti) i seguenti parametri di configurazione:

httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on

Questo consente a squid di trattare correttamente ogni richiesta entrante come se fosse una richiesta di proxy, invece che una 'normale' richiesta http.

Dopo aver installato e configurato squid in modo 'normale' (non come transparent proxy), provate a verificare se funziona o meno. Configurate il vostro browser per usare il proxy e verificate se le ACL impostate sono corrette. Se non lo sono, aggiustate fino a che non siste soddisfatti.

Una volta fatto cio', potete mettere in pratica la parte di 'trasparente'.

Una delle comodita' dell'uso di un proxy trasparente e' che e' possibile fare delle statistiche su quali sono i siti piu' usati ed eventualmente modificare il funzionamento del proxy per ottimizzare l'uso della cache.

Per ottenere tali statistiche la prima cosa da fare e' attivare il logging del proxy. Questo si fa modificando o aggiungendo i parametri al file di configurazione:

cache_access_log /dove/volete/il/log/squid.log emulate_httpd_log on

Il parametro 'emulate_httpd_log' consente di avere il log scritto nello stesso modo usato da molti web server (Apache per esempio) e quindi il poterlo analizzare con tool non specifici. Ma esistono molti tool specifici per analizzare i log di squid, quindi usatelo a vostra discrezione.

Per analizzare il log io utilizzo webalizer, che trovo piu' comodo di altri tool (awstats per esempio). Ma questo va a vostra preferenza. La documentazione di awstats contiene degli esempi sul come impostare il tutto, una configurazione minima e' la seguente:

LogFile /dove/e/il/log/squid.log LogType squid OutputDir /dove/volete/i/file HistoryName squid Incremental yes IncrementalName squid.current ReportTitle proxy statistics HostName ilvostronomehost HTMLExtension html PageType htm* PageType pl PageType cgi Quiet yes ReallyQuiet yes AllSites yes AllReferrers yes AllURLs yes AllUsers yes

Questo produce una statistica che riporta non solo i siti piu' visitati ma chi li ha visitati. Ocio ai vari discorsi di privacy se cominciate a stilare classifiche buoni/cattivi.

L'uso di un proxy server 'trasparente' per filtrare e ripulire l'html e' una cosa utile, ma occhio al carico di lavoro che affidate al proxy (deve essere all'altezza del lavoro, soprattutto come spazio su disco per la cache) e se stilate delle statistiche di uso occhio a cosa pubblicate (privacy).

Ricordatevi anche di aggiungere un paio di righe alla vostra rotazione dei log se usate il logging.


I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.

Nessun messaggio this document does not accept new posts

Precedente Successivo

Davide Bianchi, lavora come Unix/Linux System Administrator presso una societa' di "sicurezza informatica" (aka: $networkgestapo) di Haarlem. Contatti: mail: davide AT onlyforfun.net , Jabber: davideyeahsure AT gmail.com,

Volete contribuire? Leggete come!.
 
 

Il presente sito e' frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.


Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".

Web Interoperability Pleadge Support This Project
Powered By Gort