Wiki Ubuntu-it

Indice
Partecipa
FAQ
Wiki Blog
------------------
Ubuntu-it.org
Forum
Chiedi
Chat
Cerca
Planet
  • Pagina non alterabile
  • Informazioni
  • Allegati
  • Differenze per "Server/Proxy"
Differenze tra le versioni 1 e 16 (in 15 versioni)
Versione 1 del 06/04/2007 20.19.00
Dimensione: 13488
Commento: creata pagina portale server
Versione 16 del 28/04/2024 16.32.24
Dimensione: 13048
Autore: garakkio
Commento: revisione
Le cancellazioni sono segnalate in questo modo. Le aggiunte sono segnalate in questo modo.
Linea 1: Linea 1:
## page was renamed from Server/ProxyServer
Linea 2: Linea 3:
[[BR]]
||<tablestyle="float:right; font-size: 0.9em; width:50%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Indice'''[[BR]][[TableOfContents]]||
<<BR>>
<<Indice>>

= Introduzione =

Un server ''proxy'' all'interno di una rete ha la fondamentale funzione di controllare i processi di autenticazione degli utenti durante i loro accessi ad Internet.

Per poter fare ciò è necessario configurare ogni client in modo che nel momento in cui tenta di connettersi ad internet passi per il nodo che funge da server proxy, il quale dovrà a sua volta richiedere l'autenticazione dell'utente e del client e controllare le credenziali di accesso fornite e la loro rispondenza ai criteri stabiliti dal server proxy.

Il proxy server è pertanto un controllore centrale delle credenziali di accesso ad un sistema che opera con ACL sia a livello utente che a livello host , nonché selezionando siti e percorsi di ricerca da accettare o scartare.

Una volta ottenuta la convalida dell'autenticazione, ciascun client ha accesso al servizio fornito dal proxy server, in questo caso l'accesso alle pagine internet.

Tali pagine richieste dai client vengono risolte nel primo accesso direttamente dal server proxy e poi ogni successiva richiesta della stessa pagina da parte di un client verrà evasa usando l'informazione che il proxy ha nella sua memoria cache.

Ritorna il principio di località dell'informazione in base al quale la minimizzazione dei temnpi di accesso ad una determinata informazione è garantito dall'uso di una memoria locale e volatile ad accesso molto rapido.
Linea 7: Linea 22:
Prima di cominciare vale la pena di spendere due parole sui requisiti di proxy server. Prima di cominciare, come prerequisito, è necessario:
 * Pianificare un corretto partizionamento del disco
 * Dedicare, se possibile, una partizione apposita per {{{/var/log}}} ed una specifica per {{{/var/cache/squid}}}
Linea 9: Linea 26:
Prendetevi il tempo necessario per pianificare un corretto partizionamento del disco.

Possibilmente dedicate una partizione apposita per {{{/var/log}}} ed una specifica per {{{/var/cache/squid}}}.

= Che cos'è un server Proxy e come funziona =

Un server ''proxy'' all'interno di una rete ha la fondamentale funzione di controllare i processi di autenticazione degli utenti durante i loro accessi ad Internet.

Per poter fare ciò è necessario configurare ogni client in modo che nel momento in cui tenta di connettersi ad internet passi per il nodo che funge da server proxy , il quale dovrà a sua volta richiedere l'autenticazione dell'utente e del client e controllare le credenziali di accesso fornite e la loro rispondenza ai criteri stabiliti dal server proxy.

Il proxy server è pertanto un controllore centrale delle credenziali di accesso ad un sistema che opera con ACL sia a livello utente che a livello host , nonchè selezionando siti e percorsi di ricerca da accettare o scartare.

Ovviamente una volta ottenuta la convalida dell'autenticazione ciascun client ha accesso al servizio fornito dal proxy server , nel nostro caso l'accesso alle pagine internet.

Tali pagine richieste dai clients vengono risolte nel primo accesso direttamente dal server proxy e poi ogni successiva richiesta della stessa pagina da parte di un client verrà evasa usando l'informazione che il proxy ha nella sua memoria cache...

Ritorna come vedete il principio di località dell'informazione in base al quale la minimizzazione dei temnpi di accesso ad una determinata informazione è garantito dall'uso di una memoria locale e volatile ad accesso molto rapido.
 
Linea 29: Linea 28:
Per installare il vostro server proxy aprite una shell ed al prompt dei comandi digitate {{{
#sudo apt-get -y install squid
Per installare il server proxy aprire una shell e digitare {{{
sudo apt-get -y install squid
Linea 35: Linea 34:
La directory di configurazione del server proxy è {{{/etc/squid}}} ed il file è ''squid..conf''. = Configurazione =
Linea 37: Linea 36:
I log files sono contenuti all'interno della directory {{{/var/log/squid}}} e contengono informazioni sugli accessi e sugli hit o miss di ogni pagina (ovvero sull'efficienza del vostro server proxy). La directory di configurazione del server proxy è {{{/etc/squid}}} ed il file è `squid.conf`.
Linea 39: Linea 38:
A tal proposito occorre precisare che il tasso di hit riflette l'efficienza del vostro server proxy poichè tanto più alto è il numero di pagine richieste dai clients e trovate nella memoria cache del sevrer proxy tanto minore sarà il numero di richieste che il server proxy stesso dovrà fare per ottenere tali pagine. I file di log sono contenuti all'interno della directory {{{/var/log/squid}}} e contengono informazioni sugli accessi e sugli ''hit'' o ''miss'' di ogni pagina (ovvero sull'efficienza del proprio server proxy).
Linea 41: Linea 40:
Ovviamente tale fattore di effiecienza dipende sia dalle dimensioni della cache che dal tipo di richieste dei clients e solitamente anche dal tempo trascorso dalla fine del setup del proxy server. A tal proposito occorre precisare che il tasso di ''hit'' riflette l'efficienza del server proxy poiché tanto più alto è il numero di pagine richieste dai client e trovate nella memoria cache del sevrer proxy tanto minore sarà il numero di richieste che il server proxy stesso dovrà fare per ottenere tali pagine.
Linea 43: Linea 42:
= Configurazione del server proxy = Tale fattore di efficienza dipende sia dalle dimensioni della cache che dal tipo di richieste dei client e solitamente anche dal tempo trascorso dalla fine del setup del proxy server.
Linea 45: Linea 44:
Come detto il file per la configurazione del servizio proxy è ''/etc/squid/squid.conf'' Come detto il file per la configurazione del servizio proxy è `/etc/squid/squid.conf`. Adesso si vedrà nel dettaglio cosa bisogna modificare per ottenere un proxy perfettamente funzionante.
Linea 47: Linea 46:
Vediamo in dettaglio cosa dovete modificare per ottenere un proxy perfettamente funzionante.

Innanzitutto dovete specificare indirizzo IP e la porta su cui il vostro sevrer proxy sarà in ascolto attraverso la direttiva : {{{
Innanzitutto, è necessario specificare l'indirizzo IP e la porta su cui il sevrer proxy sarà in ascolto attraverso la direttiva : {{{
Linea 51: Linea 48:
}}}

In questo esempio il vostro proxy è in ascolto sull'IP 192.168.20.101 e sulla porta 3128.
Badate bene di configurare tale IP e porta su tutti i clients che dovranno usufruire del servizio proxy.
}}} 
In questo esempio è in ascolto sull'IP 192.168.20.101 e sulla porta 3128. Bisogna configurare l'IP e la porta su tutti i client che dovranno usufruire del servizio proxy.
Linea 58: Linea 53:
}}} }}}
Nell'esempio, il valore predefinito è 8MB. È possibile modificarlo in base alle dimensioni della propria RAM.
Linea 60: Linea 56:
nel nostro esempio (e valore di default) è 8MB ma modificatelo pure in base alle dimesioni della vostra RAM (tenete conto che un server dedicato può arrivare tranquillamente a 256 o 512 MB). {{{#!wiki note
Un server dedicato può arrivare tranquillamente a 256 o 512 MiB.}}}
Linea 62: Linea 59:
Il valore di questo parametro dipende dalle dimensioni degli oggetti che il proxy deve memorizzare e dal numero di questi ultimi .

Ad esempio se avete 1000 clients che richiedono ciascuno una pagina diversa delle dimesioni medie di 500KB vi servono 500*1000=500MB di cache!!

Ovviamente
questo è un caso limite ma vi aiuta a capire come determinare con semplici conti la quantità di cache necessaria.
Il valore di questo parametro dipende dalle dimensioni degli oggetti che il proxy deve memorizzare e dal numero di questi ultimi. Ad esempio, se si hanno 1000 client che richiedono ciascuno una pagina diversa delle dimensioni medie di 500KB servono 500*1000=500MB di cache!! Questo è un caso limite, ma aiuta a capire come determinare con semplici conti la quantità di cache necessaria.
Linea 70: Linea 63:
 * maximum_object_size: gli oggetti con dimensioni maggiori di quelle riportate non vengono scritti su disco (ovvero non sono sottospoti a swapping)
 * minimum_object_size: gli oggetti con dimensioni minori di quelle riportate non vengono scritti su disco (ovvero non sono sottospoti a swapping)
 * maximum_object_size_in_memory: gli oggetti con dimensioni maggiori di quelle riportate non vengono mantenuti nella memoria cache (cioè vengono scartati)
 * `maximum_object_size`: gli oggetti con dimensioni maggiori di quelle riportate non vengono scritti su disco (ovvero non sono sottoposti a swapping)
 * `minimum_object_size`: gli oggetti con dimensioni minori di quelle riportate non vengono scritti su disco (ovvero non sono sottoposti a swapping)
 * `maximum_object_size_in_memory`: gli oggetti con dimensioni maggiori di quelle riportate non vengono mantenuti nella memoria cache (cioè vengono scartati)
Linea 74: Linea 67:
E' evidente che l'ultimo parametro deve essere abbastanza alto da permettere che il più grande oggetto richiesto dai clients da voi serviti sia mantenuto nella cache , e pertanto tale valore dipende dalla "qualità" delle richieste dei vostri clients (ovvero dal tipo di pagine ed oggetti richiesti). E' evidente che l'ultimo parametro deve essere abbastanza alto da permettere che il più grande oggetto richiesto dai client serviti sia mantenuto nella cache, e pertanto tale valore dipende dalla "qualità" delle richieste dei client (ovvero dal tipo di pagine ed oggetti richiesti).
Linea 76: Linea 69:
I parametri che seguono riguardano il tipo di algoritmi usati per la gestione della memoria cache e della RAM da parte del vostro proxy :
 * cache_replacement_policy lru: significa che il proxy rimpiazzerà gli oggetti nella cache usati meno di recente (least recently used algorithm)
 * memory_replacement_policy lru: significa che il proxy rimpiazzerà gli oggetti nella memoria usati meno di recente (least recently used algorithm)

Generalmente non dovete modificare questi parametri che sono impostati per default.
I parametri che seguono riguardano il tipo di algoritmi usati per la gestione della memoria cache e della RAM da parte del proxy :
 * `cache_replacement_policy lru`: significa che il proxy rimpiazzerà gli oggetti nella cache usati meno di recente (least recently used algorithm)
 * `memory_replacement_policy lru`: significa che il proxy rimpiazzerà gli oggetti nella memoria usati meno di recente (least recently used algorithm)
Generalmente questi parametri sono impostati in modo predefinito.
Linea 82: Linea 74:
La direttiva successiva riguarda la directory su disco da usare come are di caching delle richieste degli oggetti pervenute al proxy dai clients: {{{ La direttiva successiva riguarda la directory su disco da usare come area di caching delle richieste degli oggetti pervenute al proxy dai client: {{{
Linea 85: Linea 77:
La directory è di tipo '''ufs''' (il tipo di filesystem usato per il caching dei documenti richiesti) e `/var/spool/squid` ed i parametri specificati di seguito sono:
 * `80000`: è la dimensione massima che questa directory può raggiungere prima che venga applicato l'algoritmo `lru` per lo svuotamento della cache stessa;
 * `16`: è il numero di sotto cartelle di primo livello create di default dal server proxy in {{{/var/spool/squid}}};
 * `256`: è il numero di sotto cartelle di secondo livello create di default dal server proxy in {{{/var/spool/squid}}}
Linea 86: Linea 82:
come si vede la directory è di tipo '''ufs''' (il tipo di filesystem usato per il caching dei documenti richiesti) è {{{/var/spool/squid}}} ed i parametri specificati di seguito sono : In generale, si potrebbe voler specificare una diversa cartella per il caching delle pagine squid (soprattutto se avete predisposto una partizione dedicata a ciò in fase di preparazione del sistema) ed un diverso valore della massima dimensione della memoria cache.
Linea 88: Linea 84:
 * '''80000''' : è la dimesnione max. che questa dir può raggiungere prima che venga applicato l'algoritmo '''lru''' per lo svuotamento della cache stessa I parametri successivi riguardano i file di log e sono :
 * `cache_access_log` in `/var/log/squid/access.log`: specifica il file contenente i log degli accessi (le richieste di oggetti pervenute al proxy)
 * `cache_log` in `/var/log/squid/cache.log`: specifica il file di log che vi dice come si sta comportando il vostro server proxy (tasso di hit e miss delle pagine richieste)
 * `cache_store_log` in `/var/log/squid/store.log`: specifica il log file che mostra dove e come sono gestiti gli oggetti nella cache
Linea 90: Linea 89:
 * '''16''' : è il numero di sottodirectories di primo livello create di default dal server proxy in {{{/var/spool/squid}}} Il parametro successivo è:
 * `dns_nameservers 192.168.20.101`: questo specifica l'IP del DNS cui devono essere girate le query DNS per la localizzazione degli host che posseggono le pagine richieste.
Linea 92: Linea 92:
 * '''256''' : è il numero di sottodirectories di secondo livello create di default dal server proxy in {{{/var/spool/squid}}}

In generale potreste voler specificare una diversa directory per il caching delle pagine squid (soprattutto se avete predisposto una partizione dedicata a ciò in fase di preparazione del sistema) ed un diverso valore della max dimensione della memoria cache.


I parametri successivi riguardano i log files e sono :
 * cache_access_log in /var/log/squid/access.log: specifica il file contenente i log degli accessi (le richieste di oggetti pervenute al proxy)
 * cache_log in /var/log/squid/cache.log: specifica il file di log che vi dice come si sta comportando il vostro server proxy (tasso di hit e miss delle pagine richieste)
 * cache_store_log in /var/log/squid/store.log: specifica il log file che mostra dove e come sono gestiti gli oggetti nella cache

Il parametro successivo è :
 * dns_nameservers 192.168.20.101: questo specifica l'IP del DNS cui devono essere girate le queries DNS per la localizzazione degli hosts che possegono le pagine richieste.

E' evidente che il server proxy lavorerà a stretto contatto con un DNS, pertanto non sarebbe una cattiva idea implementare un caching DNS interno per velocizzare la risoluzione DNS.
È evidente che il server proxy lavorerà a stretto contatto con un DNS, pertanto non sarebbe una cattiva idea implementare un caching DNS interno per velocizzare la risoluzione DNS.
Linea 109: Linea 96:
A questo punto viene la parte fondamentale ovvero quella in cui vengono definite le liste di controllo degli accessi in base alle quali il vostro proxy selezionerà gli utenti ed i clients che possono accedere ai servizi offerti dal proxy stesso. A questo punto viene la parte fondamentale ovvero quella in cui vengono definite le liste di controllo degli accessi in base alle quali il proxy selezionerà gli utenti ed i client che possono accedere ai servizi offerti dal proxy stesso.
Linea 111: Linea 98:
La sezione fondamentale a riguardo è '''auth_param'''. La sezione fondamentale al riguardo è `auth_param`.
Linea 113: Linea 100:
Poichè il nostro proposito è quello di configurare un proxy server le cui ACL siano definite in rapporto ad un backend LDAP , è necessario specificare il gruppo di utenti che saranno assoggetati ad autenticazione e l'eseguibile che dovrà interrogare il DB LDAP per convalidare le credenziali di accesso fornite. Poiché il nostro proposito è quello di configurare un proxy server le cui ACL siano definite in rapporto ad un backend LDAP , è necessario specificare il gruppo di utenti che saranno assoggettati ad autenticazione e l'eseguibile che dovrà interrogare il DB LDAP per convalidare le credenziali di accesso fornite.
Linea 115: Linea 102:
I parametri da specificare sono: {{{ I parametri da specificare sono:

 *
{{{
Linea 117: Linea 106:
}}}
questo dice al server proxy di usare il programma '''squid_ldap_group''' per autenticare tutti gli utenti LDAP del dominio base '''dc=example,dc=com''' (cambiatelo con il vostro)

{{{
}}} questo dice al server proxy di usare il programma `squid_ldap_group` per autenticare tutti gli utenti LDAP del dominio base `dc=example,dc=com` (cambiatelo con il vostro)
 * {{{
Linea 122: Linea 109:
}}}
questo dice che il numero di sottoprocessi di autenticazione allo startup del server proxy deve essere 5

{{{
}}} questo dice che il numero di sottoprocessi di autenticazione allo startup del server proxy deve essere 5
 * {{{
Linea 127: Linea 112:
}}}
questo vi dice che dopo 2 ore le credenziali di accesso dovranno essere reinserite perchè il vostro proxy le richiederà

{{{
}}} questo vi dice che dopo 2 ore le credenziali di accesso dovranno essere reinserite perchè il vostro proxy le richiederà  
 * {{{
Linea 132: Linea 115:
}}}
questo dice che il vostro proxy è '''case-sensitive''' ovvero che distingue fra maiuscole e minuscole sia per username che per password immesse dagli utenti

dopo aver dettoi
al proxy che dovrà usare il modulo LDAP per l'autenticazione degli utenti che gli si presenteranno si passa alla definizione delle liste di controllo di accesso al servizio come segue: {{{
}}} questo dice che il vostro proxy è ''case-sensitive'' ovvero che distingue fra maiuscole e minuscole sia per username che per password immesse dagli utenti.
 * Dopo aver detto al proxy che dovrà usare il modulo LDAP per l'autenticazione degli utenti che gli si presenteranno si passa alla definizione delle liste di controllo di accesso al servizio come segue: {{{
Linea 137: Linea 118:
}}}
questo dice che il gruppo di utenti '''example''' può accedere al servizio solo se autorizzato (richiesta di credenziali di accesso username e password da confrontare con quelle dei corrispondenti utenti LDAP). Questo parametro identifica un meccanismo di sicurezza basato sul controllo utenti.

{{{
}}} questo dice che il gruppo di utenti `example` può accedere al servizio solo se autorizzato (richiesta di credenziali di accesso username e password da confrontare con quelle dei corrispondenti utenti LDAP). Questo parametro identifica un meccanismo di sicurezza basato sul controllo utenti.
 * {{{
Linea 142: Linea 121:
}}}
questo dice che soltanto i clients della sottorete 192.168.20.0/24 possono usufruire del servizio proxy (cioè una macchina con IP 10.0.0.1 non potrà usare il servizio proxy neanche in caso di utente autorizzato).Questo parametro identifica un meccanismo di sicurezza basato sul controllo dei clients.

{{{
}}} questo dice che soltanto i clients della sottorete 192.168.20.0/24 possono usufruire del servizio proxy (cioè una macchina con IP 10.0.0.1 non potrà usare il servizio proxy neanche in caso di utente autorizzato). Questo parametro identifica un meccanismo di sicurezza basato sul controllo dei clients.
 * {{{
Linea 147: Linea 124:
}}}
questo parametro configura una lista dei controllo accessi per tutti gli oggetti appartenenti al dominio '''.hotmail.com''' (cioè tutti gli oggetti in esso inclusi)
  
Come si vede le ACL possono essere definite a livello di utenti , di computers o di oggetti gestiti dal proxy.
}}} questo parametro configura una lista dei controllo accessi per tutti gli oggetti appartenenti al dominio `.hotmail.com` (cioè tutti gli oggetti in esso inclusi). Come si vede le ACL possono essere definite a livello di utenti, di computer o di oggetti gestiti dal proxy.
Linea 154: Linea 128:
I parametri a ciò deputati sono : I parametri a ciò deputati sono:
Linea 156: Linea 130:
{{{  * {{{
Linea 158: Linea 132:
}}} }}} questo dice al server proxy di accettare le richieste provenienti dagli utenti del gruppo example (che sono tutti quelli definiti nel gruppo LDAP dc=example,dc=com) soltanto se sono autorizzati (vedi la definizione di ACL '''proxy_auth REQUIRED''')
 * {{{
http_access allow example.com
}}} questo dice al server proxy di accettare le richieste provenienti dai client che appartengono alla subnet 192.168.20.0/24
 * {{{
http_access allow hotmail
}}} questo dice al server proxy di accettare le richieste di tutti gli oggetti che appartegono al dominio `hotmail.com`
 * {{{
http_access deny all
}}} questo dice al server proxy di respingere ogni altra richiesta
Linea 160: Linea 143:
questo dice al server proxy di accettare le richieste provenienti dagli utenti del gruppo example (che sono tutti quelli definiti nel gruppo LDAP dc=example,dc=com) soltanto se sono autorizzati (vedi la definizione di ACL '''proxy_auth REQUIRED''')

{{{
http_access allow example.com
}}}
questo dice al server proxy di accettare le richieste provenienti dai clients che appartengono alla subnet 192.168.20.0/24

{{{
http_access allow hotmail
}}}
questo dice al server proxy di accettare le richieste di tutti gli oggetti che appartegono al dominio '''hotmail.com'''

{{{
http_access deny all
}}}
questo dice al server proxy di respingere ogni altra richiesta

'''N.B. : è fondamentale per il proxy l'ordine con cui vengono dichiarate nel file /etc/squid/squid.conf le azioni da compiere corrispondenti a ciascuna ACL...pertanto state attenti e perchè mettere http_deny all in cima alla lista di azioni farebbe respingere in ogni caso qualsiasi richiesta inficiando così tutto il vostro lavoro di configurazione!!'''
{{{#!wiki note
E' fondamentale per il proxy l'ordine con cui vengono dichiarate nel file `/etc/squid/squid.conf` le azioni da compiere corrispondenti a ciascuna ACL. pertanto state attenti e perchè mettere `http_deny all` in cima alla lista di azioni farebbe respingere in ogni caso qualsiasi richiesta inficiando così tutto il vostro lavoro di configurazione!!}}}
Linea 182: Linea 148:
}}}
questo vuol dire che ai vostri clients potrete passare il nome del server '''proxy.example.com''' che gli servirà per configurare l'uso del servizio proxy
}}} questo vuol dire che ai vostri clients potrete passare il nome del server '''proxy.example.com''' che gli servirà per configurare l'uso del servizio proxy
Linea 185: Linea 150:
Beh siamo alla fine...

Dando un'occhiata al file '''squid.conf''' vi renderete conto che esistono moltissime altre direttive di configurazione che potrete usare per ottimizzare il vostro servizio , ma quelle esposte corrispondono a quelle strettamente necessarie per un coretto funzionamento dello stesso.
Dando un'occhiata al file `squid.conf` vi renderete conto che esistono moltissime altre direttive di configurazione che potrete usare per ottimizzare il vostro servizio , ma quelle esposte corrispondono a quelle strettamente necessarie per un coretto funzionamento dello stesso.
Linea 197: Linea 159:

* '''NCSA''' : è il tradizionale metodo di autenticazione del server Web Apache che sfrutta il modulo {{{/usr/lib/squid/ncsa_auth}}}.
Gli utenti devono essere creati in un file con il comando htpasswd (es :
{{{
 * '''NCSA''' : è il tradizionale metodo di autenticazione del server Web Apache che sfrutta il modulo {{{
/usr/lib/squid/ncsa_auth
}}} 
 * Gli utenti devono essere creati in un file con il comando '''htpasswd''', esempio: {{{
Linea 202: Linea 164:
}}}
)

la direttiva da specificare in '''squid.conf''' è '''/usr/lib/squid/ncsa_auth /etc/squid/proxyusers'''
}}} la direttiva da specificare in `squid.conf` è `/usr/lib/squid/ncsa_auth /etc/squid/proxyusers`
Linea 209: Linea 167:
}}}

la direttiva da specificare ha la seguente forma : {{{
}}} la direttiva da specificare ha la seguente forma : {{{
Linea 214: Linea 170:
Linea 218: Linea 173:
}}}

la direttiva da specificare ha la seguente forma : {{{
}}} la direttiva da specificare ha la seguente forma : {{{
Linea 225: Linea 178:
CategoryNuoviDocumenti CategoryServer CategoryServer CategoryDaRevisionare


Introduzione

Un server proxy all'interno di una rete ha la fondamentale funzione di controllare i processi di autenticazione degli utenti durante i loro accessi ad Internet.

Per poter fare ciò è necessario configurare ogni client in modo che nel momento in cui tenta di connettersi ad internet passi per il nodo che funge da server proxy, il quale dovrà a sua volta richiedere l'autenticazione dell'utente e del client e controllare le credenziali di accesso fornite e la loro rispondenza ai criteri stabiliti dal server proxy.

Il proxy server è pertanto un controllore centrale delle credenziali di accesso ad un sistema che opera con ACL sia a livello utente che a livello host , nonché selezionando siti e percorsi di ricerca da accettare o scartare.

Una volta ottenuta la convalida dell'autenticazione, ciascun client ha accesso al servizio fornito dal proxy server, in questo caso l'accesso alle pagine internet.

Tali pagine richieste dai client vengono risolte nel primo accesso direttamente dal server proxy e poi ogni successiva richiesta della stessa pagina da parte di un client verrà evasa usando l'informazione che il proxy ha nella sua memoria cache.

Ritorna il principio di località dell'informazione in base al quale la minimizzazione dei temnpi di accesso ad una determinata informazione è garantito dall'uso di una memoria locale e volatile ad accesso molto rapido.

Prima di installare

Prima di cominciare, come prerequisito, è necessario:

  • Pianificare un corretto partizionamento del disco
  • Dedicare, se possibile, una partizione apposita per /var/log ed una specifica per /var/cache/squid

Installazione

Per installare il server proxy aprire una shell e digitare

sudo apt-get -y install squid

Questo installerà i pacchetti necessari per il servizio proxy.

Configurazione

La directory di configurazione del server proxy è /etc/squid ed il file è squid.conf.

I file di log sono contenuti all'interno della directory /var/log/squid e contengono informazioni sugli accessi e sugli hit o miss di ogni pagina (ovvero sull'efficienza del proprio server proxy).

A tal proposito occorre precisare che il tasso di hit riflette l'efficienza del server proxy poiché tanto più alto è il numero di pagine richieste dai client e trovate nella memoria cache del sevrer proxy tanto minore sarà il numero di richieste che il server proxy stesso dovrà fare per ottenere tali pagine.

Tale fattore di efficienza dipende sia dalle dimensioni della cache che dal tipo di richieste dei client e solitamente anche dal tempo trascorso dalla fine del setup del proxy server.

Come detto il file per la configurazione del servizio proxy è /etc/squid/squid.conf. Adesso si vedrà nel dettaglio cosa bisogna modificare per ottenere un proxy perfettamente funzionante.

Innanzitutto, è necessario specificare l'indirizzo IP e la porta su cui il sevrer proxy sarà in ascolto attraverso la direttiva :

http_port 192.168.20.101:3128

In questo esempio è in ascolto sull'IP 192.168.20.101 e sulla porta 3128. Bisogna configurare l'IP e la porta su tutti i client che dovranno usufruire del servizio proxy.

A questo punto occorre specificare le dimensioni della memoria cache da usare per il servizio proxy come segue :

cache_mem 8MB

Nell'esempio, il valore predefinito è 8MB. È possibile modificarlo in base alle dimensioni della propria RAM.

Un server dedicato può arrivare tranquillamente a 256 o 512 MiB.

Il valore di questo parametro dipende dalle dimensioni degli oggetti che il proxy deve memorizzare e dal numero di questi ultimi. Ad esempio, se si hanno 1000 client che richiedono ciascuno una pagina diversa delle dimensioni medie di 500KB servono 500*1000=500MB di cache!! Questo è un caso limite, ma aiuta a capire come determinare con semplici conti la quantità di cache necessaria.

Altri parametri importanti sono:

  • maximum_object_size: gli oggetti con dimensioni maggiori di quelle riportate non vengono scritti su disco (ovvero non sono sottoposti a swapping)

  • minimum_object_size: gli oggetti con dimensioni minori di quelle riportate non vengono scritti su disco (ovvero non sono sottoposti a swapping)

  • maximum_object_size_in_memory: gli oggetti con dimensioni maggiori di quelle riportate non vengono mantenuti nella memoria cache (cioè vengono scartati)

E' evidente che l'ultimo parametro deve essere abbastanza alto da permettere che il più grande oggetto richiesto dai client serviti sia mantenuto nella cache, e pertanto tale valore dipende dalla "qualità" delle richieste dei client (ovvero dal tipo di pagine ed oggetti richiesti).

I parametri che seguono riguardano il tipo di algoritmi usati per la gestione della memoria cache e della RAM da parte del proxy :

  • cache_replacement_policy lru: significa che il proxy rimpiazzerà gli oggetti nella cache usati meno di recente (least recently used algorithm)

  • memory_replacement_policy lru: significa che il proxy rimpiazzerà gli oggetti nella memoria usati meno di recente (least recently used algorithm)

Generalmente questi parametri sono impostati in modo predefinito.

La direttiva successiva riguarda la directory su disco da usare come area di caching delle richieste degli oggetti pervenute al proxy dai client:

cache_dir ufs /var/spool/squid 80000 16 256

La directory è di tipo ufs (il tipo di filesystem usato per il caching dei documenti richiesti) e /var/spool/squid ed i parametri specificati di seguito sono:

  • 80000: è la dimensione massima che questa directory può raggiungere prima che venga applicato l'algoritmo lru per lo svuotamento della cache stessa;

  • 16: è il numero di sotto cartelle di primo livello create di default dal server proxy in /var/spool/squid;

  • 256: è il numero di sotto cartelle di secondo livello create di default dal server proxy in /var/spool/squid

In generale, si potrebbe voler specificare una diversa cartella per il caching delle pagine squid (soprattutto se avete predisposto una partizione dedicata a ciò in fase di preparazione del sistema) ed un diverso valore della massima dimensione della memoria cache.

I parametri successivi riguardano i file di log e sono :

  • cache_access_log in /var/log/squid/access.log: specifica il file contenente i log degli accessi (le richieste di oggetti pervenute al proxy)

  • cache_log in /var/log/squid/cache.log: specifica il file di log che vi dice come si sta comportando il vostro server proxy (tasso di hit e miss delle pagine richieste)

  • cache_store_log in /var/log/squid/store.log: specifica il log file che mostra dove e come sono gestiti gli oggetti nella cache

Il parametro successivo è:

  • dns_nameservers 192.168.20.101: questo specifica l'IP del DNS cui devono essere girate le query DNS per la localizzazione degli host che posseggono le pagine richieste.

È evidente che il server proxy lavorerà a stretto contatto con un DNS, pertanto non sarebbe una cattiva idea implementare un caching DNS interno per velocizzare la risoluzione DNS.

Definizione delle ACL su backend LDAP

A questo punto viene la parte fondamentale ovvero quella in cui vengono definite le liste di controllo degli accessi in base alle quali il proxy selezionerà gli utenti ed i client che possono accedere ai servizi offerti dal proxy stesso.

La sezione fondamentale al riguardo è auth_param.

Poiché il nostro proposito è quello di configurare un proxy server le cui ACL siano definite in rapporto ad un backend LDAP , è necessario specificare il gruppo di utenti che saranno assoggettati ad autenticazione e l'eseguibile che dovrà interrogare il DB LDAP per convalidare le credenziali di accesso fornite.

I parametri da specificare sono:

  • auth_param basic program /usr/lib/squid/squid_ldap_group -b dc=example,dc=com -f uid=%v

    questo dice al server proxy di usare il programma squid_ldap_group per autenticare tutti gli utenti LDAP del dominio base dc=example,dc=com (cambiatelo con il vostro)

  • auth_param basic children 5
    questo dice che il numero di sottoprocessi di autenticazione allo startup del server proxy deve essere 5
  • auth_param basic credentialsttl 2 hours
    questo vi dice che dopo 2 ore le credenziali di accesso dovranno essere reinserite perchè il vostro proxy le richiederà
  • auth_param basic casesensitive on

    questo dice che il vostro proxy è case-sensitive ovvero che distingue fra maiuscole e minuscole sia per username che per password immesse dagli utenti.

  • Dopo aver detto al proxy che dovrà usare il modulo LDAP per l'autenticazione degli utenti che gli si presenteranno si passa alla definizione delle liste di controllo di accesso al servizio come segue:

    acl example proxy_auth REQUIRED

    questo dice che il gruppo di utenti example può accedere al servizio solo se autorizzato (richiesta di credenziali di accesso username e password da confrontare con quelle dei corrispondenti utenti LDAP). Questo parametro identifica un meccanismo di sicurezza basato sul controllo utenti.

  • acl example.com src 192.168.20.0/24
    questo dice che soltanto i clients della sottorete 192.168.20.0/24 possono usufruire del servizio proxy (cioè una macchina con IP 10.0.0.1 non potrà usare il servizio proxy neanche in caso di utente autorizzato). Questo parametro identifica un meccanismo di sicurezza basato sul controllo dei clients.
  • acl hotmail dstdomain .hotmail.com

    questo parametro configura una lista dei controllo accessi per tutti gli oggetti appartenenti al dominio .hotmail.com (cioè tutti gli oggetti in esso inclusi). Come si vede le ACL possono essere definite a livello di utenti, di computer o di oggetti gestiti dal proxy.

Dopo aver definito il metodo di autorizzazione usato dal server proxy e le ACL definiamo le azioni del server proxy sulle ACL così definite (ovvero permetti o blocca).

I parametri a ciò deputati sono:

  • http_access allow example 

    questo dice al server proxy di accettare le richieste provenienti dagli utenti del gruppo example (che sono tutti quelli definiti nel gruppo LDAP dc=example,dc=com) soltanto se sono autorizzati (vedi la definizione di ACL proxy_auth REQUIRED)

  • http_access allow example.com
    questo dice al server proxy di accettare le richieste provenienti dai client che appartengono alla subnet 192.168.20.0/24
  • http_access allow hotmail

    questo dice al server proxy di accettare le richieste di tutti gli oggetti che appartegono al dominio hotmail.com

  • http_access deny all
    questo dice al server proxy di respingere ogni altra richiesta

E' fondamentale per il proxy l'ordine con cui vengono dichiarate nel file /etc/squid/squid.conf le azioni da compiere corrispondenti a ciascuna ACL. pertanto state attenti e perchè mettere http_deny all in cima alla lista di azioni farebbe respingere in ogni caso qualsiasi richiesta inficiando così tutto il vostro lavoro di configurazione!!

Infine potremmo voler indicare il nome con cui raggiungere il vostro proxy con la direttiva seguente :

visible_hostname proxy.example.com

questo vuol dire che ai vostri clients potrete passare il nome del server proxy.example.com che gli servirà per configurare l'uso del servizio proxy

Dando un'occhiata al file squid.conf vi renderete conto che esistono moltissime altre direttive di configurazione che potrete usare per ottimizzare il vostro servizio , ma quelle esposte corrispondono a quelle strettamente necessarie per un coretto funzionamento dello stesso.

Altri tipi di autorizzazione

In generale squid è molto flessibile e supporta 4 metodi di autorizzazione per le ACL :

  • PAM attraverso il modulo

    /usr/lib/squid/pam_auth
  • NCSA : è il tradizionale metodo di autenticazione del server Web Apache che sfrutta il modulo

    /usr/lib/squid/ncsa_auth
  • Gli utenti devono essere creati in un file con il comando htpasswd, esempio:

    htpasswd /etc/squid/proxyusers utente

    la direttiva da specificare in squid.conf è /usr/lib/squid/ncsa_auth /etc/squid/proxyusers

  • SMB è l'autenticazione samba tramite il modulo

    /usr/lib/squid/smb_auth 

    la direttiva da specificare ha la seguente forma :

    /usr/lib/squid/smb_auth -W example.com
  • LDAP che sfrutta un database LDAP e utilizza per il controllo accessi i moduli

    /usr/lib/squid/ldap_auth
    /usr/lib/squid/squid_ldap_group

    la direttiva da specificare ha la seguente forma :

    /usr/lib/squid/squid_ldap_group -b dc=example,dc=com -f uid=%v


CategoryServer CategoryDaRevisionare