Usare Squid per bloccare l’accesso a specifici siti Web

Guida al tool open source in grado di impedire la visualizzazione di siti non autorizzati. La procedura di configurazione in una LAN con Ubuntu Server.

C’è un software libero che consente di verificare quali richieste di connessione provengano dai sistemi connessi alla rete locale non autorizzando, ad esempio, la visualizzazione di siti web “sconvenienti” oppure non indicati in ambiente lavorativo. Il suo nome è Squid e viene rilasciato sotto licenza GNU GPL.

Squid soddisfa molteplici esigenze. Oltre alla già citata funzionalità che consente di impostare dei filtri sul traffico permesso, Squid mette a disposizione un servizio di cache utile per sveltire numerosi compiti.

Squid è un prodotto che viene sviluppato da diversi anni ed è quindi considerato come una piattaforma molto robusta. L’applicazione è capace di supportare diversi protocolli anche se l’impiego più comune riguarda i classici HTTP e FTP. Si tratta sostanzialmente di un evoluto server proxy che si interpone tra la rete Internet ed i sistemi client connessi alla rete locale.

In questo articolo vedremo come configurare Squid per impedire l’accesso a siti non autorizzati. Verrà configurato come proxy trasparente: ciò significa che non sarà necessario riconfigurare manualmente tutte le macchine connesse alla rete locale indicando, come destinazione per tutte le richieste in uscita, la porta 3128 del server.

Come server è stata usata una macchina con installato Ubuntu Server dotata di due schede di rete: la prima (eth0) è connessa via cavo Ethernet ad un router ADSL mentre la seconda (eth1) a un router sul quale sono attestati tutti i sistemi che compongono la rete locale.

La prima interfaccia di rete (collegamento al router ADSL, attraverso il quale ci si affaccia alla Rete Internet) utilizza l’IP 192.168.1.50 (192.168.1.1 è l’IP del router ADSL) mentre la seconda (eth1), l’IP 192.168.2.50. Il router che gestisce il traffico della rete locale ha l’IP 192.168.2.1.

Tutto il traffico viene automaticamente indirizzato alla porta sul quale Squid è posto in ascolto e la macchina server si comporta come un router.

Installazione e configurazione di Squid
E’ possibile procedere con l’installazione dell’ultima versione disponibile di Squid, invocando semplicemente il comando sudo apt-get install squid3 e digitando il tasto S quando richiesto:

A questo punto, prima di editare il file di configurazione che sovrintende il funzionamento di Squid, è bene effettuarne una copia di backup:

sudo cp /etc/squid3/squid.conf /etc/squid3/squid.conf.ori

Com’è possibile verificare aprendo il file squid.conf con l’editor Nano, esso è denso di commenti che distolgono dalle direttive impostate di default.

Qualora si volessero eliminare in un colpo solo tutti i commenti e generare un file di configurazione più compatto, si possono digitare i due comandi che seguono:

sudo grep -v "^#" /etc/squid3/squid.conf , sed -e '/^$/d' > squid.conf.new
sudo mv squid.conf.new /etc/squid3/squid.conf

Per modificare il file di configurazione di Squid, è necessario utilizzare il comando sudo nano /etc/squid3/squid.conf. Ecco come si presenta, di default, tale file:

Nel nostro caso, abbiamo modificato il file così com’è possibile evincere dall’immagine:

Si è aggiunto acl lan src 192.168.1.50/32 192.168.2.0/24 immediatamente sotto la riga acl localhost. Si è quindi trasformato la riga http_port 3128 in http_port 3128 transparent.

Sopra la riga http_access allow localhost, inoltre, si è aggiunto http_access allow lan.

In calce al file di configurazione si può aggiungere poi la riga cache_dir ufs /var/spool/squid3 20000 16 256 in modo da indicare a Squid la cartella dove memorizzare la sua cache oltre alla sua dimensione (il primo numero – 20000 – indica una cache di dimensioni pari a 20 GB).

Per indicare gli indirizzi IP, è bene utilizzare sempre la notazione CIDR (Classless Inter-Domain Routing). Nel nostro file di configurazione, 192.168.1.50/32 definisce solo l’IP 192.168.1.50 mentre 192.168.2.0/24 indica i successivi 255 host (consultate questo comodo specchietto per maggiori informazioni).

Operate le modifiche sopra illustrate al file squid.conf, è necessario riavviare Squid:

sudo /etc/init.d/squid3 restart

Se tutto andrà per il verso giusto, Squid non restituirà alcun errore e sarà automaticamente preparata la struttura della directory per la gestione della cache:

Passiamo agli ultimi tre passi.
In primis, è necessario editare il file sysctl.conf digitando sudo nano /etc/sysctl.conf.

Qui, si dovranno individuare le seguenti direttive e togliere il segno di commento (#) che le precede:

net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1

Al solito, il file dovrà essere salvato con CTRL+O quindi si potrà uscire dall’editor (CTRL+X).

Finalmente, è quindi possibile definire le regole per l’instradamento dei pacchetti digitando il comando sudo nano /etc/iptables.up.rules.

All’interno del file di testo si dovrà inserire quanto segue:
*nat

-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.2.50:3128
-A PREROUTING -i eth1 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE
COMMIT

Una volta salvato il file, si dovrà inserire il comando sudo nano /etc/rc.local aggiungendo, al suo interno, la riga iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eth0 -j MASQUERADE.

Dopo aver salvato il file, è possibile impartire il comando sudo reboot in modo tale da richiedere il riavvio del macchina.

Al successivo riavvio, dopo aver effettuato il login in Ubuntu Server, si potrà innanzi tutto verificare l’avvenuto cambiamento degli IP assegnati alle due schede di rete ricorrendo al comando ifconfig.

Configurazione del sistema client
Avendo impostato Squid come proxy trasparente, normalmente non sono necessarie modifiche sui sistemi che compongono la rete LAN.

Nel nostro esempio è necessario soltanto che le workstation collegate in rete locale utilizzino gli IP da 192.168.2.1 in poi (fatta eccezione per 192.168.2.50 che è l’indirizzo assegnato al server Ubuntu/Squid).

Ecco, ad esempio, come abbiamo configurato le proprietàd dell’interfaccia di rete utilizzata da un sistema Windows XP collegato in rete locale:

Come si vede, il gateway predefinito è stato impostato a 192.168.2.50, IP assegnato all’interfaccia eth1 sul server Ubuntu.

Con le nostre indicazioni, le varie macchine della LAN dovrebbero essere in grado di “navigare” sul web senza la necessità di operare alcun intervento di riconfigurazione.

Il percorso seguito dai pacchetti dati provenienti dai client è verificabile, ad esempio, lanciando un semplice TRACERT da un sistema client Windows:

Proviamo adesso ad impostare una restrizione in modo tale da impedire agli utenti della LAN la consultazione di siti web come Facebook, Twitter, Meebo o MySpace. Torniamo quindi sulla macchina Ubuntu Server ove si è precedentemente installato e configurato Squid.

Impostazione di restrizioni con Squid
Per imporre delle limitazioni ed impedire, ad esempio, la visita di determinati siti web, è sufficiente effettuare il login sulla macchina Ubuntu Server quindi aprire il file di configurazione di Squid:

sudo nano /etc/squid3/squid.conf

Immediatamente sopra la prima direttiva http_access, si potrà inserire quanto segue: acl bad_url dstdomain "/etc/squid3/bad-sites.squid"

Sopra http_access allow lan, invece, si dovrà specificare la nuova riga http_access deny bad_url.

In questo modo, Squid impedirà la consultazione, da parte dei sistemi collegati in rete locale, di tutti i siti web riportati nel file bad-sites.squid.

Salviamo il file con la solita procedura quindi invochiamo il comando sudo nano /etc/squid3/bad-sites.squid.
Al suo interno scriviamo, per esempio:

.facebook.com
.twitter.com
.meebo.com
.myspace.com

Per rendere operative le modifiche, si dovrà riavviare Squid:

sudo /etc/init.d/squid3 restart

A riavvio di Squid avvenuto, se si tenterà di visitare – ad esempio – Facebook da uno qualunque dei sistemi collegati alla rete locale, con qualunque browser web, si otterrà il messaggio seguente:

Per bloccare il download di certe tipologie di file, è possibile inserire nel file di configurazione di Squid, la riga acl blockfiles urlpath_regex "/etc/squid3/blockfiles.squid".

Immediatamente sopra la riga http_access allow lan si dovrà invece inserire http_access deny blockfiles.

Con il comando sudo nano /etc/squid3/blockfiles.squid si potrà editare il file contenente l’elenco dei file il cui download deve essere sempre bloccato.

All’interno del file blockfiles.squid è ad esempio possibile inserire quanto segue per fare in modo di bloccare qualsiasi tentativo di prelievo di file con estensione .EXE, .AVI, .MPG, .MPEG e .MP3:

\.[Ee][Xx][Ee]$
\.[Aa][Vv][Ii]$
\.[Mm][Pp][Gg]$
\.[Mm][Pp][Ee][Gg]$
\.[Mm][Pp]3$

Riavviando Squid (sudo /etc/init.d/squid3 restart), la nuova limitazione diverrà immediatamente operativa.

Coloro che avessero la necessità di consultare i file di log costantemente aggiornati da Squid, possono fare riferimento al contenuto della cartella /var/log/squid3.

LASCIA UN COMMENTO

Inserisci il tuo commento
Inserisci il tuo nome