Lo schema di autenticazione Basic era già disponibile in tutte le precedenti versioni di Squid, ma a partire dalla versione 2.5 la sintassi delle direttive di configurazione contenute in squid.conf é sensibilmente variata rispetto alla versione precedente, per completezza analizzeremo entrambe le versioni.
Lo schema di autenticazione basic utilizza i seguenti parametri
auth_param basic program cmdline auth_param basic children numberofchildren auth_param basic realm realmstring auth_param basic credentialsttl timetolive |
il TAG program cmdline
Specifica il comando che avvia il programma utenticatore esterno. Tale programma legge una riga da stdin contenente "username password" e risponde con "OK" o "ERR" in un loop senza fine. Come default, lo schema di autenticazione basic non viene attivato, a meno che non venga specificato un programma che si occupa di eseguire l'autenticazione, ad esempio
auth_param basic program /usr/local/squid/libexec/ncsa_auth \ /usr/local/squid/etc/passwd |
il TAG children numberofchildren
Indica quante istanze del programma di autenticazione devono essere eseguite contemporaneamente. Se viene configurato un numero di autenticatori troppo basso, Squid potrebbe essere costretto ad attendere un autenticatore libero, rallentando la navigazione. Il valore predefinito è 5
auth_param basic children 5 |
il TAG realm realmstring
Specifica il nome realm che viene fornito ai client per lo schema di autenticazione Basic, ovvero il testo che l'utente vedrà nella dialog box di autenticazione proposta dal browser web. Il valore predefinito è "Squid proxy-caching web server"
auth_param basic realm Squid proxy-caching web server |
il TAG credentialsttl timetolive
Specifica il tempo di vita (Time To Live o TTL) di una coppia username:password che viene validata esternamente. In altre parole, quanto spesso un programma helper debba validare nuovamente le credenziali per un dato utente. Il valore predefinito é due ore
auth_param basic credentialsttl 2 hours |
è sempre possibile testare il corretto funzionamento di un helper per la Basic authentication semplicemente eseguendolo con la stessa riga comandi specificata in squid.conf e verificando che, immettendo delle coppie username:password, si ottengano le risposte "OK" o "ERR" previste.
Squid 2.4 supporta esclusivamente lo schema di autenticazione Basic ed utilizza i seguenti parametri
authenticate_program cmdline authenticate_children numberofchildren |
Il significato e la sintassi di queste direttive é analogo a quelle di Squid 2.5 che abbiamo trattato in precedenza
il TAG authenticate_program cmdline
Specifica il comando che avvia il programma utenticatore esterno. Questo programma legge una riga da stdin contenente "username:password" e risponde con "OK" o "ERR" in un loop senza fine. Come default, lo schema di autenticazione basic non viene attivato a meno che non sia specificato un programma che esegue l'autenticazione. Questo TAG equivale alla direttiva di Squid 2.5 auth_param basic program cmdline, ad esempio
authenticate_program /usr/local/squid/libexec/ncsa_auth /usr/local/squid/etc/passwd |
il TAG authenticate_children numberofchildren
Indica quante istanze del programma di autenticazione devono essere eseguite contemporaneamente. Se viene configurato un numero di autenticatori troppo basso, Squid potrebbe essere costretto ad attendere un autenticatore libero, rallentando la navigazione. Questo TAG equivale alla direttiva di Squid 2.5 "auth_param basic children numberofchildren", il valore predefinito è 5.
authenticate_children 5 |
Nel seguito di questo documento saranno trattati in dettaglio gli autenticatori relativi a Squid 2.5, si tenga presente che le configurazioni indicate possono essere valide anche per Squid 2.4 sempre che si utilizzi la differente sintassi nelle direttive di configurazione in squid.conf.
É storicamente il primo authentication helper utilizzato in Squid. Utilizza un file di password sullo stile di NCSA httpd (o piú recentemente Apache) per eseguire l'autenticazione con alcune varianti rispetto al formato originale
Le linee che iniziano con '#' sono considerate un commento
É possibile lasciare delle linee vuote
Tutti i campi extra del file di password sono ignorati, ciò permette l'utilizzo diretto di un file di password Unix
ecco un esempio di configurazione
auth_param basic program /usr/local/squid/libexec/ncsa_auth \ /usr/local/squid/etc/passwd auth_param basic children 10 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 30 minutes |
In questo caso ncsa_auth si trova in /usr/local/squid/libexec, il file contenente le password é /usr/local/squid/etc/passwd, il numero di helper in esecuzione é 10 ed il TTL dell'autenticazione é pari a 30 minuti. L'helper ncsa_auth é utilizzabile su tutte le piattaforme supportate da Squid.
Il file contenente le userid e le password che verranno interpretate da ncsa_auth può essere generato utilizzando l'applicazione htpasswd fornita come corredo standard del server web apache. Di seguito la corretta sintassi per la creazione del file /usr/local/squid/etc/passwd
% htpasswd -c /usr/local/squid/etc/passwd stefano
New password:
Re-type new password:
Adding password for user stefano
|
Pedro Lineu Orso ha realizzato due ottimi strumenti per la gestione tramite interfaccia WEB del file di password: admuser e chpasswd disponibili su http://web.onda.com.br/orso/.
Questo authentication helper consente a Squid l'utilizzo pratico di qualsiasi modulo PAM (Pluggable Authentication Module) per validare un utente. I moduli PAM piú utilizzati sono Unix, Radius, Kerberos e SMB. Sono comunque disponibili molti altri moduli meno noti presso varie fonti, ecco un esempio di configurazione
auth_param basic program /usr/local/squid/libexec/pam_auth auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 45 minutes |
in questo caso pam_auth si trova in /usr/local/squid/libexec, il numero di helper in esecuzione é 5 ed il TTL dell'autenticazione é pari a 45 minuti. L'helper pam_auth é utilizzabile solamente sulle piattaforme supportate da Squid che forniscono i servizi PAM a livello di sistema. Il nome di default del servizio PAM utilizzato é squid. La configurazione del supporto PAM può variare in funzione della piattaforma utilizzata, sono disponibili le seguenti opzioni
-n service_name The PAM service name (default squid)
-t ttl PAM connection ttl in seconds (default 0)
during this time the same connection will be reused
to authenticate all users
-o Do not perform account mgmt (account expiration etc)
-1 Only one user authentication per PAM connection
|
Per maggiori dettagli riferirsi a pam(8), "PAM Systems Administrator Guide".
Creare il file /etc/pam.d/squid utilizzando il comando
% touch /etc/pam.d/squid
|
Il file deve contenere le seguenti entry:
Auth required /lib/security/pam_stack.so service=system-auth
Auth required /lib/security/pam_nologin.so
account required /lib/security/pam_stack.so service=system-auth
password required /lib/security/pam_stack.so service=system-auth
session required /lib/security/pam_stack.so service=system-auth
|
Per utilizzare /etc/passwd standard modificare il file /etc/pam.conf
squid auth required /lib/security/pam_unix.so.1
squid account required /lib/security/pam_unix.so.1
|
si noti che alcuni moduli PAM, per esempio l'autenticazione tramite shadow password, necessitano che il programma sia installato con privilegio di root suid per poter avere accesso al database delle password utente.
L'helper squid_ldap_auth consente a Squid di connettersi ad un Directory Service LDAP per validare username e password. 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 (http://www.openldap.org).
Il programma ha due modalità di funzionamento: nella modalità di funzionamento predefinita il DN (Distinguished Name) dell'utente da validare é costruito utilizzando un DN base e l'attributo user. Nell'altra modalità di funzionamento, viene utilizzato un filtro di ricerca per localizzare nella Directory un user DN valido rispetto al DN base. Questo autenticatore consente l'interfacciamento con tutti i maggiori Directory Service attualmente disponibili
Microsoft Active Directory
Novell NDS
Lotus Notes Directory
Sun Java System Directory
ecco un esempio di configurazione
auth_param basic program /usr/local/squid/libexec/squid_ldap_auth -b \ dc=your,dc=domain auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 30 minutes |
in questo caso squid_ldap_auth si trova in /usr/local/squid/libexec, il numero di helper in esecuzione é 5 ed il TTL dell'autenticazione é pari a 30 minuti e il server LDAP si trova sulla macchina proxy. L'helper squid_ldap_auth é utilizzabile solamente sulle piattaforme supportate da Squid sui cui sono disponibili le librerie OpenLDAP od un un altra C-API LDAP compatibile. A riguardo dell'helper sono disponibili le seguenti opzioni
squid_ldap_auth -b basedn [-s searchscope]
[-f searchfilter] [-D binddn -w bindpasswd]
[-u attr] [-h host] [-p port] [-P] [-R] [ldap_server_name[:port]] ...
|
L'opzione -b deve essere sempre specificata. Per dettagli sulle opzioni si raccomanda di visionare la man page relativa a squid_ldap_auth fornita con Squid.
Di seguito vengono proposti alcuni esempi di utilizzo di squid_ldap_auth.
Nel caso in cui la Directory utilizzi il layout definito dalla RFC 2307 (http://www.faqs.org/rfcs/rfc2307.html) con un singolo dominio, é sufficiente specificare il nome del DN base sotto il quale si trovano gli utenti ed i server
squid_ldap_auth -b ou=people,dc=your,dc=domain ldapserver
|
se invece si utilizzano dei sottodomini, si rende necessario ricorrere ad un filtro per localizzare il DN dell'utente in quanto questo non può essere ricostruito a partire dal DN base e dal login name
squid_ldap_auth -b dc=your,dc=domain -f uid=%s ldapserver
|
In modo simile, se si intende concedere l'accesso solo agli utenti che hanno un attributo specifico
squid_ldap_auth -b dc=your,dc=domain -f (&(uid=%s)(specialattribute=value)) ldapserver
|
nel caso in cui l'attributo user del DN dell'utente sia "cn" invece di "uid" e non si vogliano fare ricerche per identificare l'utente, o nel caso di Active Directory, é possibile utilizzare qualcosa di simile
squid_ldap_auth -u cn -b cn=Users,dc=your,dc=domain ldapserver
|
nel caso in cui, volendo eseguire delle ricerche, la Directory non consenta ricerche di tipo anonimo, é possibile utilizzare le opzioni -D e -w per specificare un DN utente e relativa password per connettersi alla Directory ed eseguire la ricerca, come nel seguente esempio per Active Directory
squid_ldap_auth -P -R -b dc=your,dc=domain \
-D cn=squid,cn=users,dc=your,dc=domain -w secretsquidpassword \
-f (&(userPrincipalName=%s)(objectClass=Person)) activedirectoryserver
|
L'helper wb_auth consente la validazione degli utenti su di un dominio Windows NT 4 o Windows 2000 Active Directory. Per il suo corretto funzionamento necessita che Samba 2.2.4 (http://www.samba.org/) o seguenti siano installati sul sistema. Per i dettagli relativi alla configurazione di Samba, riferirisi alle sezioni relative all' Autenticazione con Samba 2.2.x e alla configurazione di Winbindd. Ecco un esempio di configurazione
auth_param basic program /usr/local/squid/libexec/wb_auth auth_param basic children 5 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 30 minutes |
In questo caso wb_auth si trova in /usr/local/squid/libexec, il numero di helper in esecuzione é 5 ed il TTL dell'autenticazione é pari a 30 minuti. L'helper wb_auth é utilizzabile solamente sulle piattaforme supportate da Squid per cui é disponibile Samba versione 2.2.4 o seguenti. Sono disponibili le seguenti opzioni:
-d enable debugging -h this message |
L'opzione -d consente una diagnostica abbastanza chiara e precisa dei problemi. Per controllare il funzionamento di winbindd, é possibile utilizzare il tool wbinfo fornito con Samba.
Attenzione: wb_auth non funziona con Samba 3.x, è necessario riferirsi alla sezione dedicata a Samba 3 per ottenere maggiori dettagli.
Questo helper consente di verificare l'autenticazione degli utenti appartenenti a un dominio Windows NT 4 o Active Directory Windows 2000/2003. Tale funzionalità é attualmente resa disponibile con prestazioni migliori dall'helper Winbind. Ecco un esempio di configurazione
auth_param basic program /usr/local/squid/libexec/msntauth auth_param basic children 8 auth_param basic realm Squid proxy-caching web server auth_param basic credentialsttl 15 minutes |
In questo caso msntauth si trova in /usr/local/squid/libexec, il numero di helper in esecuzione é 8 ed il TTL dell'autenticazione é pari a 15 minuti. L'helper msntauth é utilizzabile solamente sulle piattaforme supportate da Squid su cui é possibile compilare le librerie Samba su cui é basato (Samba non é comunque richiesto).
A partire dalla versione 2, msntauth utilizza un file di configurazione denominato msntauth.conf, la directory di default del file msntauth.conf è /usr/local/squid/etc/msntauth.conf, il suo formato è il seguente:
# # PDC BDC DOMAIN # --------- ----------- ----------- server paperino pippo mio_dominio # denyusers /usr/local/squid/etc/denyusers allowusers /usr/local/squid/etc/allowusers |
nell'esempio di cui sopra paperino e pippo sono i nomi dei server che svolgono le funzioni di domain controller, mio_dominio è il nome del dominio windows. Gli utenti non abilitati ad accedere alla rete internet possono essere indicati nel file identificato dalla direttiva denyusers. Questo file contiene una lista di nomi utente per i quali non è richiesta una struttura particolare. Se il file non esiste o è vuoto a nessun utente verrà applicata la negazione di accesso, il file deve essere leggibile dall'utente con cui gira Squid, specificato dalla direttiva cache_effective_user in squid.conf. Gli utenti abilitati per accedere alla rete internet vengono dichiarati nel file identificato dalla direttiva allowusers, questo file contiene una lista di utenti autorizzati la cui compilazione non richiede una particolare struttura, se il file non esiste o è vuoto verrà comunque ignorato.