Squid: il proxy open source multipiattaforma
La performance rientra ormai da tempo tra le proprietà più importanti di un buon sito. È dimostrato che tempi di caricamento lunghi portano i visitatori ad abbandonare in fretta la pagina senza aver avuto il tempo di verificarne la qualità dei contenuti. La velocità di caricamento di una pagina (Pagespeed) rientra già dal 2010 tra i fattori di ranking di Google, oltre che essere un elemento della user experience moderna. Di conseguenza i gestori di un sito dovrebbero confrontarsi con questo tema e ottimizzare la velocità del loro sito. Per fare ciò, si ha a disposizione la possibilità di comprimere le immagini, condensare o ottimizzare i file del codice, oltre che diminuire il numero delle richieste. Un altro modo di alleggerire il web server è l’utilizzo di un server reverse proxy, un componente software che svolge la funzione di interfaccia tra il browser e il web server, elaborando come sostituto le richieste del browser e consegnando autonomamente i contenuti memorizzati nella cache senza contattare il web server. Ciò è particolarmente efficace, se il server crea ogni volta una pagina dinamica nel CMS, ma senza che vi siano costantemente delle modifiche. Tra le soluzioni più diffuse per realizzare un proxy cache di questo tipo rientra il programma libero Squid.
Che cos’è Squid?
Squid è un software server proxy, rilasciato da Duane Wessels nel 1998 e nato dalla scissione del progetto “Harvest object cache“; parallelamente è stata messa a disposizione anche una versione commerciale con il nome di NetCache, di cui si è però sospeso ogni ulteriore sviluppo. Squid è rilasciato con licenza GNU General Public e supporta tra gli altri i protocolli HTTP, HTTP/2, HTTPS e FTP, oltre che funzionare sulla maggior parte dei sistemi operativi comuni, come le diverse distribuzioni di Linux, Mac OS X o Windows. Il proxy server è utilizzabile in modo classico tramite uno strumento a riga di comando o tramite un’interfaccia grafica come GAdmin- SQUID o SquidMan.
Migliaia di amministratori approfittano delle possibilità di caching del proxy open source: Wikipedia, ad esempio, ha utilizzato per anni più proxy Squid per la visualizzazione dei contenuti, per alleggerire il carico del database e del web server. Inoltre Squid può anche occuparsi della struttura delle connessioni SSL grazie al supporto dell’HTTPS e anche i diversi provider di tutto il mondo lo usano come proxy trasparente per garantire un’ottimizzazione dell’accesso ad Internet. Ovviamente potete utilizzare il software open source anche per gestire un forward proxy tradizionale per un singolo client, nascondere così il proprio indirizzo IP e ricevere una protezione aggiuntiva per il filtraggio dei pacchetti del firewall. Alternativamente Squid può filtrare anche i pacchetti in maniera autonoma con l’estensione SquidGuard.
Migliaia di amministratori approfittano delle possibilità di caching del proxy open source: Wikipedia, ad esempio, ha utilizzato per anni più proxy Squid per la visualizzazione dei contenuti, per alleggerire il carico del database e del web server. Inoltre Squid può anche occuparsi della struttura delle connessioni SSL grazie al supporto dell’HTTPS e anche i diversi provider di tutto il mondo lo usano come proxy trasparente per garantire un’ottimizzazione dell’accesso ad Internet. Ovviamente potete utilizzare il software open source anche per gestire un forward proxy tradizionale per un singolo client, nascondere così il proprio indirizzo IP e ricevere una protezione aggiuntiva per il filtraggio dei pacchetti del firewall. Alternativamente Squid può filtrare anche i pacchetti in maniera autonoma con l’estensione SquidGuard.
Perché dovreste utilizzare un server proxy Squid
Squid è sin dalla sua prima versione un prodotto open source, ragion per cui non ci sono costi di licenza e il codice sorgente è disponibile liberamente. Quindi non solo potete scaricare il software gratuitamente, ma potete anche adattarlo alle vostre esigenze. È però necessario solo raramente: l’esperienza decennale dei lavoratori del progetto Squid, che offrono assistenza su base volontaria e continuano a sviluppare il programma, emerge notevolmente nella varietà e nell’ottimizzazione della velocità offerte da Squid. Anche per uso privato, il software fa una buona impressione grazie a liste di controllo degli accessi (Access Control Lists), definibili autonomamente. Da una parte è possibile bloccare l’accesso a contenuti specifici o limitare la banda larga usufruibile, dall’altra potete analizzare i log del proxy impostato senza problemi per controllare il traffico dati. Una proprietà importante di Squid consiste inoltre nell’elevata flessibilità che risulta particolarmente utile nelle reti più grandi e complesse. Così è, ad esempio, possibile creare una rete di proxy cache, ricorrendo a più proxy Squid e distribuendo le richieste su di loro. Questa rete alleggerisce i singoli componenti e aumenta notevolmente la stabilità del server. Come in una Content Delivery Network, i singoli server reverse proxy si possono trovare in luoghi diversi.
Come funziona il caching del proxy
Le funzioni elencate di controllo e sicurezza sono indicative della versatilità di questo software open source. Prima di tutto, Squid convince per le sue funzioni principali di server proxy per la memorizzazione dei dati nella cache. Per assicurare che i dati rimangano sempre attuali e disponibili, Squid calcola regolarmente il suo stato, dove sono possibili due risultati: l’oggetto verificato può essere ancora attuale (fresh) o scaduto (stale). Per evitare di controllare sempre la stessa serie di dati, un algoritmo calcola la frequenza necessaria per la verifica di ogni singolo oggetto. Fanno parte della valutazione le seguenti informazioni:
LM | last modified; informazione dell’header che indica la data dell’ultima modifica effettuata |
---|---|
EX | expire; informazione dell’header che indica la data di scadenza di un oggetto |
NOW | La data corrente |
OBJ_Date | La data di memorizzazione nella cache di Squid e la data dell’ultima modifica effettuata |
MIN | Il tempo minimo di conservazione nella cache |
MAX | Il tempo massimo di conservazione nella cache |
PERCENT | Il fattore di conservazione |
Obj_Age | Descrive da quale momento un oggetto si trova nella cache (NOW - OBJ_Date) |
LM_Age | L’età di un oggetto al momento della memorizzazione nella cache (OBJ_Date - LM) |
LM_FACTOR | Fattore di età (Obj_Age / LM_Age) |
Un oggetto viene conservato nella cache fino al momento X. La formula corrispondente per il calcolo è:
X = OBJ_Date + (LM_Age * PERCENT)
L’algoritmo agisce nel modo seguente: il server proxy Squid controlla lo stato di un oggetto più frequentemente, se vengono apportate spesso delle modifiche a questo oggetto. Il primo momento di verifica è quindi indicato da MIN, che corrisponde alla conservazione minima assegnata nella cache. Successivamente, quando la data massima di conservazione MAX è stata raggiunta, Squid deve contattare comunque il web server. Per questo il software proxy invia una richiesta GET con l’informazione If-Modified-Since comprensiva di OBJ_DATE. Il server web verifica lo stato dell’oggetto e invia a seconda dei casi
- il codice di stato 304 (not modified), se l’oggetto non è stato modificato
- o il codice di stato 200 (OK) e risponde inviando il nuovo oggetto modificato.
Quali sono le esigenze hardware di Squid?
Se volete utilizzare un reverse proxy con Squid per il vostro web server, dovreste prima di tutto assicurarvi di disporre delle strutture hardware necessarie. Un proxy cache non richiede particolari prestazioni del processore, ma prevede solo le giuste dimensioni della RAM e del disco fisso. Entrambi i componenti sono oggi alla portata di tutti, perciò la scelta non ricade tanto sul prezzo, quanto piuttosto sulla giusta calcolazione. Quindi dovreste misurare attentamente le vostre esigenze sulla base del vostro progetto web e tenere in considerazione anche la potenziale crescita. Quando comprate l’hardware, affidatevi a componenti moderni come le memorie SSD, che si contraddistinguono per tempi di accesso veloci e consentono così la migliore ottimizzazione possibile della velocità.
Come funziona Squid: l’installazione
Generalmente ci sono due modi per installare il software Squid sul vostro sistema. La prima variante prevede che Squid si trovi nel gestore dei pacchetti della distribuzione che state utilizzando e in questo caso l’installazione del proxy avviene secondo lo schema conosciuto dalla riga di comando. Su Ubuntu il comando da dare è ad esempio:
sudo apt-get update
sudo apt-get install squid
Il secondo metodo di installazione è quello tramite download dei file di installazione, che decomprimete e compilate ugualmente secondo il modo classico (nell’esempio si tratta della versione 3.5.20):
tar xzf squid-3.5.20.tar.gz
cd squid-3.5.20
./configure
make
Con il comando:
make install
avviate l‘installazione. A partire dalla versione 3.5, per i sistemi Windows (a 64 bit) c’è un pacchetto di installazione MSI (non ufficiale) già pronto, che potete eseguire dopo il download con un doppio click sul file. Per ogni versione Stable rilasciata, si trovano anche le versioni beta e development, che comprendono nuove funzioni; entrambe le versioni servono però prima di tutto per testare queste funzionalità, perciò dovreste utilizzarle, solo se conoscete già bene Squid.
Come configurare il server proxy con Squid per rendere più veloce il sito
Nel file di configurazione squid.conf definite lo scopo del tipo di proxy Squid. Generalmente si trova in /etc o /usr/local/squid/etc/ o ancora nella cartella che avete scelto durante l’installazione. Esistono già diverse impostazioni predefinite che cominciano con una riga di commento, contrassegnata con il simbolo del cancelletto (#). Nei seguenti paragrafi abbiamo raccolto le opzioni più importanti di cui avete bisogno per configurare Squid.
Le opzioni di rete: # NETWORK OPTIONS
In questo campo configurate gli indirizzi IP e le porte che sono rilevanti per il funzionamento di Squid. Le seguenti voci sono importanti per il proxy cache: http_port Sintassi: http_port [nome host o indirizzo IP:]Numero della porta Descrizione: definisce la porta, su cui Squid ascolta le richieste HTTP dei client. Di default è inserita la porta 3128. Se viene stabilito anche il nome host e l’indirizzo IP, le impostazioni valgono per tutti gli indirizzi IP collegati. È possibile indicare anche più porte. Esempio: http_port 192.168.0.1:3128 https_port Sintassi: https_port [Indirizzo IP:]numero della porta cert=percorso per il certificato SSL [key=percorso per giungere alla chiave SSL privata] [options] Descrizione: l’indicazione della porta HTTPS è necessaria, se il proxy con Squid deve accettare sia connessioni SSL che TLS. L’indicazione del percorso sul certificato utilizzato (nel formato PEM) è obbligatorio. Se non inserite alcuna chiave SSL privata, Squid presuppone automaticamente che il file PEM comprenda già la chiave privata. Con il parametro options potete indicare opzioni aggiuntive basate sulla documentazione di OpenSSL. icp_port Sintassi: icp_port numero della porta Descrizione: qui indicate la porta tramite la quale Squid accetta le richieste ICP (Internet Cache Protocol) e riceve i pacchetti UDP. È necessaria indicarla solo se utilizzate più proxy, che devono comunicare tra di loro. La porta standard è la 3130; per attivare la funzione, potete inserire il parametro 0. Esempio: icp_port 3130
Opzioni di caching: # OPTIONS WHICH AFFECT THE CACHE SIZE
Tra le opzioni di caching stabilite se e quanta RAM viene richiesta dal vostro proxy Squid per scopi di caching o definite la grandezza minima e massima delle dimensioni dell’oggetto, oltre che il comportamento generale di caching.
cache_mem
Sintassi: cache_mem RAM in MB
Descrizione: con cache_mem determinate le dimensioni della memoria principale riservata per gli oggetti di passaggio (In-Transit Objects), gli oggetti più richiesti (Hot Objects) e quelli non più memorizzabili nella cache (Negative-Cached Objects). Visto che questi dati sono presenti in blocchi di 4 KB ciascuno, anche il valore inserito qui deve essere un multiplo di 4 KB. Non confondete questa opzione con la richiesta dello spazio necessario di Squid, che non viene regolata in questo modo.
Esempio: cache_mem 256 MB
maximum_object_size
Sintassi: maximum_object_size Dimensione dell’oggetto in KB/MB
Descrizione: questa voce informa Squid fino a quale dimensione possono essere salvati gli oggetti nella cache. Stabilite il limite minimo delle dimensioni con il parametro minimum_object_size.
Esempio: maximum_object_size 4 MB
cache_mem
Sintassi: cache_mem RAM in MB
Descrizione: con cache_mem determinate le dimensioni della memoria principale riservata per gli oggetti di passaggio (In-Transit Objects), gli oggetti più richiesti (Hot Objects) e quelli non più memorizzabili nella cache (Negative-Cached Objects). Visto che questi dati sono presenti in blocchi di 4 KB ciascuno, anche il valore inserito qui deve essere un multiplo di 4 KB. Non confondete questa opzione con la richiesta dello spazio necessario di Squid, che non viene regolata in questo modo.
Esempio: cache_mem 256 MB
maximum_object_size
Sintassi: maximum_object_size Dimensione dell’oggetto in KB/MB
Descrizione: questa voce informa Squid fino a quale dimensione possono essere salvati gli oggetti nella cache. Stabilite il limite minimo delle dimensioni con il parametro minimum_object_size.
Esempio: maximum_object_size 4 MB
Indicazioni della cartella di caching e dei file di log: # LOGFILE PATHNAMES AND CACHE DIRECTORIES
Oltre a indicazioni sulle porte e il comportamento di caching, il server Squid ha bisogno di informazioni su quale cartella deve memorizzare temporaneamente i contenuti e i file di log generati.
cache_dir
Sintassi: cache_dir tipo di cartella percorso della cartella spazio occupato numero delle cartelle
Descrizione: con cache_dir decidete la cartella di caching e la capacità di memoria massima in megabyte, oltre che il numero delle cartelle e delle sottocartelle. Il tipo di cartella installato di base è ufs. Generalmente quest’opzione è disattivata e bisogna perciò attivarla.
Esempio: cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256
cache_log
Sintassi: cache_log Percorso del file
Descrizione: stabilisce il luogo di memorizzazione del file di log del vostro server proxy Squid, che registra le informazioni generali sul comportamento del software.
Esempio: cache_log /usr/local/squid/var/logs/cache.log
cache_dir
Sintassi: cache_dir tipo di cartella percorso della cartella spazio occupato numero delle cartelle
Descrizione: con cache_dir decidete la cartella di caching e la capacità di memoria massima in megabyte, oltre che il numero delle cartelle e delle sottocartelle. Il tipo di cartella installato di base è ufs. Generalmente quest’opzione è disattivata e bisogna perciò attivarla.
Esempio: cache_dir ufs /usr/local/squid/var/cache/squid 100 16 256
cache_log
Sintassi: cache_log Percorso del file
Descrizione: stabilisce il luogo di memorizzazione del file di log del vostro server proxy Squid, che registra le informazioni generali sul comportamento del software.
Esempio: cache_log /usr/local/squid/var/logs/cache.log
Opzioni di accesso: # ACCESS CONTROLS
Infine, vi servono per le porte utilizzate da Squid liste di controllo degli accessi chiaramente definite. Qui sono decisivi specialmente i seguenti due parametri: acl Sintassi: acl nome della lista tipo di lista tema Descrizione: qui avete la possibilità di creare una lista di controllo degli accessi dettagliata per tutte le connessioni HTTP, ICP e TCP. Per una precisa panoramica sui tipi e le opzioni, si consiglia di dare un’occhiata al manuale ufficiale online. Esempio: acl all src 0.0.0.0 http_access Sintassi: http_acess allow|deny [!]nome della lista Descrizione: autorizza (allow) o vieta (deny) l’accesso alla porta HTTP sulla base delle liste di controllo degli accessi impostate. Anteponendo il punto esclamativo, l’assegnazione è valida per tutte le connessioni che non appartengono alla lista in questione. Esempio: htttp_access deny !SSL_ports