Installazione del proxy server Squid in ambiente Windows – Parte 2/2

Nella prima parte della guida abbiamo visto come configurare il servizio squid, vedremo ora come configurare in automatico i client per utilizzarlo e alcune ottimizzazioni al servizio stesso.

Configurazione client

Il modo più semplice, ma più laborioso, per configurare i client è quello di modificare a mano le impostazioni di Internet Explorer per utilizzare il server proxy che abbiamo configurato. La stessa operazione può essere automatizzata sfruttando le GPO (Group Policy Object).

Editiamo la Default Domain Policy o una qualsiasi policy in modo da configurare le impostazioni del proxy in questo modo:

image

che trovate nel percorso Configurazione utente –> Impostazioni di Windows –> Manutenzione di Internet Explorer –> Connessione.

Questa configurazione funziona bene però ha lo svantaggio di impostare il proxy in modo permanente nei client, potrebbero quindi nascere dei problemi usandoli in altre reti dove non esiste un proxy o comunque esiste ma con parametri di accesso diversi.

Per risolvere il problema possiamo sfruttare la funzione di configurazione automatica di Internet Explorer. In pratica tramite GPO andiamo a configure Internet Explorer per usare la configurazione automatica e poi configuriamo il DNS e un file di confiurazione per far si che i parametri del proxy siano configurati a ogni sessione.

In questo caso la policy da modificare è la Configurazione automatica del browser che trovate sempre nello stesso percorso Configurazione utente –> Impostazioni di Windows –> Manutenzione di Internet Explorer –> Connessione.

image

Una volta che la policy si è applicata, o ne abbiamo forzato l’applicazione con il comando gpupdate /force, nelle Impostazioni LAN del tab Connessioni delle Opzioni Internet dovremmo vedere il flag Rileva automaticamente impostazioni flaggato.

Fin qui abbiamo configurato Internet Explorer per usare le impostazioni automatiche, ora dobbiamo creare il file con le impostazioni e far in modo che possa essere trovato.

Create un file di testo con dentro:

function FindProxyForURL( url, host )
{
if( isPlainHostName( host )  ||          // se nessun dominio viene specificato
dnsDomainIs( host, “.dominio.local”) ||
isInNet( host, “192.168.1.0”, “255.255.255.0” ) ||
)
return “DIRECT”;                      // Non si usa alcun proxy
else
return “PROXY 192.168.1.10:3128”
}

dove al posto di dominio.local e 192.168.1.0/255.255.255.0 mettete i vostri dati che posso contenere anche più righe aggiunti sempre con l’operatore || (or).

Salviamo il file con il nome wpad.dat in un percorso qualunque che sia raggiungibile tramite web, ad esempio lo possiamo inserire nella root di un server con IIS in modo da poterlo raggiungere con http://192.168.1.10/wpad.dat o http://srv-sbs/wpad.dat.

Se provate uno degli indirizzi sopra e ottenete un errore del tipo:

image

è probabile che stiate utilizzando IIS e che l’estensione .dat non sia configurata nella lista delle estensioni MIME. Per far questo aprite la console di gestione di IIS e nella finestra delle proprietà del server cliccate il pulsante Tipi MIME e aggiungete l’estensione .dat così configurata:

image

e riavviate IIS. A questo punto dovreste essere in grado di vedere il file wpad.dat all’interno di Internet Explorer.

Adesso che abbiamo creato il file dobbiamo configurare il sistema per far si che venga letto in automatico da Internet Explorer. Per far questo possiamo sfruttare il DNS e/o il DHCP.

Vedremo ora come configurare il servizio DNS, per il servizio DHCP vi rimando a questo articolo che trovate sul TechNet: http://technet.microsoft.com/en-us/library/cc713344.aspx.

Aprite la console di gestione del DNS e all’interno della zona di ricerca diretta del vostro dominio, create un record CNAME chiamato wpad che punta al server dove avete salvato il file wpad.dat. Dopodiche verificate che tutto funziona aprendo una finestra di Internet Explorer e digitando:

http://wpad.dominio.local/wpad.dat

Se tutto è configurato correttamente dovreste vedere il contenuto del file wpad.dat.

Nel caso non riusciate a risolvere il nome wpad.dominio.local verificate che il nome wpad non sia inserito nella Global Query Block List: http://www.indented.co.uk/index.php/2009/05/21/windows-2003-dns-global-query-block-list/

Ora non ci resta che aprire Internet Explorer e verificare l’effettivo uso del server proxy.

L’utilizzo della configurazione automatica con il file wpad.dat risulta essere molto comoda se avete spesso necessità di far accedere ad internet, tramite il proxy, portatili esterni alla vostra rete.

Configurazione log

Il formato di default dei log di accesso al proxy, così come gli altri presenti, sono utili nel caso debbano essere interpretati da software esterni. Se volete invece un formato che sia più comprensibile per noi umani e facilmente importabile in Excel potete creare un nuovo tipo con queste specifiche:

logformat my “%>a”,”%ul”,”%rm %ru HTTP/%rv”,”%Hs”,”%<st”,”%Ss:%Sh”,”%tl”

e poi impostare squid per usarlo con la riga:

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

Con il tempo vi accorgerete che i file di log, soprattutto il file access.log, tenderà a crescere notevolmente possiamo quindi usare la funziona logrotate di squid per creare diversi file in determinati momenti.

Il modo più semplice è schedulare il comando:

squid –n squid –k rotate

magari una volta al mese in modo da poter archiviare i file di log.

Ogni volta che eseguiamo il comando i file verranno rinominati secondo il seguente schema:

access.log.x –> access.log.x+1
cache.log.x –> cache.log.x+1
store.log.x –> store.log.x+1

access.log.0 –> access.log.1
cache.log.0 –> cache.log.1
store.log.0 –> store.log.1

access.log –> access.log.0
cache.log –> cache.log.0
store.log –> store.log.0

Il numero delle versioni dei file che vengono mantenute da squid dipende dal valore impostato per il parametro:

logfile_rotate 60

Nel caso specifico verranno conservate 60 copie dei log, che se ruotati ad ogni mese corrispondono a 5 anni di log.

Configurazioni Varie

Di default squid invia al sito visitato l’indirizzo reale della vostra macchina privata vedremo quindi:

X-Forwarded-For: 192.1.2.3

se volete nascondere il vostro IP privato dovete modificare questo parametro nel seguente modo:

forwarded_for off

Configurazione dei permessi

Se siete arrivati fino a questo punto avrete un sistema perfettamente funzionante dove tutti gli utenti in Active Directory possono accedere a qualunque sito, mentre tutti quelli che non sono autenticati non hanno accesso verso l’esterno.

Spesso nasce l’esigenze di consentire l’accesso ad alcuni siti web senza doversi autenticare e di bloccare in modo più o meno selettivo l’accesso ai siti, ad esempio potremmo voler consentire il download degli aggiornamenti di Windows o delle definizioni antivirus a tutti i pc.

Per far questo dobbiamo dapprima creare un file di testo con l’elenco dei siti liberi:

.windowsupdate.com
.windowsupdate.microsoft.com
update.microsoft.com
download.microsoft.com

e salviamolo come C:\squid\etc\URL_consentiti.txt, dopodichè modifichiamo il file di configurazione di squid per usare questa lista appena creata.

Alla fine delle direttive ACL aggiungiamo questa riga:

acl link-consentiti url_regex “c:/squid/etc/URL_consentiti.txt

in modo da creare una Access Control List chiamata URL_consentiti che contiene tutti gli URL presenti nel file, dopodichè aggiungiamo la riga:

http_access allow URL_consentiti

subito prima di quella che nega l’accesso agli utenti non autenticati (http_access deny !Authenticated).

Una volta riavviato Squid verificate che i link presenti nel file siano accessibili anche senza autenticazione.

Allo steso modo possiamo definire una lista di utenti che hanno accesso illimitato al web. Creiamo quindi un file contenente gli utenti con il dominio incluso:

dominio\utente1
dominio\utente2

dominio\utenten

e salviamolo come C:\squid\etc\Utenti_illimitati.txt e modifichiamo il file di configurazione di squid per carica questa ACL utilizzando la riga:

acl Utenti_illimitati proxy_auth “c:/squid/etc/Utenti_illimitati.txt”

infine consentiamo l’accesso a questa ACL:

http_access allow Utenti_illimitati

subito dopo la direttiva http_access inserita precedentemente.

Adesso possiamo creare una lista di siti che saranno bloccati per tutti gli utenti tranne per quelli inseriti nella lista Utenti_illimitati. Creiamo un nuovo file di testo chiamato C:\squid\etc\URL_bloccati.txt che conterrà l’elenco dei siti tipo:

.facebook.com
.youtube.com

creiamo la solita ACL con la riga:

acl URL_bloccati url_regex “c:/squid/etc/URL_bloccati.txt”

e infine neghiamo l’accesso a questa ACL con la riga:

http_access deny URL_bloccati

da inserire subito dopo la direttiva http_access inserita precedentemente.

Ad ogni modifica del file squid.conf va riavviato il servizio Squid.

Se volete creare delle liste di indirizzi consentiti per utente dovete creare un file contenete uno o più utenti e un file contenente i link consentiti per quell’utente/i.

Poi vanno create due ACL, una per gli utenti e una per i link:

acl Utente1 proxy_auth “c:/squid/etc/Utente1.txt”
acl Utente1_Link url_regex “c:/squid/etc/Utente1_Link.txt”

e inserite all’interno della stessa direttiva in modo da dover essere soddisfatte entrambe:

http_access allow Utente1 Utente1_Link

Note

Se installare Squid su una macchina dove è installato il servizio DNS molto probabilmente in seguito a un riavvio vi troverete nella situazione che Squid non riesce a partire perchè alcune porte sono giù state usate dal servizio DNS.

Le porte di default di Squid, non tutte abilitate, sono:

    • 3128 TCP
    • 3130 TCP
    • 3135 TCP
    • 4827 TCP

dobbiamo quindi provvedere a impostare un parametro nel Registry di Windows per configurarle come Reserverd in modo che il DNS non le usi.

      1. Avviare l’editor del Registro di sistema (Regedit.exe).
      2. Individuare e selezionare la seguente sottochiave del Registro di sistema: KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
      3. Scegliere nuovo dal menu Modifica, quindi Valore multistringa.
      4. Fare clic con il pulsante destro del mouse sul nuovo valore, fare clic su Rinomina, digitare ReservedPorts e quindi premere INVIO.
      5. Fare doppio clic sul valore ReservedPorts, digitare l’intervallo di porte che si desidera riservare e quindi fare clic su OK.
        Nota È necessario digitare l’intervallo di porte nel formato seguente:xxxx-yyyyPer specificare una singola porta, utilizzare lo stesso valore di x e y. Ad esempio, per specificare la porta 4000, digitare 4000-4000.
        Avviso Se si specificano le porte continue separatamente e se una porta è riservata e non utilizzata correttamente alla porta successiva non è riservata e viene utilizzato.
      6. Fare clic su OK.

La procedura è molto semplice ed è riportata nell’articolo:Come riservare un intervallo di porte effimere in un computer che esegue Windows Server 2003 o Windows 2000 Server

Conclusioni

In questa quida ho cercato di descrivere i passi fondamentali per mettere in piedi il proxy Squid agganciandolo ad Active Directory e con un controllo sugli accessi ad Internet molto semplice.

    Le possibilità di configurazione di Squid sono però pressocchè illimitate.

Per ulteriori approfondimenti potete consultare i seguenti link:

Parte 1

Potrebbero interessarti anche...

9 risposte

  1. Maurizio ha detto:

    Compliementi per la soluzione implementata, e per la chiarezza nella esposizione. Grazie
    Maurizio

  2. Salvatore ha detto:

    Ciao,
    Utilissima guida!
    Ho configurato come descritto (senza controllo AD, perché dovrà essere pubblico).
    Solo una cosa non mi funziona, il blocco dei siti / parole proibite. Come posso fare?
    Grazie,
    SB

  3. Andrea Sistarelli ha detto:

    Ciao Salvatore,
    da quello che mi hai detto posso solo dirti di verificare la configurazione, di più non riesco a dirti…

    Ciao
    Andrea

  4. Massimo ha detto:

    Ciao,

    senza l’autenticazione NTLM e NCSA non è possibile fare i gruppi di accesso? Ho pochi utenti che devono poter vedere youtube, agli altri invece lo blocco

    Grazie ancora

  5. Andrea Sistarelli ha detto:

    Se non autentichi gli utenti l’unico modo per far quello che ti serve a te è filtrare in base gli IP…

    Ciao
    Andrea

  6. Massimo ha detto:

    Sarebbe perfetto, sai dirmi come?

  7. Massimo ha detto:

    # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
    # REGOLA BASE
    # SPECIAL CLIENTS POSSONO ACCEDERE A TUTTI I SITI
    acl special_clients src “c:/squid/etc/special_client_ips.txt”
    acl bad_domains dstdomain “c:/squid/etc/bad_domains.txt”

    # YOUTUBE CLIENTS POSSONO ACCEDERE A YOUTUBE E AI SITI CONSENTITI
    acl youtube_clients src “c:/squid/etc/youtube_ips.txt”
    acl youtube_domains dstdomain “c:/squid/etc/youtube.txt”

    # SOCIAL CLIENTS POSSONO ACCEDERE A TUTTI I SITI SOCIAL
    acl social_clients src “c:/squid/etc/social_ips.txt”
    acl social_domains dstdomain “c:/squid/etc/social.txt”

    # REGOLE DI ALLOW e DENY
    http_access allow bad_domains special_clients
    http_access allow youtube_domains youtube_clients
    http_access allow social_domains social_clients
    http_access deny bad_domains
    http_access allow all

    Mi sono documentato e con queste regole posso filtrare per indirizzo IP (al posto che il nome a dominio), ho creato più liste perchè alcuni utenti possono vedere youtube ma non devono vedere facebook e twitter (social).

    La lista special_clients è per quegli utenti che devono poter bypassare le regole base e vedere tutti i siti

    Nel file xxxxx_ips.txt vanno inseriti gli indirizzi ip

    Nel file “c:/squid/etx/xxxxx.txt” vanno inseriti invece i siti da sbloccare preceduti dal punto tipo:

    .youtube.com

    .youtube.it

    Se posso vorrei usare la tua guida come base per un articolo (ovviamente citando la fonte) aggiungendo alcune cose.

    Grazie

  8. Andrea Sistarelli ha detto:

    Ciao Massimo,

    la procedura che hai indicato tu può andar bene ma l’ho volutamente omessa dall’articolo perchè oramai legare i diritti agli IP è diventato non più sufficiente, i miei clienti sono abituati ad usare diversi PC e a lavorare in Terminal Server, quindi l’unico modo è legare i permessi all’utente Windows e non all’IP.

    Nessun problema per l’articolo.

    Ciao
    Andrea

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.