Installare Squid Proxy su Windows Server

Logo Squid
Logo del progetto Squid

Come già detto in passato, i motivi che possono spingere ad utilizzare un proxy sono i più svariati. In una azienda spesso l’utilizzo di un proxy server che filtra i risultati è fortemente consigliato, dato che riesce ad allontanare i vari utenti da siti ed applicativi che possono portare molti problemi (e molte ore di assistenza facilmente evitabile).

Esistono vari proxy server da installare, gratuiti e non. Personalmente, abituato su server Linux, la mia scelta è sempre ricaduta su Squid, uno dei migliori (anzi, potrei dire il migliore) proxy server disponibili ad oggi, completamente gratuito ed open source. Basta prenderci un po’ la mano con le configurazioni, ed il gioco è fatto. Più semplice di quanto si pensi.

Squid nasce su Linux, ma è possibile installarlo anche su Windows Server. In questa guida, vedremo come installare, configurare e sopratutto capire Squid.

In principio è il Download

Per prima cosa, ovviamente, dobbiamo scaricare il pacchetto contenente Squid. Potete trovare informazioni per il download sul sito ufficiale del progetto, oppure scaricarlo direttamente da questo mirror. Parliamo di un file .zip di circa 2 MB di peso, che sarà più o meno il peso di Squid su disco.

Una volta scaricato il pacchetto, estraetelo, e copiate la cartella squid nel disco C:/. Questa è una comodità per avere il tutto subito sotto mano, ciò non toglie che potete piazzare la cartella dove preferite.

Far riconoscere i file

Subito dopo lo scompattamento ed il posizionamento, bisogna rinominare tre file. Entriamo nella cartella squid/etc, nella quale troveremo tre file, ossia squid.conf.default, mime.conf.default e cachemgr.conf.default. Dobbiamo rimuovere il .default da tutti e tre i file, in modo da renderli dei semplici file .conf, in modo da permettere a Squid di poterli leggere ed interpretare. Semplice semplice.

E’ arrivato ora il momento di iniziare a configurare il file squid.conf. Questo file contiene le indicazioni che Squid deve seguire mentre è in esecuzione, e se qualcosa viene configurato male, Squid non parte. Occorre prestare un po’ di attenzione nella digitazione, e sopratutto sapere cosa si va a modificare.

Vediamo come configurare, semplicemente, il proxy.

Impostare i parametri per l’autenticazione

Apriamo il nostro file squid.conf (facciamone sempre una copia di sicurezza prima), e cerchiamo le seguenti righe (solitamente quasi all’inizio del file):

# auth_param ntlm program c:/squid/libexec/mswin_ntlm_auth.exe
# auth_param ntlm children 5
# auth_param ntlm keep_alive on

Queste stringhe sono commentate, ossia si presentano con il cancelletto prima del comando. Questo fa si che Squid non le consideri, passando avanti all’istruzione successiva. In questo caso, dobbiamo decommentare le tre righe, in modo da abilitare i comandi. In questo caso, stiamo abilitanto l’autenticazione NTLM, protocollo utilizzato da Microsoft per gestire, appunto, l’autenticazione degli utenti, specificandogli che deve essere sempre attiva, che deve usare il programma specificato, e che può utilizzare fino a 5 processi in contemporanea.

Fatta questa modifica, salviamo il file ed andiamo avanti.

Capire le ACL ed il comando http_access

Come si può facilmente capire dalle sigle, ACL sta per Access List, mentre http_access definisce chi può entrare e chi no. Detto in altri termini, le ACL sono letteralmente delle liste, dove noi elenchiamo utenti o siti. Subito dopo, con http_access, noi definiamo quale ACL può connettersi e quale no. In questo modo, posso creare una serie di regole incredibilmente personalizzabili, posso usare delle regole diverse per dei gruppi diversi di utenti, creare degli utenti (singoli) più o meno limitati di altri, e così via. Access List definisce chi/cosa, http_access definisce se si o no.

Il comando per aggiungere una ACL è il seguente:

acl [nome_lista] [opzione] [file]

acl siti_bloccati url_regex "c:/squid/etc/siti_bloccati.txt"

Si definisce un nome che utilizza Squid per identificare la ACL, l’opzione/il parametro da applicare ed il percorso del file che contiene la lista. Un file .txt và benissimo, e può trovarsi ovunque, ho fatto un esempio locale su c:/, ma può essere anche via web (http://) o ftp (ftp://).

Per quanto riguarda l’opzione, in questi casi sarà sempre url_regex, perché Squid utilizza questo comando per esaminare il contenuto del file .txt.

Il comando che definisce http_access è altrettanto semplice:

http_access [allow|deny] [nome_lista]

http_access deny siti_bloccati

Mentre allow permette la navigazione di una serie di utenti/siti, deny la impedisce. Semplicissimo.

Nel file squid.conf possiamo aggiungere quante ACL vogliamo, e per utilizzarle bisogna sempre definire il relativo http_access! Altrimenti, la lista viene definita ma non usata.

Creare una lista di siti bloccati e consentiti

Quando si parla di limitazioni della navigazione, generalmente si ragiona seguendo due scuole di pensiero: o si blocca solo qualcosa, o si blocca tutto. Se decidiamo di bloccare solo determinati siti, tutto il WWW sarà accessibile tranne ciò che noi specifichiamo. Al contrario, bloccando tutto, l’utente non potrà raggiungere nessun sito se non quelli che noi aggiungiamo nella lista.

Per bloccare determinati siti, apriamo il nostro blocco note, e molto semplicemente iniziamo ad aggiungerci dentro i siti che non vogliamo siano raggiungibili, seguendo questo ordine:

.libero.it
.facebook.com
.twitter.com
.youtube.com
.youporn.com

Ci basta salvare il file sul nostro computer, e dargli un nome facilmente riconoscibile (io generalmente lo chiamo siti_boccati.txt, e lo salvo nella directory squid/etc). Vi informo già da ora che inserendo i siti con il punto davanti al dominio, si bloccano le varie estensioni regionali/nazionali (ad es. .facebook.com blocca facebook.it, .es, .fr ecc), ma non blocca eventuali protocolli sicuri! Se un utente è loggato su Youtube, vi accederà tramite https, e bypasserà il limite. Aggiungete dunque anche i domini completi e con il secure per sicurezza.

Una volta salvato il file, apriamo squid.conf, e raggiungiamo la sezione delle ACL. Subito sotto l’ultima ACL (generalmente quella che riguarda la porta 777), aggiungiamoci la nostra, seguendo le indicazioni date poco sopra. Nell’esempio:

acl siti_bloccati url_regex "c:/squid/etc/siti_bloccati"

Scorriamo più sotto, perché dobbiamo aggiungere anche il permesso! Ora come ora, abbiamo solo specificato a Squid che esiste questa ACL… ma non sa cosa farsene! Raggiungiamo quindi la riga

# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS

e, subito sotto, inseriamo la nostra regola. In questo caso, trattandosi di siti bloccati, la navigazione verso di loro sarà negata, quindi:

http_access deny siti_bloccati

E salviamo il file. In questo modo, potremo andare ovunque, ma non su Youtube, su Facebook o su Youporn.

Al contrario, se vogliamo specificare solo i siti visitabili, dobbiamo fare lo stesso identico procedimento, ossia creare un file .txt ed inserirci dentro, uno sotto l’altro, gli indirizzi da fare raggiungere (in questo caso, siti_consentiti.txt, sempre in squid/etc), aggiungerlo con una ACL, e specificare sotto:

http_access allow siti_consentiti

In questo modo (prendendo sempre la lista di prima), potrete andare su Youporn, ma non su Google 🙂

Creare un Content Filter

Con Content Filter (Filtro dei Contenuti) si intende un particolare livello di controllo, che blocca qualunque sito contenga determinati contenuti. Sempre prendendo l’esempio di prima, io non imposto il blocco su Youporn.com, bensì imposto il filtro sulla parola porn. In questo modo, tutti i siti e le pagine che contengono questa parola, verranno bloccati.

Usare un content filter è molto più consigliabile, dato che esistono miliardi e miliardi di siti internet. E’ più facile bloccare tutte le pagine che contengono la parola bet o betting, piuttosto che creare una lista con tutti i siti di scommesse online. E non so neanche se è possibile una cosa del genere.

Per creare un content filter, il procedimento è sempre lo stesso. Apriamo un blocco note, e scriviamoci dentro, una sotto l’altra, le parole che vogliamo filtrare:

porno
scommesse
shopping
download

Salviamo il file. txt dove preferiamo (ad es. contenuti.txt in squid/conf), ed aggiungiamolo prima nelle ACL

acl contenuti url_regex "c:/squid/etc/contenuti.txt"

sempre  con l’opzione url_regex, in quanto, come detto sopra, è lei che fa effettuare il controllo. Subito dopo, aggiungiamo sempre:

http_access deny contenuti

che, in questo caso, bloccherà l’accesso a tutti i siti che contengono una o più parole impostate nella lista.

Usare un content filter può provocare dei piccoli problemi. Può capitare che, un giorno, sul sito del Corriere sia presente la parola porno nel titolo/descrizione di un articolo. In questo caso, l’accesso al Corriere risulterebbe impossibile! Per ovviare questo piccolo inconveniente, basta creare una lista di siti consentiti, che non saranno soggetti a controlli (e quindi sempre accessibili).

Il content filter può anche essere usato per filtrare i download di determinati file! Basta specificare una lista come ad esempio

.exe
.msi
.jpg
.mp3

per impedirne il download. Facile, semplice ed efficace!

Impostiamo le opzioni della Cache

La Cache è una cosa molto importante per Squid, dato che questo viene utilizzato anche come accelleratore della navigazione. A noi spetta il compito di abilitare ed impostare la cache, in modo da rendere il nostro proxy server più performante. Per farlo, dobbiamo raggiungere la riga

# cache_dir ufs c:/squid/var/cache 100 16 256

per decommentarla (nel caso ci sia il cancelletto prima). In questo modo, abilitiamo 100 MB di Cache per Squid, dentro i quali immagazzinerà dei file temporanei dei siti visitati. 100 MB è definito come il massimo assegnabile, ma si può comunque aumentare.

Impostiamo le opzioni dei Log

I Log sono molto importanti, ci permettono non solo di capire se ci sono dei problemi, ma ci forniscono anche un report della navigazione. Dai log possiamo vedere i siti visitati dagli utenti o i file scaricati, ad esempio. Per abilitarli, raggiungiamo la riga

# access_log c:/squid/var/logs/access.log squid

e decommentiamola (se non lo è già). Possiamo comunque personalizzare il percorso dei file di log, spostandoli altrove.

Altra impostazione riguarda il formato ed il tipo di log, ossia che nome avrà il file di output ed il contenuto al suo interno. Personalmente, consiglio di utilizzare

# logformat squid %ts.%03tu %6tr %>a %Ss/%03Hs %<st %rm %ru %un %Sh/%<A %mt

che fornisce la maggior parte delle informazioni realmente utili. Esistono 4 diversi formati da provare/usare, scegliete il vostro e decommentatelo.

Pagine di Accesso Negato e personalizzazioni finali

L’utente che cercherà di andare su Facebook con il proxy attivo, verrà reindirizzato ad una pagina di errore, che titolerà “ACCESS DENIED“. Squid di default è in Inglese, ma esistono tutte le varie pagine anche in Italiano. Per far visualizzare al povero utente la pagina di errore in lingua nostrana (un po’ maccheronica), basta raggiungere la seguente riga

error_directory c:/squid/share/errors/English

e sostituire la parola English con Italian. In questo modo, le pagine saranno in Italiano, anche se consiglio di fargli sempre qualche modifica per renderle più comprensibili. Spesso, l’utente che ci finisce sopra, finisce per chiamare spaventato, pensando di aver rotto qualcosa.

Possiamo anche impostare un indirizzo mail di riferimento, in modo che se qualcuno riscontra un problema (come un sito che dovrebbe essere accessibile che viene bloccato erroneamente) possa contattarci facilmente. Raggiungiamo la riga

# cache_mgr

decommentiamola ed aggiungiamo subito dopo un indirizzo mail valido.

Primo avvio ed installazione del servizio

Bene, fatte tutte queste modifiche dobbiamo salvare il nostro amato squid.conf, ed aprire un bel Prompt dei Comandi. Fino ad ora abbiamo solo impostato il funzionamento di squid, lo abbiamo solo configurato, ma questo non è ancora installato sulla nostra macchina. Insomma, è pronto per partire!

Tramite promp spostiamoci nella cartella squid/sbin. Se avete posizionato la cartella in C:/ come detto sopra, date i seguenti comandi uno alla volta:

cd ..
cd ..
cd squid
cd sbin

Ora che vi trovate nella cartella (sulla sinistra è visibile il percorso, ossia c:/squid/sbin), bisogna avviare l’utility che configura Squid secondo i parametri che abbiamo impostato, e che crea lo spazio della cache. Molto semplicemente, ci basta dare il comando

squid -z

e verrà fatto tutto automaticamente. Verranno create delle Swap Directory, giusto qualche secondo. Se si visualizzano degli errori, questi spiegano molto bene dove si trovano. Basterà andare nel file squid.conf a correggerli. Salvo imprevisti, avremo “installato” Squid sul nostro server.

Per comodità, potete installarlo anche come servizio. Basta dare il comando (dovete sempre trovarvi in squid/sbin)

squid -i

ed il suo nome apparirà nella lista dei Servizi, e sarà ancora più facile da gestire. Di default, è impostato come avvio automatico. Se poi vi piace smanettare dal prompt, dovete dare i seguenti comandi, relativamente per avviare o stoppare il servizio:

net start Squid
net stop Squid

Se non verranno visualizzati messaggi di errore, Squid sarà bello che installato sulla nostra macchina Windows Server! Di default, Squid è in ascolto sulla porta TCP 3128, ma voi, sempre da squid.conf, potete tranquillamente modificare la porta. Generalmente, i proxy utilizzano porte come la 808 0 la 8080/8081, che comunque sono spesso utilizzate anche da altri applicativi (ad es. Tomcat).

Applicare il proxy al povero malcapitato

Ora bisogna sporcarsi le mani: andiamo alla postazione dell’uente/degli utenti da proxare, ed aggiungiamo il proxy. Se utilizzano Windows, è consigliabile impostarlo nella Opzioni Internet, in modo che di default venga utilizzato da tutti i browser. Per farlo, andiamo in Pannello di Controllo –> Opzioni Internet, clicchiamo sulla scheda “Connessioni” e da li “Impostazioni Lan“.

In basso, nella finestra che si apre, clicchiamo su abilita proxy (e sotto abilitiamo pure l’opzione per non usarlo nella rete locale), quindi clicchiamo su “Avanzate“, e solo nel campo http aggiungiamo l’indirizzo IP del server dove risiede il proxy, e subito dopo la porta (3128).

Diamo due OK ed il gioco è fatto, l’utente ora naviga sotto proxy. Bisognerà solo spiegarglielo! 😀

In una rete Windows, è consigliabile sfruttare le Group Policy, per “imporre” il proxy a tutti gli utenti del dominio senza doverlo impostare manualmente di volta in volta. È comoda anche la policy che impedisce di modificare le opzioni del proxy, impedendo così all’utente più smanettone di abilitarlo e disabilitarlo a suo piacimento. L’opzione vale solo se si utilizza I.E.

Bene, questo è quanto. E’ molto semplice, alla fin fine, configurare Squid, in qualunque ambiente ci troviamo. Basta prenderci un po’ la mano, ed il gioco è fatto. Una volta presa confidenza con squid.conf, si possono applicare delle opzioni molto interessanti, come l’applicazione di filtri diversi in base agli utenti. Si possono usare più liste di siti bloccati/consentiti, o bloccare solo l’utilizzo di determinate porte. Insomma, c’è di che sbizzarrirsi.

In questa guida, vi ho proposto una configurazione-tipo che consente l’accesso alla rete a chiunque si colleghi, mentre altri utilizzano un blocco in più, ossia consentono la navigazione solo agli utenti presenti nella AD di Windows, e non agli utenti locali. Un estremo, che però vi fa capire quanto sia personalizzabile Squid.

E quando impostate un proxy, non siate troppo cattivi. Bloccate giusto il necessario 🙂

  • alfonso

    salve, a me da FATAL: authoparam ntlm program : (2) No such file or directory nel momento in cui sul prompt dei comandi inserisco squid -z
    quale potrebbe essere il problema? grazie in anticipo

    • Ciao,
      a giudicare dall’errore, squid non riesce a trovare una directory, e quindi non può avviarsi.
      Hai seguito questa guida per configurare il proxy?