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 = <DOMAIN NAME> 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=<DOMAIN\\GRUPPO> 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=<DOMAIN\\GRUPPO> 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)