Bloccare siti con Squid: ecco come impedire l'accesso ai siti Internet in modo sicuro e centralizzato

Qual è il modo più efficace per bloccare i siti Internet ed impedire l'accesso ad alcuni di essi? Di recente, in alcuni nostri articoli, abbiamo parlato della possibilità di utilizzare speciali server DNS capaci di impedire la vi...

Qual è il modo più efficace per bloccare i siti Internet ed impedire l’accesso ad alcuni di essi? Di recente, in alcuni nostri articoli, abbiamo parlato della possibilità di utilizzare speciali server DNS capaci di impedire la visita di determinati siti Internet, di ricorrere all’uso del file HOSTS oppure di software in grado di attivare, una volta installati sul sistema, funzionalità di web filtering.

Nel riquadro seguente, citiamo i principali nostri articoli sull’argomento:

Le soluzioni sin qui presentate sono certamente efficaci ma non hanno valenza generale: non impediscono la visita di talune tipologie di siti web indipendentemente dal sistema client connesso alla rete locale e limitano la protezione alla singola macchina. Collegando alla rete locale un altro personal computer, uno smartphone od un tablet, il dispositivo sarà in grado di raggiungere qualunque sito web. Un utente che dispone di un account di tipo amministrativo potrà inoltre modificare i server DNS in uso o la configurazione del file HOSTS.

Se le proprie esigenze si ponessero ad un livello superiore, è possibile orientarsi su una soluzione centralizzata che permetta di bloccare qualunque tipologia di sito web.

Uno dei software migliori, capaci di bloccare siti web secondo diversi criteri, è Squid. Grazie ai suoi “tentacoli” (squid, in inglese, è il calamaro), l’applicazione può bloccare l’accesso ai siti Internet semplicemente esaminando le varie richieste di connessione provenienti dai client collegati in rete locale. Indipendentemente dal browser in uso su ciascuna macchina, Squid saprà intercettare le richieste di collegamento e rigettare quelle che non rispettano le regole imposte dall’amministratore.

Così, grazie a Squid sarà molto semplice bloccare Facebook, i social network in generale, i siti porno, YouTube e così via.

Squid, tra l’altro, è un software libero rilasciato sotto licenza GNU GPL che si rivela di grandissima utilità in ambiente lavorativo.

Configurare Squid come proxy trasparente

Nel nostro caso configureremo Squid 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, una porta ben precisa (tipicamente, la TCP 3128).

Configurando Squid come proxy trasparente, tutto il traffico sarà automaticamente indirizzato alla porta sul quale Squid verrà messo in ascolto. La macchina server con Squid si comporterà di fatto come un un router.

Prima di procedere è necessario dotarsi di una macchina da utilizzare per l’installazione di Ubuntu Server 12.04.2 LTS, scaricabile da questa pagina.

La sua dotazione hardware della macchina prescelta non dev’essere nemmeno troppo robusta: suggeriamo 512 MB di RAM, un disco fisso da almeno 30 GB e due schede di rete.

La presenza di due schede di rete è requisito essenziale: la prima scheda (Linux la chiamerà eth0) dovrà essere connessa attraverso un cavo ethernet ad un router ADSL mentre la seconda (eth1) ad un hub sul quale sono attestati tutti i sistemi che compongono la rete locale.

Supponiamo che il router ADSL abbia IP 192.168.1.1; alla prima interfaccia di rete installata sul server Linux assegneremo, ad esempio, l’IP 192.168.1.100. Su tale indirizzo IP risponderà, tra l’altro, anche l’interfaccia di amministrazione web che utilizzeremo per gestire Squid.

Nel nostro caso, alla seconda interfaccia assegneremo invece l’IP 10.0.2.100 ed imposteremo un server DHCP in modo tale che tutti i client che via a via si connetteranno alla rete locale potranno automaticamente ricevere indirizzo IP e DNS da utilizzare (per semplicità, attiveremo il DHCP a partire dall’IP 10.0.2.101 all’IP 10.0.2.255; gli IP 10.0.2.1-10.0.2.99 potranno essere utilizzati per le assegnazioni manuali).

Installazione di Ubuntu Server

Abbiamo scelto Ubuntu Server 12.04.2 “Precise Pangolin” perché trattasi di una versione LTS (Long Term Support), supportata da Canonical addirittura sino al mese di aprile 2017.

Dopo aver lasciato inserito il CD d’installazione di Ubuntu Server nel lettore e riavviato il personal computer, si dovrà avviare il setup selezionando Installa Ubuntu Server quindi indicando dapprima la lingua prescelta (l’italiano).

Alla comparsa della finestra La traduzione del programma d’installazione per la lingua selezionata non è completa del tutto, bisognerà rispondere .

Le successive schermate sono assolutamente intuitive: si dovrà scegliere Italia come Paese di residenza, rispondere No alla domanda Determina la disposizione della tastiera quindi configurare l’italiano come layout della tastiera.

Il passo successivo consiste nell’indicare la scheda di rete da usare come interfaccia principale. Si selezioni la prima (eth0):

Successivamente, si dovrà specificare un nome per la macchina Linux (noi abbiamo scelto ubuntuserver).

Per scegliere Continua, bisognerà premere il tasto TAB quindi Invio.

Installazione di Ubuntu Server 12.04.2 LTS e dell’interfaccia Webmin

Ubuntu Server richiederà poi di indicare il nome dell’account con i diritti di amministratore da utilizzare al posto del canonico root. Noi abbiamo specificato michele:

Analogo nome abbiamo inserito nella finestra successiva (Scegliere il nome utente per il nuovo account (…)):

Dopo aver selezionato, ancora, Continua, si dovrà digitare una password da abbinare all’account appena creato.

Alla richiesta Cifrare la propria directory personale, è possibile scegliere autonomamente ma per i nostri scopi va bene rispondere No.

Ubuntu Server passerà alla verifica del fuso orario quindi si passerà al partizionamento del disco fisso (suggeriamo di selezionare l’opzione Guidato – usa l’intero disco). In questo modo, previa conferma, Linux utilizzerà l’intero quantitativo di spazio a disposizione sul disco fisso della macchina server (alla domanda Scrivere le modifiche sui dischi, bisognerà rispondere ).

Non appena apparirà la schermata Informazioni del proxy HTTP è possibile premere Invio per comunicare all’installer che non si desidera usare alcun proxy server per il collegamento ad Internet.

Per quanto riguarda gli aggiornamenti di sicurezza è possibile scegliere di gestirli in maniera autonoma da Ubuntu Server (opzione Nessun aggiornamento automatico) oppure si può richiederne l’installazione automatica (Installare automaticamente gli aggiornamenti di sicurezza).

La schermata seguente consentirà di scegliere quali componenti si desidera vengano automaticamente installati in Ubuntu Server. Per la configurazione di Squid non è necessario alcun software tra quelli indicati. Nel nostro caso, quindi, abbiamo preferito non selezionare alcuna voce e continuare l’installazione della distribuzione Linux (pressione del tasto TAB, Invio).

Quando verrà mostrato il messaggio “Installare il boot loader GRUB nel master boot record” si dovrà rispondere affermativamente.

Ad installazione conclusa, la macchina Ubuntu Server sarà riavviata (basterà premere Invio sulla voce Continua).

A boot effettuato, Ubuntu Server presenterà il prompt ubuntuserver login:. Qui si dovranno digitare le credenziali d’accesso specificate durante l’installazione:

Alla comparsa del prompt dei comandi si dovranno digitare, in sequenza, le istruzioni qui riportate:

wget http://prdownloads.sourceforge.net/webadmin/webmin-1.620.tar.gz
tar -xvf webmin-1.620.tar.gz
cd webmin-1.620
sudo sh setup.sh

In questo modo s’installerà Webmin, un software che permette di gestire le varie impostazioni di configurazione della macchina Linux attraverso una comoda interfaccia web.
Al posto di 1.620 dev’essere digitato il numero di versione rilevabile dal sito ufficiale di Webmin.

Durante l’installazione di Webmin, che proseguirà in modalità testuale, si potranno accettare tutte le impostazioni di default premendo più volte il tasto Invio.

Web server port 10000 sta a significa che l’interfaccia web di Webmin verrà automaticamente posta in ascolto sulla porta TCP 10000: per accedervi basterà http://indirizzo_ip_ubuntuserver:10000 nella barra degli indirizzi del browser.

In corrispondenza di Login name si potrà premere Invio per accettare admin come nome utente per l’accesso all’interfaccia web di Webmin.
In risposta alla domanda Start Webmin at boot time, bisognerà digitare y seguito dalla pressione del tasto Invio.

Sempre dal prompt di dovrà quindi digitare il comando seguente (digitando poi la password associata all’account amministrativo):

sudo nano /etc/network/interfaces

Il file “interfaces” che si aprirà a video, dovrà essere modificato in modo tale da contenere solo quanto segue:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
network 192.168.1.0
gateway 192.168.1.1

Per salvare la modifica appena applicata, come indica la legenda in calce alla schermata, è necessario premere la combinazione di tasti CTRL+O, il tasto Invio quindi CTRL+X per uscire dall’editor di testo e tornare alla riga di comando.
Così facendo, si è provveduto ad assegnare, definitivamente, l’IP 192.168.1.100 (IP statico) all’interfaccia di rete.

A questo punto è bene riavviare la macchina Linux digitando sudo reboot quindi rieffettuando il login da riga di comando.

Accesso all’interfaccia web di Webmin ed installazione di Squid

A questo punto è possibile accedere da browser web all’interfaccia di Webmin. Per procedere bisognerà collegare, tramite cavo ethernet, un personal computer al router 192.168.1.1 e digitare l’indirizzo http://192.168.1.100:10000 nella barra degli indirizzi del browser.

Per entrare in Webmin, si dovranno digitare username e password definiti in fase d’installazione:

Dal menù Networking bisognerà quindi scegliere Network Configuration e fare clic su Network interfaces:

Qui si potrà aggiungere la seconda interfaccia di rete facendo clic su Add a new interface:

Nel nostro caso inseriremo eth1 nel campo Name e 10.0.2.100 nel campo IPv4 address verificando che l’opzione Activate at boot sia impostata su Yes.

Per concludere, bisognerà fare clic sul pulsante Create and apply.

Cliccando su Return to network configuration, bisognerà poi selezionare Hostname and DNS Client. In corrispondenza dei campi DNS servers si dovranno indicare i server DNS che si desiderano utilizzare:

La modifica dovrà essere memorizzata cliccando sul pulsante Save.

Il passo successivo consiste nel richiedere l’installazione di Squid.
Per procedere è sufficiente cliccare su Un-used Modules quindi su Squid Proxy Server. Alla comparsa del messaggio seguente bisognera cliccare sul link Click here evidenziato con una freccia rossa:

Webmin provvederà a scaricare autonomamente il pacchetto d’installazione di Squid ed a caricarlo sulla macchina in uso.

Ricaricando l’indirizzo http://192.168.1.100:10000, si troverà Squid Proxy Server nella sezione Servers della colonna laterale di Webmin.

Per iniziare, bisognerà cliccare sull’icona Cache options:

In corrispondenza di Cache directories bisogna selezionare l’opzione Listed quindi specificare /var/spool/squid3 nel campo Directory; 900 in Size; 16 in 1st level dirs; 256 in 2nd level dirs.

Facendo clic sul pulsante Initialize cache (as Unix user “proxy”), Squid dovrebbe essere operativo.

Bloccare l’accesso ai siti web con le ACL di Squid

Le Access Control List (ACL) sono le regole che Squid utilizza per stabilire se concedere o meno l’accesso ad un sito web richiesto da parte di una macchina client.

Dalla finestra principale di Squid Proxy Server, in Webmin, bisogna cliccare sull’icona Access Control.

Configurazione dei permessi e dei vari blocchi con le ACL di Squid Proxy Server

Com’è possibile verificare, Squid utilizza già un insieme di regole preimpostate. Le regole di accesso vere e proprie sono impostabili mediante la scheda Proxy restrictions.

Per impostazione predefinita, Squid blocca gran parte delle connessioni in uscita. Suggeriamo quindi di cliccare sull’ultima voce Deny all e trasformarla in Allow (all):

Non bisogna dimenticare di fare clic sul pulsante Save. Tornati nella finestra principale di Squid Proxy Server, suggeriamo di fare clic su Clear and rebuild cache.

Per bloccare Facebook ed impedire quindi qualunque tentativo di connessione al social network di Mark Zuckerberg, è necessario cliccare sull’icona Access Control, sulla scheda Access control lists, scegliere Web Server Hostame quindi fare clic su Create new ACL:

Nella schermata successiva si potrà digitare un nome per la nuova regola (ad esempio nofacebook) quindi .facebook.com nel campo Domains:

Facendo clic su Save bisognerà abilitare la regola selezionando la scheda Proxy restrictions e cliccando su Add proxy restriction.

Selezionando Deny quindi nofacebook dall’elenco Match ACLs, l’accesso a Facebook da parte di qualsiasi client sarà automaticamente bloccato.

Cliccando su Save, la regola appena aggiunta sarà inserita in fondo alla lista. Dal momento che le voci che vengono prima in elenco hanno maggiore priorità, è necessario spostare l’ultima regola sopra Allow all. Il riposizionamento della regola può essere effettuato cliccando sulla freccia a destra:

Ecco il risultato:

Per rendere operativa la nuova regola, bisognerà ricordarsi di fare clic sul link Apply Changes in alto a destra.
In caso di difficoltà, è sempre bene far riferimento all’icona Clear and rebuild cache.

Impostando l’utilizzo del proxy 192.168.1.100 (porta 3128) nel browser web utilizzato sulla macchina collegata al router 192.168.1.1, ci si accorgerà come Squid sia già in grado di bloccare qualunque tentativo di accesso a Facebook permettendo la connessione a qualunque altro sito web.

Il nostro intento, però, è quello di allestire un proxy trasparente che non preveda l’alterazione della configurazione della rete o del browser sui sistemi client connessi in rete locale. La macchina Squid sarà la sola connessa al router 192.168.1.1 (la porta d’accesso sulla rete Internet) attraverso la prima scheda mentre alla seconda scheda verrà collegato un hub insieme con tutti i sistemi client della LAN.

Attivazione del proxy trasparente con Squid e routing del traffico

Per fare in modo che Squid operi come un proxy trasparente, è necessario tornare ancora una volta al prompt di Ubuntu Server e digitare quanto segue:

sudo nano /etc/squid3/squid.conf

Con la combinazione di tasti CTRL+W si potrà andare alla ricerca della stringa http_port 3128.
Alla fine di tale linea bisognerà aggiungere il parametro transparent:

Al solito, le combinazioni di tasti CTRL+O e CTRL+X permetteranno di salvare e chiudere il file di configurazione.

La modifica successiva può essere apportata digitando il comando seguente:

sudo nano /etc/rc.local

All’interno del file rc.local è indispensabile che figuri quanto segue:

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
exit 0

Le combinazioni di tasti CTRL+O e CTRL+X permetteranno di salvare e chiudere il file di configurazione.

Infine, bisognerà digitare il comando seguente:

sudo nano /etc/sysctl.conf

Con la combinazione di tasti CTRL+W si potrà andare alla ricerca della stringa Net.ipv4.ip_forward.
Una volta individuata bisognerà togliere il segno # (il cancelletto) che la precede. Analoga operazione dovrà essere effettuata sulla successiva Net.ipv6.conf.all.forwarding.

Ancora una volta, CTRL+O e CTRL+X permetteranno di salvare e chiudere il file di configurazione.

È giunto il momento di riavviare la macchina Linux con il comando sudo reboot.

Installazione del server DHCP

Per fare in modo che i client possano connettersi direttamente alla macchina Ubuntu Server equipaggiata col proxy Squid, senza la necessità di impostare manualmente gli IP corretti, si potrà accedere nuovamente al pannello di amministrazione di Webmin (http://192.168.1.100:10000) quindi selezionare la voce DHCP Server dalla sezione Un-used Modules.

Qui, bisognerà poi cliccare su Click here in modo tale da richiedere il download e l’installazione automatica del server DHCP.

Ad installazione avvenuta, sempre da DHCP Server, è necessario cliccare sul link DHCP module configuration e togliere il numero “3” da tutti i percorsi ottenendo quanto in figura:

Dal menù principale del DHCP Server, è quindi necessario cliccare sul link Add a new subnet:

In corrispondenza di Subnet description va indicato lan, 10.0.2.0 nel campo Network address, 10.0.2.101 e 10.0.2.255 in Address ranges, 255.255.255.0 come Subnet mask.

Dopo aver fatto clic sul pulsante Create, si dovrà cliccare sull’icona 10.0.2.0:

Cliccando sul pulsante Edit client options si potranno specificare i server DNS da comunicare dinamicamente ai client via a via connessi (DNS servers).

Cliccando su Save ed ancora su Save bisognerà infine cliccare sul pulsante Edit Client Options in basso.
Qui bisognerà eliminare l’indicazione example.org ed i server DNS preimpostati (vanno selezionare le opzioni Default).
È tutto pronto! Suggeriamo di effettuare un reboot della macchina Linux.

Tutte le macchine della rete locale connesse sulla seconda interfaccia (10.0.2.x), dovrebbero così ricevere un IP dal server DHCP di Ubuntu.
In Windows, è possibile servirsi dei comandi ipconfig /release e ipconfig /renew dal prompt per richiedere un nuovo indirizzo IP.
Digitando ipconfig /all è possibile verificare se Ubuntu Server ha fornito un IP ed i server DNS da utilizzare:

Il comando TRACERT www.google.it ben evidenzia come le richieste di connessione transitino attraverso il proxy server Squid (IP 10.0.2.100) e solo successivamente passino attraverso il router ADSL (IP 192.168.1.1):

Da qualunque macchina connessa alla rete locale, usando un qualsiasi browser, ogniqualvolta si proverà a connettersi con Facebook si riceverà il messaggio seguente:

Agendo sulle ACL di Squid, sempre dal pannello di amministrazione web, sarà possibile aggiungere una vasta schiera di regole. Si potranno bloccare siti web basandosi sull’indirizzo mnemonico, sull’IP oppure, addirittura, impedire l’uso di specifici browser dalla rete locale (Browser Regexp). Basterà indicare il corrispondente user agent o parte di esso.

Ti consigliamo anche

Link copiato negli appunti