== 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)