===== Autenticatore ntlm_auth (fornito con Winbind) =====
Questo autenticatore non e` solo per squid, supporta diversi protocolli e puo` essere usato per autenticare un po` quello che volete su un dominio NT o AD tramite Winbind.
* Funziona con qualsiasi server supportato da Winbind
* E` parte di Samba, non di Squid, e si evolve con Samba
* Lo si puo` usare non solo per Squid
* Supporta limitazioni per gruppi
* Permette di accedere anche a server AD (win2000 e successivi) pero` non supporta totalmente AD e Kerberos. Comunque funziona come autenticatore su win2008 senza problemi.
==== Configurazione di Samba ====
Posto che non vogliamo usare Samba per niente altro, ma solo come client (a mezzo winbind) per autenticare Squid, la configurazione minima e` questa:
workgroup =
password server = *
security = domain
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind use default domain = yes
# cache dei gruppi a 30 secondi (default 300)
winbind cache time = 30
La riduzione del tempo di caching dei gruppi serve per evitare che quando si mette o toglie un utente da un gruppo debbano passare 5 minuti (piu` il tempo di cache interno di squid, che vedremo dopo) prima che la modifica venga recepita da Squid. Ovviamente meno cache usiamo e piu` stress mettiamo sul DC. Consideriamo che squid autentica OGNI RICHIESTA HTTP, e questo vuole dire decine di richieste per ogni pagina web visualizzata da un solo utente. La cache e` quindi fondamentale per motivi di performance.
Dopo aver fatto questa configurazione e riavviato samba, occorre joinare il server samba al dominio:
''net rpc join -UAdministrator%password''
Se il join ha avuto successo, possiamo provare a leggere dati dal DC:
* wbinfo -u (legge elenco utenti)
* wbinfo -g (legge elenco gruppi)
* wbinfo -r username (mostra a quali gruppi appartiene un utente. risponde numerico, e` normale)
==== Configurazione di Squid ====
Il minimo di configurazione richiede che il browser possa autenticarsi usando due schemi, NTLM e Plain. Il primo e` supportato da Explorer e il secondo da tutti gli altri.
###
### Autenticazione NTLM (la prima versione, quella commentata, richiede che l'utente sia membro di un gruppo specifico. La seconda no)
###
# auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30
###
### Autenticazione Plain (la prima versione, quella commentata, richiede che l'utente sia membro di un gruppo specifico. La seconda no)
###
# warning: basic authentication sends passwords plaintext a network sniffer can and will discover passwords
#auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of=
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Authenticated proxy
auth_param basic credentialsttl 30 minutes
###
### Questa ACL, chiamata domainusers, richiede che almeno una delle due autenticazioni indicate sopra dia risultato positivo.
###
acl domainusers proxy_auth REQUIRED
###
### Se ci basta l'autenticazione cosi` fatta, allora DOPO le varie righe che iniziano per "acl" mettiamo questo.
### Sta a indicare che il cliente deve essere nella lan locale (una acl che qui non e` indicata ma e` nella configurazione standard)
### e che deve anche essere autenticato.
###
http_access allow local_lan domainusers
Se vogliamo complicare la configurazione possiamo verificare l'appartenenza dell'utente a uno o piu` gruppi, e comportarci di conseguenza. Questo e` un esempio di ACL che fa uso dell'appartenenza di un utente ad un gruppo e permette potenzialmente di creare poi regole di accesso complesse, tipo "se sei in un gruppo certi siti sono consentiti altrimenti no". Sempre in squid.conf, possiamo mettere:
###
### autenticazione di un utente su un gruppo (ovvero, l'utente appartiene al gruppo?)
###
# questa riga indica a squid come usare un autenticatore esterno per verificare se un utente appartiene a un gruppo.
# qui non e` indicato il gruppo, che viene indicato dopo nella relativa ACL.
external_acl_type testForGroup ttl=60 negative_ttl=60 %LOGIN /usr/lib/squid/wbinfo_group.pl
# L'utente appartiene al gruppo che si chiama "internet"? Se si`, allora la ACL di nome "inGroupInternet" e` true.
acl inGroupInternet external testForGroup internet
# Volendo potrei creare una seconda ACL che testa se l'utente appartiene al gruppo "unlimited_internet", per poi fare
# cose diverse
acl inGroupUnlimited_Internet external testForGroup unlimited_internet
###
### A questo punto, dopo le righe "acl", posso mettere delle regole di accesso che combinino le ACL fra di loro
### per consentire o negare l'accesso.
###
# qui consento l'accesso agli host della lan locale AND che sono autenticati come utenti
# AND che appartengono al gruppo "internet" sul dominio
http_access allow local_lan domainusers inGroupInternet
E` possibile mischiare anche blacklist e whitelist di siti con le ACL di autenticazione e appartenenza al gruppo, non ho pero` un esempio pronto.
Per testare l'autenticatore esterno dei gruppi (se ci fossero dubbi sul suo funzionamento) si puo` usare questo comando:
echo "USER GRUPPO" | /usr/lib/squid/wbinfo_group.pl -d
Esempio: l'utente test e` nel gruppo internet?
echo "test internet" | /usr/lib/squid/wbinfo_group.pl -d
Per ulteriori informazioni, vedasi:
* Le faq di Squid: http://www.squid-cache.org/Doc/FAQ/FAQ-23.html
* Il manuale di ntlm_auth (parte di samba_doc, un "locate ntlm_auth" aiuta)