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

Scrivo questa guida perché sempre più spesso nelle aziende nasce l’esigenza di monitorare ed eventualmente filtrare il traffico internet dei dipendenti.

Ci sono diversi software con cui implementare un server proxy, alcuni commerciali e alcuni gratuiti. In questa guida vedremo come implementare un server proxy in ambiente Windows completamente integrato in Active Directory a costo zero.

Il prodotto in questione è Squid (http://www.squid-cache.org/), originariamente nato per l’ambiente Linux è disponibile anche il porting su piattaforma Windows.

L’integrazione con Active Directory è possibile se lo installiamo su una macchina sia Linux che Windows, in ambiente Linux la configurazione per l’autenticazione in AD è leggermente più complessa di quella in ambiente Windows.

Squid può essere installato in qualunque macchina della nostra rete non necessariamente con due schede di rete, nel qual caso dovrà fare anche da gateway.

Come prima cosa dobbiamo scaricare Squid dal sito http://squid.acmeconsulting.it/index.html, seguiamo le indicazioni per Squid 2.7 per Windows -> Squid Download Page -> mirror 1/mirror 2 -> e qui scarichiamo l’ultima versione Stabile, al momento è la 2.7.STABLE8.

Una volta completato il download scompattiamo il file .zip nel percorso c:\squid. Copiamo questi tre file nel percorso c:\squid\etc:

  • squid.conf.default ==> squid.conf
  • mime.conf.default ==> mime.conf
  • cachemgr.conf.default ==> cachemgr.conf

Apriamo il file squid.conf e apportiamo alcune modifiche necessarie per il primo avvio:

  • Sezione OPTIONS FOR AUTHENTICATION
    • Togliamo il commento su queste tre righe e completiamo la prima in modo da avere:

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

      Questi parametri indicano a squid di usare l’autenticazione NTLM, di usare il programma mswin_ntlm_auth.exe per eseguire l’autenticazione e di usare 5 processi contemporanei per l’autenticazione.

  • Sezione ACCESS CONTROLS
    • Di default Squid concede l’accesso dalle reti locali che hanno indirizzi ip privati delle 3 classi standard, se la nostra rete non rientra in queste dobbiamo aggiungerla a queste 3 righe:

      acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
      acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
      acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
    • Nella configurazione base Squid concede l’accesso esclusivamente alle seguenti porte:

      acl SSL_ports port 443
      acl Safe_ports port 80  # http
      acl Safe_ports port 21  # ftp
      acl Safe_ports port 443  # https
      acl Safe_ports port 70  # gopher
      acl Safe_ports port 210  # wais
      acl Safe_ports port 1025-65535 # unregistered ports
      acl Safe_ports port 280  # http-mgmt
      acl Safe_ports port 488  # gss-http
      acl Safe_ports port 591  # filemaker
      acl Safe_ports port 777  # multiling http

      Anche qui se abbiamo altre esigenze dobbiamo aggiungere le porte che vogliano possano essere raggiunte.
    • Subito dopo l’ultima ACL dobbiamo inserirne una per verificare l’autenticazione in Active Directory:

      acl Authenticated proxy_auth REQUIRED

      e impostare una regola di accesso per negare tutte le sessioni non autenticate:

      http_access deny !Authenticated


      da inserire subito dopo la riga:

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

  • Sezione DISK CACHE OPTIONS
    • In questa sezione dobbiamo impostare i parametri di configurazione della cache su disco, per far questo togliamo il commento alla riga:

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

      e modifichiamo i parametri secondo le nostre necessità.
      Tenendo conto che i tre parametri hanno questo significato:
          100 = Dimensione massima in MB della cache su disco
            16 = Numero di sottodirectory di 1° livello
          256 = Numero di sottodirectory di 2° livello
      Inizialmente possiamo lasciare al valore di default questi 3 parametri.
  • Sezione LOGFILE OPTIONS
    • In questa sezione definiamo il percorso e il tipo del file di log degli accessi che viene generato da Squid.
      Il percorso viene definito dalla seguente direttiva:

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

      mentre il tipo viene definito dalla riga:

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

      in questo caso definiamo un formato di log chiamato squid e lo usiamo nel comando access_log.
  • Sezione ADMINISTRATIVE PARAMETERS
    • In caso di errore o di accesso a un sito non autorizzato Squid visualizza una pagina con i dettagli indicando anche un indirizzo e-mal dell’amministratore di sistema. A tal proposito possiamo modificare questo indirizzo tramite la direttiva seguente:

      cache_mgr <indirizzo_email>
  • Sezione ERROR PAGE OPTIONS
    • L’ultimo parametro da modificare è la lingua in cui vogliamo vengano visualizzate le pagine di errore, per far questo usiamo questa direttiva:

      error_directory c:/squid/share/errors/English

      dove al posto di English inseriamo il nome della directory che rispecchia la lingua che vogliamo utilizzare all’interno della cartella c:/squid/share/errors, nel caso della lingua Italiana abbiamo:

      error_directory c:/squid/share/errors/Italian

A questo punto la configurazione di base di Squid è terminata e possiamo mandarlo in esecuzione per la prima volta. Apriamo un quadro dos, posizioniamoci nella directory c:\squid\sbin e lanciamo il comando:

squid -z

in modo da creare le directory della cache. Se non abbiamo commesso errori nel file di configurazione dovremmo vedere qualcosa del tipo:

C:\squid\sbin>squid -z
2010/04/24 11:33:24| Creating Swap Directories

che ci segnala che la creazione delle directory è stata eseguita con successo, altrimenti vedremo qualcosa del tipo:

C:\squid\sbin>squid -z
2010/04/24 11:41:28| parseConfigFile: squid.conf:4257 unrecognized: 'error_directoryxxx'
2010/04/24 11:41:28| Creating Swap Directories

nel qual caso abbiamo commesso qualche errore di sintassi. (In questo caso era voluto!!).

NOTA: Se installiamo squid nella directory di default c:\squid non dobbiamo mai specificare il percorso del file di configurazione, se invece usiamo un percorso diverso è necessaroio modificare tutti i riferimenti all’interno del file squid.conf e usare il parametro -f configfile ogni volta che lanciamo il comando squid.exe.

Ora possiamo installare Squid come servizio e iniziare a testarlo. Per far questo lanciamo il comando:

C:\squid\sbin>squid -i
Registry stored HKLM\SOFTWARE\GNU\Squid\2.6\Squid\ConfigFile value c:/squid/etc/squid.conf
Squid Cache version 2.7.STABLE8 for i686-pc-winnt
installed successfully as Squid Windows System Service.
To run, start it from the Services Applet of Control Panel.
Don't forget to edit squid.conf before starting it.

Se tutto è andato a buon fine sarà creato il servizio Squid. Se vogliamo chiamarlo in modo diverso dobbiamo aggiungere il parametro -n servicename.

Una volta creato il servizio dobbiamo avviarlo con il comando:

net start Squid

e dovremo ricevere come output:

The Squid service is starting.
The Squid service was started successfully.

Verifichiamo che Squid sia effettivamente in ascolto tramite il commando:

C:\squid\sbin>netstat -na | findstr :3128
  TCP    0.0.0.0:3128           0.0.0.0:0              LISTENING

Come si vede chiaramente squid è in ascolto sulla porta di default 3128.

Apriamo Internet Explorer in un client e configurazione le impostazioni del proxy tramite il menù Tools  > Internet Options -> Connections -> LAN Settings e impostiamo il proxy server come evidenziato in figura:

sostituendo l’indirizzo e la porta del server con quelli della nostra configurazione.

Torniamo al browser e proviamo a raggiungere un sito qualunque, se tutto funziona correttamente dovrebbe  visualizzarsi la pagina senza alcun problema.

Per verificare l’utilizzo effettivo del proxy, possiamo usare uno dei vari test online del tipo (http://www.lagado.com/proxy-test) oppure verificare il file access.log nella cartella C:\squid\var\logs.

Se invece appare una finestra del tipo:

che ci chiede le credenziali di accesso significa che il proxy sta funzionando ma c’è qualche problema con l’autenticazione NTLM.

In questo caso dobbiamo modificare il livello di autenticazione LAN Manager nel valore:
Send LM & NTLM – use NTLMv2 session security if negotiated

Per semplicità possiamo modificare la Default Domain Policy così da configurare tutte le macchine nel Dominio. L’impostazione si trova all’interno della chiave:
Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Local Policies -> Security Options -> Network security: LAN Manager authentication level

Una volta apportata la modifica aspettiamo che la policy venga applicata o forziamola con il comando GPUPDATE /force, dopodiché riproviamo e se tutto è andato bene questa volta la richiesta di username e password non dovrebbe comparire.

Con le procedure fin qui indicate la configurazione base di Squid è terminata, l’accesso è consentito a tutti per qualunque sito e un log viene generato ad ogni accesso.

Nella prossima parte vedremo alcuni parametri per l’ottimizzazione di Squid e come configurare l’impostazioni del proxy in automatico nel browser.

Parte 2

18 risposte a “Installazione del proxy server Squid in ambiente Windows – Parte 1/2”

  1. Hai verificato che le righe:

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

    non siano commentate e il percorso del file mswin_ntlm_auth.exe sia corretto?

    Ciao

  2. Salve e grazie per la tua puntuale lezione.
    Vorrei chiederti se risulta possibile bypassare l’autenticazione via AD (NTLM), creando in alternativa un database utenti da distribuire agli interessati.
    Inoltre se possiamo personalizzare le pagine di risposta a seguito di un errore HTTP.
    Grazie 1000
    Gianni

  3. Puoi utilizzare l’autenticazione ncsa e inserire utenti e password in un file.
    Modifica il file squid.conf in modo da impostare queste direttive:

    auth_param basic program c:/squid/libexec/ncsa_auth.exe c:/squid/etc/passwd
    auth_param basic children 5
    auth_param basic realm Squid proxy-caching web server
    auth_param basic credentialsttl 2 hours
    auth_param basic casesensitive off

    e tramite htpasswd crea il file c:/squid/etc/passwd con dentro gli utenti e le password.
    Poi crea una acl del tipo:

    acl Authenticated proxy_auth REQUIRED

    e infine configura una regola http così:

    http_access deny !Authenticated

    Per generare il file htpassws puoi usare questo tool online http://www.htaccesstools.com/htpasswd-generator/

    Nella directory C:\squid\share\errors\English trovi tutte le pagine che vengono usate come pagine di errori che puoi personalizzare.

    Ciao

  4. Ciao,

    ottima guida, due cose:

    – il comando giusto è gpupdate /force (ti è scappata una p)

    – se volessi togliere l’autenticazione NTLM tramite AD e far collegare chiunque come posso fare?

    Continua a uscire la richiesta di user e password anche dopo aver modificato Network security: LAN Manager authentication level

    Grazie

  5. Ciao Massimo,

    grazie per la segnalazione dell’errore 🙂

    Se ho capito bene la tua domanda devi abilitare l’autenticazione ncsa. Leggi un mio commento poco sopra.

    Ciao
    Andrea

  6. Io vorrei proprio toglierla, invece con ncsa devo comunque compilare un file con utenti e password (ho circa 200 client) adesso sto usando Zentyal come proxy ma dopo 1 anno comincia a dare qualche problema.

  7. Quindi non vuoi nessun tipo di autenticazione?
    Se è così non abilitare ne ncsa ne ntlm e tramite la direttiva http_access non richiedere l’autenticazione.

Lascia un commento

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