Newsgroup: it.comp.os.linux.sys
Titolo: [Help] Configurare Squid e ntlm_auth

Oibo'! Ciao a tutti.
Spero di trovare un supporto e una mano per quanto vado a richiedere.
Alcuni mesi fa ho installato da zero con conoscenze pressoche' 
inesitenti un server proxy basato su Gentoo e Squid.
Poiche' appunto erano poche le mie conoscenze e dovevo tirar su questa 
macchina in fretta, ho cercato la soluzione piu' semplice alla gestione 
della stessa.
La macchina funziona egragiamente da diversi mesi (6) utilizzando come 
schema di auteticazione il basic (ncsa_auth) e servendo 20 computer di 
un dominio Win2k.
Naturalmente il passo che mi sono imposto ora e' quello di sfruttare il 
Domain Controller Win2k e far fare a lui l'autenticazione degli utenti 
in modo da non dover creare ogni volta un utente sul server Proxy per 
far navigare il nuovo arrivato.
Mi sono scartabellato allora lo "Squid-Book oltre le FAQ", e ho provato 
a tirare in piedi lo schema ntlm_auth ma senza successo.
Su questa bibbia e' scritto che ntlm_auth puo' essere usato senza dover 
usare Samba (la macchina mi deve fare da Proxy server e nient'altro e 
vorrei tenere meno servizi possibile sulla stessa).
Nonostante abbia seguito alle lettera, non c'e' verso di farlo funzionare.
Nel file cache.log di squid non viene rilevato alcune errore e squid 
stesso parte regolarmente. Ho dato un occhiata allo access.log che 
riporta un access denied su qualsiasi indirizzo (non riporta il nome 
utente che fa la richiesta di accesso, questo mi ha fatto pensare ad una 
mancata negoziazione con il server PDC ma non so come testare questa 
cosa. Da notare che nel file host ho messo l'indirizzo ip del PDC e ho 
assegnato un name alla macchina... Un ping verso la stessa da esiti 
positivi.
Ora non vi chiedo di risolvere il mio problema, o almeno non 
direttamente, mi accontenterei di una guida o una documentazione da 
seguire per configurare sto coso :D.
Riporto qua sotto l'estrapolazione dello squid.conf che uso:
auth_param ntlm program /usr/lib/squid/ntlm_auth laboratorio/SRVLAB
auth_param ntlm children 5
auth_param ntlm max_challenge_reuses 0
auth_param ntlm max_challenge_lifetime 2 minutes
auth_param ntlm use_ntlm_negotiate off
dove laboratorio e' il nome del dominio e SRVLAB e' il name specificato 
in hosts.
Grazie per ogni suggerimento!
Riccardo.

 Grazie per ogni suggerimento!
Io la configurazione dell'ntlm_auth la faccio sempre così e funziona:
in squid.conf
auth_param ntlm program /usr/bin/ntlm_auth
--helper-protocol=squid-2.5-ntlmssp --domain=DOMINIO
--require-membership-of=DOMINIO+Internet --diagnostic -d 5
auth_param ntlm children 10
auth_param ntlm max_challenge_lifetime 2 minutes
auth_param ntlm use_ntlm_negotiate on
auth_param basic program /usr/bin/ntlm_auth
--helper-protocol=squid-2.5-basic --domain=DOMINIO
--require-membership-of=DOMINIO+Internet --diagnostic -d 5
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
In smb.conf
[global]
        workgroup = DOMINIO
        security = DOMAIN
        obey pam restrictions = Yes
        passdb backend = tdbsam, guest
        passwd program = /usr/bin/passwd %u
        client NTLMv2 auth = Yes
        syslog = 0
        log file = /var/log/samba/log.%m
        max log size = 1000
        dns proxy = No
        ldap ssl = no
        idmap uid = 10000-20000
        idmap gid = 10000-20000
        winbind separator = +
        winbind cache time = 10
        winbind use default domain = Yes
        winbind nested groups = Yes
        invalid users = root
E poi iscrizione al dominio con "net {rpc|ads} join".
Flavio

 ldap_auth, ma non hai comunque l'aut. trasparente.
Ok quindi in sostanza se voglio l'autenticazione trasparente devo 
installare samba sulla macchina e farla joinare al dominio giusto?

 installare samba sulla macchina e farla joinare al dominio giusto?
Che io sappia sì. Non ci metterei la mano sul fuoco, ma è l'unico metodo
che fino ad oggi sono riuscito a fare andare.
Flavio

 Flavio
Ok mi armo di pazienza e vedo di installare samba con i relativi 
supporti necessari ;)

THe_ZiPMaN ha scritto:

Flavio un ultima cosa... samba devo copilarlo con qualche opzione 
particolare?
Da quel che ho letto, a me dovrebbe servire samba e kerberos (v5, build 
superiore alla 1.3.x) ma non mi e' chiaro se devo predisporre anche winbdd.
gli step che pensavo di fare sono:
emerge samba (mi ritrovo samba samba-3.0.10)
merge mit-krbr (mi ritrovo kerberos5 1.3.6-r2)
ed infine configurare samba per usare il kerberos installato...
right?

 E poi iscrizione al dominio con "net {rpc|ads} join".
E se la stessa macchina su cui gira Squid fa anche da Primary Domain 
Controller per il dominio in questione, come si procede?
Grazie, ciao!
Decibel.

 superiore alla 1.3.x) ma non mi e' chiaro se devo predisporre anche winbdd.
Non so su Gentoo cosa ti serva esattamente. Su Debian mi bastano
winbind, samba-common e libkrb53.
Flavio

 Controller per il dominio in questione, come si procede?
Teoricamente dovrebbe andare direttamente.


Non esattamente, ci sono 3 possibili soluzioni:
- Usare ntlm_auth fornito con Squid, e' un autenticatore autonomo, ed e' 
quello a cui si riferisce Riccardo
- Usare wb_auth fornito con Squid, che pero' funziona SOLO con Samba 2.2.x
- Usare ntlm_auth fornito con Samba 3, che ovviamente richiede Samba 3 
... :-)
Guido

 quello a cui si riferisce Riccardo
Ehm pero' con quello sembra che non ne vuole sapere di andare...
In sostanza anche se configuro tutto come descritto, direi che non 
chiede un fico secco di autenticazione al dominio Win2k ;)
Cmq resta che vorrie fare un autenticazione trasparente (niente piu' 
pannellino col rischio che l'utonto sbagli la password o la proprio 
login) pertante e' possibile implementare questa cosa con il ntlm_auth 
di Squid? O devo passare per quello di Samba?
Un dubbio dell'ultima riga... l'autenticazione avviene per ogni 
applicativo che tenta di passare dal proxy giusto? Nel senso se ho un 
browser diverso da Internet Explorer, questo passa usando la stessa 
tecnica di autenticazione?
Riccardo.

 tecnica di autenticazione?
Solo se supporta lo schema di autenticazione NTLM. Pressoché tutti i
prodotti M$ sono OK, mentre il 90% degli altri non è predisposto.
Firefox, per il momento, è tra questi ultimi.
Flavio

THe_ZiPMaN ha scritto:

Allora forse ho capito perche' i miei tests non andavano... :D
Vabbe' stasera a laboratorio chiuso riapplico la configurazione che 
avevo provato nei giorni scorso e vedo di usare explorer...
Se riuscissi a fare a meno di samba sarebbe per me piu' semplice, e non 
lo dico perche' non voglio imparare ma perche' adoro la filosofia: usa 
solo quello che ti serve nello stretto necessario. Se squid ha gia' un 
helper che fa al caso mio perche' dovrei coinvolgere anche samba? ;)
-- 
./ Riccardo
./ The pure and simple truth is rarely pure and never simple (O. Wilde)

 Guido
Guido dammi na mano va che qua sto litigando con sto coso e non ne vengo 
a unao... io voglio usare l'helper di Squid e non voglio Samba a 
complicarmi la vita...
Attualmente se configuro secondo le lo Squid Book non riesco ad ottenere 
nulla :(


Ciao,
THe_ZiPMaN wrote:

Mi sa che le tue fonti sono poco aggiornate:
Mozilla e Firefox supportano NTLM in modo nativo da un pezzo, se ricordo 
bene a partire da Mozilla 1.5.
La versione beta 2 di Firefox 1.5 supporta anche Kerberos (!!!)
Opera per il momento non sembra invece supportare NTLM.
Non so nulla di Safari e Konqueror.
Bye
Guido

 
Provare a configurare l'opzione di debug dell'helper, cosi' vediamo se 
"dice" qualcosa:
auth_param ntlm program /usr/lib/squid/ntlm_auth -d laboratorio/SRVLAB
Trovi l'ouput in cache.log.
Bye
Guido

 bene a partire da Mozilla 1.5.
Sě, dalla 1.6.
Flavio

 http_access allow da_retelocale autenticati
Sulla stessa macchina sono installati i pacchetti di Samba 3.0.14a-1 
(samba-common, samba-doc, smbclient, smbfs e winbind), ma forse l'unico 
importante è winbind, che installa appunto il file /usr/bin/ntlm_auth 
che uso.
Il dominio è gestito da un'altra macchina Linux con Samba 3.0.14a-1, nel 
cui database è stato inserito un account per la macchina proxy, in modo 
che winbind possa accedervi per ricavare i dati degli utenti.
In crontab ho inserito la seguente riga per rinnovare ogni giorno il 
trust con il PDC:
00 07 * * * root net rpc changetrustpw
...il che mi fa pensare che sia necessario almeno il pacchetto 
samba-common, che contiene il comando net.
Non so cosa cambi con il ntlm_auth di squid, né se si può usare, ma 
almeno nel mio caso la scelta era obbligata, visto che nei commenti di 
squid.conf si legge:
"Note: If you're using Samba >= 3.0.2, please install the winbind
package and use the ntlm_auth helper from that package."
-- 
Ciao,
  Marco.

 Guido
Avevo gia' provato ad abilitarla e infatti stavo cercando documentazione 
in merito agli errori che mi riportava. Cmq eccola qua:
ntlm-auth[9305](ntlm_auth.c:284): managing request
ntlm-auth[9305](ntlm_auth.c:290): ntlm authenticator. Got 'YR' from Squid
ntlm-auth[9305](ntlm_auth.c:239): obtain_challenge: selecting 
JURISLAB\SRVJURIS (attempt #1)
ntlm-auth[9305](ntlm_auth.c:251): attempting challenge retrieval
ntlm-auth[9305](libntlmssp.c:119): Connecting to server SRVJURIS domain 
JURISLAB
ntlm-auth[9305](libntlmssp.c:126): Couldn't connect to SMB Server. 
Error:The attempt to call the remote server failed. See protocol error info.
         RFCNBE_CallRejCNNP: Call rejected. Called name not present.
ntlm-auth[9305](ntlm_auth.c:253): make_challenge retuned (nil)
ntlm-auth[9305](ntlm_auth.c:259): Marking DC as DEAD
ntlm-auth[9305](ntlm_auth.c:262): moving on to next controller
ntlm-auth[9223](ntlm_auth.c:239): obtain_challenge: selecting 
JURISLAB.COM
\SRVJURIS (attempt #1)
ntlm-auth[9223](ntlm_auth.c:243): Reviving DC
ntlm-auth[9223](ntlm_auth.c:251): attempting challenge retrieval
ntlm-auth[9223](libntlmssp.c:119): Connecting to server SRVJURIS domain 
JURISLAB.COM
ntlm-auth[9223](libntlmssp.c:126): Couldn't connect to SMB Server. 
Error:The attempt to call the remote server failed. See protocol error info.
         RFCNBE_CallRejCNNP: Call rejected. Called name not present.
ntlm-auth[9223](ntlm_auth.c:253): make_challenge retuned (nil)
ntlm-auth[9223](ntlm_auth.c:259): Marking DC as DEAD
ntlm-auth[9223](ntlm_auth.c:262): moving on to next controller
Tenendo presente che:
SRVJURIS e' un entri in /etc/hosts a cui e' associato l'indirizzo ip del 
server di dominio perfettamente raggiungibile dal proxy attraverso un 
semplice "ping SRVJURIS".
JURISLAB e' il nome del dominio in formato pre-Windows 2000
jurislab.com
 e' il nome del dominio in formato Windows 2000
Da quel che posso capire e non ci vuole un genio, ntlm_auth non trova un 
dominio a cui chiedere le credenziali...
Sto usando l'helper ntlm_auth fornito con Squid 2.5.STABLE9.
Non e' che per caso devo installare qualcosa anche PDC Win2k per farli 
comunicare?


Più tento di arrivare ad una soluzione da solo, più trovo documentazione 
e post in vari newsgroup che mi dicono di usare samba in quanto 
sostengono che l'helper fornito con Squid abbia un comportamento strano 
e "bugged oriented" ;)
Vorrei pero' almeno una volta farlo funzionare, poi giuro che passo a 
Samba :)


 
Dice che non si capiscono, diffida sembre degli errori legati al mondo 
Microsoft ....
Ovviamente il nome del domain controller e' SRVJURIS, vero ?
Domanda: in fase di installazione dell'Active Directory (dcpromo) e' 
stata selezionata la compatibilità con i sistemi pre Windows 2000 ?
Per verificare se un Dominio Active Directory sia stato stato installato 
in modalità compatibile pre Windows 2000 é sufficiente eseguire Active 
Directory Users and Computers e controllare se nel gruppo "Pre-Windows 
2000 Compatible Access" situato nel container built-in sia presente 
l'utente Everyone. Se non fosse presente, guarda l'articolo Q303973 
(
http://support.microsoft.com/
) della Knowledge Base Microsoft.
Bye
Guido

 Guido
No tale account non c'era, ora ho aggiunto tale account... a laboratorio 
chiuso farò un ulteriore prova...


Riccardo aka Bruceno Mejo ha scritto:

Ora mi viene un ulteriore dubbio, ho seguito l'indicazione datami da te, 
e ho aggiunto l'utente Everyone, sull'articolo da te citato pero' dice 
di aggiungere il Domain Users Group... Immagino tu mi abbia citato 
l'articolo per la procedura da seguire per aggiungere l'Everyone e non 
il Domain Users vero?


 
Il fatto che tu sia stato autenticato da un ISA server non implica 
l'utilizzo di NTLM: ISA Server, come anche Squid, puo' autenticare 
contemporaneamente con piu' schemi di autenticazione, sta al browser 
decidere quale usare.
Nel dettaglio: il proxy risponde alla richiesta con una pagina di codice 
HTTP 407 (Proxy Authentication Required) ed elenca negli header HTTP gli 
schemi di autenticazione supportati, al momento:
Basic
NTLM
Digest
Il browser sceglie lo schema con il livello di sicurezza maggiore tra 
quelli disponibili (l'ordine e' appunto quello in cui li ho riportati).
Quindi, nel caso di Opera ed ISA Server, l'autenticazione dovrebbe 
essere avvenuta in modalita' Basic.
Saluti
Guido


Questo spiega probabilmente i tuoi problemi.
Rispondo qui al tuo altro post: e' sufficiente inserire Everyone.
Saluti
Guido

 
A parte ovviamente andarne a vedere direttamente la configurazione da 
console, puoi ad esempio usare l'utility squidclient di squid.
Quello che vedi e' il risultato lanciandolo verso uno Squid che ascolta 
sulla porta 3128 ed ha NTLM e basic authentication attive. Nota le righe 
"Proxy-Authenticate".
C:\squid\bin>squidclient -h proxyserver -p 3128 
http://www.cisco.com
HTTP/1.0 407 Proxy Authentication Required
Server: squid/2.5.STABLE10-NT
Mime-Version: 1.0
Date: Thu, 13 Oct 2005 21:32:51 GMT
Content-Type: text/html
Content-Length: 1372
Expires: Thu, 13 Oct 2005 21:32:51 GMT
X-Squid-Error: ERR_CACHE_ACCESS_DENIED 0
Proxy-Authenticate: NTLM
Proxy-Authenticate: Basic realm="Squid proxy-caching web server"
X-Cache: MISS from 
xxx.xxx.it
Proxy-Connection: close
Saluti
Guido

 NETBIOS reale.
non e' il nome netbios... e' il nome che gli ho dato io nel file 
/etc/hosts della macchina linux...
Il che spiega un altro problema... ho interpretato male lo Squid-Book ;)

 Guido
Sto continuando a fare tests, ma a quanto pare non ne vuole sapere di 
autenticare...
questo quello che continuo ad ottenere :(
ntlm-auth[23861](libntlmssp.c:119): Connecting to server SRVJURIS domain 
JURISLAB
ntlm-auth[23861](libntlmssp.c:126): Couldn't connect to SMB Server. 
Error:The attempt to call the remote server failed. See protocol error info.
         RFCNBE_CallRejCNNP: Call rejected. Called name not present.
ntlm-auth[23861](ntlm_auth.c:253): make_challenge retuned (nil)
ntlm-auth[23861](ntlm_auth.c:259): Marking DC as DEAD
ntlm-auth[23861](ntlm_auth.c:262): moving on to next controller

 questo quello che continuo ad ottenere :(
Ok ci sono riuscito era tutta colpa di come inserivo nome netbios e nome 
del dominio.

Posto un ultimo intevento con la soluzione da me adottata al fine di 
renderlo disponibile per ricerche future.
1. Fare riferimento a questa guida:
http://merlino.merlinobbs.net/Squid-Book/HTML/sec-squid-25-autenticazione-ntlm.html#SUBSEC-NTLM-AUTH
Precisazione che mi ha risolto il problema grazie anche all'aiuto del ng.
Nei sistemi Win2k/Win2k3, DOMINIO deve essere il "nome di Dominio 
Pre-Windows 2000", e SERVER il nome NetBios della macchina su cui gira 
Active Directory da aggiungere eventualmente in /etc/hosts se non 
raggiungibile.

 Teoricamente dovrebbe andare direttamente.
Cosa intendi per "andare direttamente"?
Dovrebbe andare senza dichiarare cosa?
Ciao!
Decibel.