10.5. External ACL

Squid 2.5 introduce la possibilità di estendere gli elementi che compongono le ACL con una nuova classe di ACL denominata external, tale classe si basa sul risultato di un helper esterno che agisce in modo similare al sistema di autenticazione.

Questa nuova funzionalità rende agevole, ad esempio, l'implemetazione di meccanismi di controllo relativo alla appartenenza di un utente a determinati gruppi, oppure esegue dei controlli più complessi tra i quali citiamo la corrispondenza tra un utente ed un indirizzo IP prefissato.

Al momento gli helper disponibili sono ancora pochi e sono esclusivamente dedicati al controllo di accesso a livello utente. La scelta degli helper da attivare viene effettuata al momento della configurazione dei parametri di compilazione di Squid, il nome dell'helper da specificare è il nome (case sensitive) dalla cartella presente nel source tree di Squid che contiene i sorgenti dell'applicazione

./configure --enable-external-acl-helpers="winbind_group ip_user"
  

l'esempio di cui sopra rappresenta le instruzioni necessarie alla compilazione di due helpers esterni quali winbind_group e ip_user.

10.5.1. wb_group

Questo helper permette la verifica di appartenza di un utente ad un gruppo globale di un Dominio Windows NT 4 o Active Directory. Deve essere utilizzato in concomitanza con gli helper di autenticazione Basic Winbindd e NTLM.

Per il suo corretto funzionamento necessita che Samba 2.2.4 (http://www.samba.org/) o seguenti siano installati sul nostro sistema. Per i dettagli relativi alla configurazione di Samba, riferirisi alle susseguenti sezioni relative all' Autenticazione con Samba 2.2.x e alla configurazione di Winbindd.

L'utilizzo di questo helper può semplificare in maniera notevole la gestione della configurazione di Squid e migliorarne le prestazioni globali. Per spiegarci meglio, definiremo un caso di studio: supponiamo di aver 500 utenti censiti in un dominio NT e che li si voglia suddividere in gruppi di restrizione relativamente all'accesso alla webcache. Utilizzando gli helper di autenticazione è possibile agire in due modi:

In entrambi i casi appare chiaro che incontreremmo un notevole impatto sulle prestazioni della nostra cache, in quanto ad ogni auth-challenge, Squid dovrà verificare l'elenco delle access list, oppure confrontare tutta la lista degli utenti. Proprio per far fronte a questa problematica ci viene in contro l'external helper wb_group che deve essere usato congiuntamente a wb_ntlmauth. Ora creeremo dei gruppi d'utilizzo all'interno del dominio NT, per capirci meglio

A questo punto, sempre all'interno del dominio Windows NT, assegneremo gli utenti ai rispettivi gruppi. L'utilizzo del dominio NT è ora piuttosto trasparente a Squid, infatti nel file di configurazione squid.conf è possibile utilizzare un autenticatore qualsiasi, la scelta dello stesso non è più importante.

Definire il TAG external_acl

external_acl_type wb_group concurrency=5 ttl=900 %LOGIN \
/usr/squid/libexec/wb_group 
   

Creeremo all'interno della directory $PREFIX/etc/ dei file, ciascuno di questi file deve contenere i nomi dei gruppi da agganciare all'ACL. Per consentire una maggiore comprensione, si specifica anche che i files appena creati dovranno contenere al loro interno il solo nome del gruppo. Esempio: Gruppo InternetFull - nel file /usr/squid/etc/internetfull ci deve essere scritto unicamente "InternetFull"

Inseriremo ora, le ACL come segue:

acl password proxy_auth REQUIRED
acl internetfull external wb_group -i "/usr/squid/etc/internetfull" 
acl internetnormal external wb_group -i "/usr/squid/etc/internetnormal" 
acl internettodow external wb_group -i "/usr/squid/etc/internettodow" 
acl internettonav external wb_group -i "/usr/squid/etc/internettonav"
acl time_acl time M T W H F 8:30-19:00
acl nointernet src "/usr/squid/etc/nointernet"
acl goodurl url_regex -i "/usr/squid/etc/goodurl" 
acl badurl url_regex -i "/usr/squid/etc/badurl" 
acl badmime url_regex -i "/usr/squid/etc/badmime"
http_access allow password internetfull 
http_access allow password internetnormal time_acl !badurl !badmime 
http_access allow password internettonav time_acl !badmime 
http_access allow password internettodow time_acl !badurl 
http_access deny all 
   

Appare chiara la facilità con la quale si può ora amministrare grandi numeri di utenti compiendo pochi passi per eseguire la configurazione. Per la configurazione di Samba e wb_ntlmauth, consultare il paragrafo relativo.

A partire dalla versione 1.20 dell'helper wb_group, sono disponibili le seguenti opzioni:

-c use case insensitive compare
-d enable debugging
-h this message
   

La modalità predefinita prevede che la comparazione sia case sensitive sui nomi dei gruppi, e quindi questi devono essere specificati esattamente come nel dominio NT/2000. L'opzione -c attiva la modalità di comparazione case insensitive, ma, utilizzando impostazioni locali di lingua differenti dall'inglese, il risultato potrebbe essere diverso dal previsto. Per dettagli vedere le man pages di toupper, sezione BUGS.

L'opzione -d consente una diagnostica abbastanza chiara e precisa dei problemi. Al fine di controllare il corretto funzionamento dell'helper wb_group, si consideri un utente di prova ed un gruppo di prova avviando l'helper wb_group come segue:

% /usr/squid/libexec/wb_group -d
/wb_group[14984](wb_check_group.c:267):
External ACL winbindd group helper build Jan 15 2003, 13:29:15 starting up...
DOMINIO\\Utente Gruppo <--- inserire così (con il doppio "\")
/wb_group[14984](wb_check_group.c:286): Got 'DOMINIO\\Utente Gruppo' from Squid (length: 35).
/wb_group[14984](wb_check_group.c:188): SID: S-1-5-21-1836190980-1428173729-311576647-1168
/wb_group[14984](wb_check_group.c:154): Windows group: Gruppo1, Squid group: Gruppo
/wb_group[14984](wb_check_group.c:188): SID: S-1-5-21-1836190980-1428173729-311576647-512
/wb_group[14984](wb_check_group.c:154): Windows group: Domain Admins, Squid group: Gruppo
/wb_group[14984](wb_check_group.c:188): SID: S-1-5-21-1836190980-1428173729-311576647-1510
/wb_group[14984](wb_check_group.c:154): Windows group: Gruppo, Squid group: Gruppo OK
   

10.5.2. Utilizzo di wbinfo_group con Samba 3

L'helper wbinfo_group, cosí come wb_group, consente il controllo delle autorizzazioni di accesso in base all'appartenzenza a gruppi di dominio Windows NT/2000, ma é basato su di uno script perl che interagisce con l'utility Samba wbinfo, ció fa sí che esso sia "neutro" rispetto alla versione di Samba installata sul sistema.

wbinfo_group necessita di Samba e di una versione recente di perl che includa il modulo di libreria shellwords.pl. In mancanza di quest'ultimo, é possibile tentare di copiarlo da un altro sistema. Il suo utilizzo e le procedure di verifica di funzionamento sono strettamete equivalenti a quelle di wb_group.

Quindi l'external_acl definita in precedenza per wb_group diventerà

external_acl_type wb_group concurrency=5 ttl=900 %LOGIN /usr/squid/libexec/wbinfo_group
   

10.5.3. win32_check_group

L'helper win32_check_group, cosí come wb_group, consente il controllo delle autorizzazioni di accesso in base all'appartenzenza a gruppi di dominio Windows NT/2000, ma riguarda esclusivamente la piattaforma Win32. Non necessita di alcuna componente esterna in quanto si appoggia sulle API native del sistema operativo. win32_check_group può operare su gruppi globali di dominio o gruppi locali di macchina. Il suo utilizzo e le procedure di verifica di funzionamento sono strettamete equivalenti a quelle di wb_group:

external_acl_type NT_global_group %LOGIN c:/squid/libexec/win32_check_group.exe -G
external_acl_type NT_local_group %LOGIN c:/squid/libexec/win32_check_group.exe
acl GProxyUsers external NT_global_group GProxyUsers
acl LProxyUsers external NT_local_group LProxyUsers
acl password proxy_auth REQUIRED
http_access allow password GProxyUsers
http_access allow password LProxyUsers
http_access deny all
   

Nell'esempio precedente, tutti gli utenti NT validati appartenenti al gruppo globale di dominio GProxyUsers o al gruppo locale di macchina LProxyUsers sono autorizzati ad utilizzare la cache. L'helper win32_check_group é utilizzabile solamente in ambiente Windows nativo o Cygwin ed é disponibile nei relativi package Squid. Per questo helper sono disponibili le seguenti opzioni:

-G start helper in Global Group mode
-c use case insensitive compare
-d enable debugging
-h this message
   

La modalità predefinita prevede che la comparazione sia case sensitive sui nomi dei gruppi, e quindi questi devono essere specificati esattamente come nel dominio NT/2000. L'opzione -c attiva la modalità di comparazione case insensitive, ma, utilizzando impostazioni locali di lingua differenti dall'inglese, il risultato potrebbe essere diverso dal previsto. Per dettagli vedere le man pages di toupper, sezione BUGS.

L'opzione -d consente una diagnostica abbastanza chiara e precisa di eventuali problemi.

10.5.4. squid_ldap_group

Questo helper permette la verifica di appartenza di un utente ad un gruppo di una directory LDAP. Il programma opera eseguendo delle ricerche tramite un search filter basato sul username dell'utente ed il gruppo richiesto, se viene trovato un match, l'utente appartiene al gruppo cercato.

Nel seguito di questo paragrafo verranno trattati alcuni argomenti la cui comprensione é strettamente dipendente da una buona conoscenza del protocollo LDAP, per maggiori dettagli al riguardo, riferirsi al sito del Progetto OpenLDAP.

Questo autenticatore consente l'interfacciamento con tutti i maggiori Directory Service attualmente disponibili

esempio di configurazione

external_acl_type ldap_group %LOGIN /usr/local/squid/libexec/squid_ldap_group ...
acl gruppo1 external ldap_group Gruppo1
acl gruppo2 external ldap_group Gruppo2
acl password proxy_auth REQUIRED
http_access allow password Gruppo1
http_access allow password Gruppo2
http_access deny all
   

in questo caso squid_ldap_group si trova in /usr/local/squid/libexec, e sono definite due acl relative ai gruppi LDAP Gruppo1 e Gruppo2. L'helper squid_ldap_group é utilizzabile solamente sulle piattaforme supportate da Squid sui cui sono disponibili le librerie OpenLDAP od un un altra C-API LDAP compatibile.

Sono disponibili le seguenti opzioni:

squid_ldap_group -b "base DN" -f "LDAP search filter" 
                 [options] [ldap_server_name[:port]...|URI] 
   

Le opzioni -b e -f devono essere sempre specificate. Per dettagli sulle opzioni si raccomanda di visionare la man page relativa a squid_ldap_group fornita con Squid.

Attenzione: sono supportate al massimo 16 occorrenze di %s negli argomenti dell'opzione -u

10.5.5. squid_unix_group

Questo helper permette la verifica di appartenza di un utente ad un gruppo standard UNIX®/Linux. Il programma opera eseguendo delle ricerche nel file /etc/group basate sullo username dell'utente ed il gruppo richiesto, un esempio di configurazione

external_acl_type Linux_group %LOGIN /usr/local/squid/libexec/squid_unix_group
acl gruppo1 external Linux_group Gruppo1
acl gruppo2 external Linux_group Gruppo2
acl password proxy_auth REQUIRED
http_access allow password Gruppo1
http_access allow password Gruppo2
http_access deny all
   

in questo caso squid_unix_group si trova in /usr/local/squid/libexec, e sono definite due ACL relative ai gruppi Linux Gruppo1 e Gruppo2. L'helper squid_unix_group é utilizzabile solamente sulle piattaforme supportate da Squid sui cui l'appartenza a gruppi degli utenti é gestita tramite il file /etc/group. Sono disponibili le seguenti opzioni:

squid_unix_group [-g group1 -g group2 -g group3 ...] [-p] 
   

L'opzione -g permette di indicare i gruppi da verificare sulla command line dell'helper, ma il suo utilizzo é sconsigliabile, in quanto la definizione del gruppo da verificare direttamente tramite External ACL come in esempio é maggiormente flessibile. L'opzione -p attiva il lookup anche nei riguardi del gruppo primario indicato in /etc/passwd. Per maggiori dettagli si raccomanda di visionare la man page relativa a squid_unix_group fornita con Squid.

Attenzione: sono supportati al massimo 10 gruppi. Per aumentare tale valore é necessario modificare il define MAX_GROUP nel codice sorgente e ricompilare l'helper.

10.5.6. ip_group_check

Questo helper permette di verificare la corrispondenza tra l'indirizzo IP del client su cui viene eseguito il Browser Internet e l'utente utilizzato per l'autenticazione. Il programma può operare su singoli indirizzi IP o su intere subnet, é inoltre possibile utilizzare come riferimento per la verifica dell'utente, gruppi standard UNIX®/Linux, in questo caso il programma esegue delle ricerche nel file /etc/group basate sullo username dell'utente. Le impostazioni dell'helper devono essere inserite all'interno di un apposito file di configurazione, vediamo un esempio di utilizzo:

external_acl_type IP_Check %SRC %LOGIN /usr/local/squid/libexec/ip_user_check -f /usr/local/squid/etc/ip_user_check.conf
acl resticted external IP_Check
acl password proxy_auth REQUIRED
http_access allow password restricted
http_access deny all
   

in questo caso ip_user_check si trova in /usr/local/squid/libexec, il suo file di configurazione é /usr/local/squid/etc/ip_user_check.conf ed é definita una ACL per eseguire la verifica di corrispondenza. L'helper ip_user_check é utilizzabile solamente sulle piattaforme supportate da Squid sui cui l'appartenza a gruppi degli utenti é gestita tramite il file /etc/group. Sono disponibili le seguenti opzioni:

ip_user_check -f <configuration_file> 
   

L'opzione -f é obbligatoria e specifica il percorso del file di configurazione.

Il formato del file di configurazione é il seguente:

ip[/mask]             utente
   
ip[/mask]             @gruppo
   
ip[/mask]             NONE
   
ip[/mask]             ALL
   

Il risultato della verifica si basa sulla logica di first match, é quindi necessario fare molta attenzione all'oridine in cui vengono inserite le direttive. Esempio:

# Tutti gli utenti della rete 192.168.1.0/24 sono autorizzati
192.168.1.0/255.255.255.0     ALL
#
# Gli utenti della rete 192.168.2.0/24 non sono autorizzati
# tranne l'utente `boss´ che può autenticarsi ovunque
0.0.0.0/0.0.0.0       boss
192.168.2.0/255.255.255.0     NONE
#
# L'utente `gianni´ può autenticarsi solo dall'indirizzo IP delle propria stazione
192.168.3.45  jayk
#
# Gli utenti appartenenti al gruppo `cad´ possono autenticarsi solo dalla propria VLAN
10.0.0.0/255.255.0.0  @cad
   

Note

[1]

regex è acronimo di regular expression. Le espressioni regolari (ER, «regular expression») sono definite dallo standard POSIX 1003.2, la loro sintassi può essere utilizzata per definire dei modelli che possono essere utilizzati per eseguire delle liste di confronto