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.

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:

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:

LinuxDebian/Squid/ntlm_auth_winbind (last edited 2014-12-29 12:33:40 by Kurgan)