CNTLM: differenze tra le versioni

8 493 byte aggiunti ,  10 apr 2016
m
versioni compatibili
m (versioni compatibili)
 
(21 versioni intermedie di un altro utente non mostrate)
Riga 1: Riga 1:
{{Versioni compatibili}}
{{Versioni compatibili|Wheezy|Jessie|Testing_2015|Unstable_2015}}


== Introduzione ==
== Introduzione ==
Riga 11: Riga 11:
CNTLM è disponibile direttamente da repository ufficiali, quindi è per esempio sufficiente digitare:
CNTLM è disponibile direttamente da repository ufficiali, quindi è per esempio sufficiente digitare:
<pre># aptitude install cntlm</pre>
<pre># aptitude install cntlm</pre>
=== Osservazioni ===
Chiaramente prima di poter installare cntlm è necessario aver installato prima debian, quindi eseguire una installazione su una macchina posta dietro il proxy che si vuole superare richiede sostanzialmente di effettuare una installazione senza ausilio della rete.
A chi scrive è capitato di riuscire ad eseguire l'installazione di cntlm da repository semplicemente definendo un indirizzo del proxy in APT senza alcuna dichiarazione di username e password. È stato sufficiente infatti installare prima da chiavetta un browser, quindi usare la sua interfaccia interna per definire indirizzo proxy, username e password. Una volta caricata (o semplicemente aggiornata) con successo una certa pagina tutte le successive connessioni di APT (ma non solo) venivano autorizzate automaticamente per qualche minuto, quindi sfruttando questa finestra temporale è stato possibile installare normalmente cntlm.
== Definizione server proxy a livello globale ==
In debian è possibile definire a livello di sistema l'indirizzo dei proxy editando il file <code>/etc/environment</code> e aggiungendo righe di questo tipo:
<pre>
http_proxy=http://localhost:3128/
https_proxy=http://localhost:3218/
HTTP_PROXY=http://localhost:3128/
HTTPS_PROXY=http://localhost:3128/
</pre>
* È bene specificare le stesse variabili sia in minuscolo e maiuscolo poiché è possibile che alcuni applicativi cerchino queste ultime.
* Editare <code>/etc/environment</code> equivale a dichiarare da terminale le stesse variabili (da notare che le nuove variabili non saranno disponibili nel terminale corrente, ma solo in quelli aperti successivamente), ad esempio:
<pre>
# http_proxy=http://localhost:3128/
# export http_proxy
</pre>
* Le variabili dichiarate in <code>/etc/environment</code> non saranno assegnate fino al prossimo riavvio di sistema o finché l'utente non le dichiari singolarmente come esemplificato al punto precedente.
* Non tutti gli applicativi rispettano questa convenzione, pertanto è possibile che alcuni di essi ignorino del tutto le variabili d'ambiente sopra definite.


== Configurazione ==
== Configurazione ==
Riga 64: Riga 89:
* password
* password
Si noti che server vecchi potrebbero utilizzare protocolli di autenticazione più vecchi (e meno sicuri) di NTLMv2, in tal caso l'output del precedente comando potrebbe essere significativamente diverso da quello indicato.
Si noti che server vecchi potrebbero utilizzare protocolli di autenticazione più vecchi (e meno sicuri) di NTLMv2, in tal caso l'output del precedente comando potrebbe essere significativamente diverso da quello indicato.
Del precedente output è la prima riga ad indicare se il test ha avuto successo o meno. Se si riceve <code>Config profile  1/4... OK (HTTP code: 200)</code> allora il test ha avuto esito positivo, viceversa se si dovesse ottenere un ''credentials rejected'' significherebbe che il test è fallito a causa di un errata indicazione di utente, password o dominio (uno solo o anche tutte e tre i parametri contemporaneamente).
{{ Box | Note |
* Nell'esperienza personale di chi scrive è risultato indifferente specificare come dominio ''AZIENDA'' oppure ''fqdn_azienda'', a patto di indicare correttamente l'hash della password (si veda più sotto).
* L'hash (o gli hash) restituiti serviranno solo più avanti, al momento di definire in maniera finali il file ''cntlm.conf''.}}


==== Note sugli altri metodi di cifratura e di autenticazione ====
==== Note sugli altri metodi di cifratura e di autenticazione ====
Riga 75: Riga 104:
PassNTLMv2      FAKEFAKEFAKEFAKEFAKEFAKEFAKEFAKE    # Only for user 'mia_utenza', domain 'AZIENDA'
PassNTLMv2      FAKEFAKEFAKEFAKEFAKEFAKEFAKEFAKE    # Only for user 'mia_utenza', domain 'AZIENDA'
</pre>
</pre>
{{ Box | Importante | Il precedente comando calcola solo gli hash della password, '''NON''' testa in alcun modo il funzionamento di cntlm. Per testarne il funzionamento è necessario usare l'opzione -M seguita da un indirizzo internet valido}}
{{ Box | Importante | Il precedente comando calcola solo gli hash della password, '''NON''' testa in alcun modo il funzionamento di cntlm. Per testarne il funzionamento è necessario usare l'opzione -M seguita da un indirizzo internet valido.}}
Come specificato nel manuale di cntlm esistono diversi protocolli di autenticazione ciascuno dei quali sfrutta da uno a due sistemi di cifratura:
Come specificato nel manuale di cntlm esistono diversi protocolli di autenticazione ciascuno dei quali sfrutta da uno a due sistemi di cifratura:
<pre>
<pre>
Riga 88: Riga 117:
Nella colonna ''Auth'' viene indicata la sigla del protocollo di autenticazione, mentre nella colonna ''requires'' la sigla dei metodi di cifratura usati per cifrare la password utente (i protocolli sono ordinati in funzione del grado di sicurezza offerto, dove NTLMv2 è il più recente e il più sicuro).
Nella colonna ''Auth'' viene indicata la sigla del protocollo di autenticazione, mentre nella colonna ''requires'' la sigla dei metodi di cifratura usati per cifrare la password utente (i protocolli sono ordinati in funzione del grado di sicurezza offerto, dove NTLMv2 è il più recente e il più sicuro).
Come si vede tutti i protocolli di autenticazione, ad eccezione di ''NTLM'', richiedono un solo sistema di cifratura.
Come si vede tutti i protocolli di autenticazione, ad eccezione di ''NTLM'', richiedono un solo sistema di cifratura.
{{ Warningbox | ''PassNT'' e ''PassLM'' cifrano la password senza tenere conto di nome utente e dominio, mentre come già scritto ''PassNTLMv2'' sfrutta anche i suddetti parametri. Ne consegue che gli hash ''PassNT'' e ''PassLM'' di una certa password sono sempre i medesimi a prescindere dal nome utente e dal dominio specificato, mentre nel caso di ''PassNTLMv2'' cambia in funzione del loro valore}}
{{ Warningbox | ''PassNT'' e ''PassLM'' cifrano la password senza tenere conto di nome utente e dominio, mentre come già scritto ''PassNTLMv2'' sfrutta anche i suddetti parametri. Ne consegue che gli hash ''PassNT'' e ''PassLM'' di una certa password sono sempre i medesimi a prescindere dal nome utente e dal dominio specificato, mentre nel caso di ''PassNTLMv2'' cambia in funzione del loro valore.}}
 
=== Controllo del funzionamento di cntlm ===
 
Se il test effettuato al punto precedente è risultato positivo è il momento di provare ad eseguire cntlm in modalità normale (ma avviandolo sempre da terminale, non come demone).
Da terminale digitare:
<pre># cntlm -T log.txt -Isv -a ''auth'' -u mia_utenza -d AZIENDA IP_proxy:porta</pre>
A questo punto si dovrebbe vedere il cursore rimanere fermo (è possibile terminare l'esecuzione di cntlm in qualsiasi momento premento CTRL+C), segno che cntlm è avviato e in ascolto. Alcune note sulle nuove opzioni usate:
* '''-T''' permette di indicare un file di log specifico in cui salvare tutte le informazioni prodotte da cntlm;
* '''-a''' permette di specificare il protocollo di autenticazione, usare quello indicato dal programma stesso in modalità test (si veda sezione precedente). In teoria questo parametro può anche essere omesso visto che cntlm dovrebbe essere in grado si selezionare autonomamente il protocollo corretto;
* '''-s''' e '''-v''' permettono di stampare molte più informazioni rispetto al normale.
 
Aprire una nuova finestra e testare il funzionamento di cntlm usando ad esempio ''aptitude'' (o ''apt-get'' o quello che più aggrada) e ''wget''. Esempi di test:
<pre># aptitude update</pre>
<pre>$ wget http://indirizzo_test/file.test</pre>
Se i sudetti comandi funzionano correttamente è allora possibile passare direttamente alla sezione successiva e definire in modo definitivo il file di configurazione ''cntlm.conf'', viceversa sarà necessario esaminare il file di log per cercare di capire cosa sia andato storto (i codici degli headers HTTP possono dare utili indicazioni).
 
=== Modifica finale di ''cntlm.conf'' ===
 
Se i precedenti test hanno dato esito positivo è possibile arrestare l'istanza precedente avviata di cntlm (se ancora non lo si era fatto) e quindi editare in modo definitivo il file <code>/etc/cntlm.conf</code>.
Al lettore la scelta se creare un file di configurazione minimale (cioè privo di tutti i commenti) oppure no. Di seguito un esempio di file minimale (sono inclusi tutti e tre gli hash della password utente, ma chiaramente solo uno o due sono realmente necessari come già detto):
<pre>
Username        nome_utente
Domain          AZIENDA
PassLM          FAK3FAK3FAK3FAK3FAK3FAK3FAK3FAK3
PassNT          F@KEF@KEF@KEF@KEF@KEF@KEF@KEF@KE
PassNTLMv2      FAKEFAKEFAKEFAKEFAKEFAKEFAKEFAKE
Proxy          IP_proxy
NoProxy        localhost, 127.0.0.*, 10.*, 192.168.*
Listen          3128
Auth            NTLMv2
</pre>
Si noti che il parametro ''Auth'' potrebbe essere volendo omesso poiché cntlm è in grado di determinarlo autonomamente al suo avvio (così come il parametro ''flag'').
 
== Possibili problemi ==
 
=== credentials rejected ===
 
Qualora durante il test di cntlm si dovesse ricevere l'errore ''credential rejected'' oltre a controllare di non aver specificato una password sbagliata assicurarsi anche che utente e dominio siano corretti.
Si noti che sebbene in windows spesso il nome utente venga specificato come 'DOMINIO\nome_utente', è in realtà errato passare a cntlm un parametro del tipo <code>-u 'DOMINIO\nome_utente'</code>, infatti è invece corretto passare semplicemente <code>-u nome_utente.</code>
 
=== 403 Forbidden ===
 
Se la risposta (''header HTTP'') che riceve cntlm dal proxy windows è <code>403 Forbidden</code> è possibile che l'errore sia dovuto ad un rifiuto degli headers che normalmente i vari applicativi come APT e wget generano. Per esempio in un sistema su cui è installato anche <code>apt-cacher</code> il parametro <code>User-Agent</code> è nei due casi (rispettivamente):
<pre>apt-cacher/1.7.10 libcurl/7.38.0 GnuTLS/3.3.8 zlib/1.2.8 libidn/1.29 libssh2/1.4.3 librtmp/2.3</pre>
<pre>Wget/1.16 (linux-gnu)</pre>
Se questo fosse il caso è possibile istruire cntlm affiché sostituisca i predetti valori con uno "più comune". È quindi sufficiente editare il file <code>/etc/cntlm.conf</code> è decommentare (o aggiungere) quanto segue:
<pre>
# Headers which should be replaced if present in the request
#
Header        User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
</pre>
Naturalmente è necessario riavviare il demone di cntlm perché si carichi questo nuovo parametro.
{{ Box | Nota | A seguito di questa variazione TUTTE le richieste indirizzate a cntlm vedranno il parametro ''User-Agent'' modificato, pertanto può essere conveniente evitare di indicare cntlm come proxy per quelle applicazioni che permettono nativamente di indicare un proprio proxy, come molti dei browser più comuni.}}
 
== Approfondimenti ==
 
=== Manpages ===
 
<code>man cntlm</code>
 
=== Sitografia ===
 
* [http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html Header status codes]
* [http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html Header definitions]
 
* [http://cntlm.sourceforge.net/cntlm_manual.pdf Manuale pdf ufficiale]
* [http://sourceforge.net/p/cntlm/discussion/702675/thread/52239c62/ Help sito ufficiale]
* [http://serverfault.com/questions/587548/unable-to-configure-cntlm-on-ubuntu-for-ntlm-authentication Server fault]
* [http://www.toms-blog.com/linux-behind-ntlm-authentication-proxy-using-cntlm/ Tom's blog]
* [http://superuser.com/questions/395167/configuring-linux-to-use-windows-proxy Superuser]
* [http://linuxfaq.wikidot.com/cntlm Linuxfaq]
* [http://askubuntu.com/questions/23666/apt-get-does-not-work-with-proxy Askubuntu]
* [http://blog.timmybankers.nl/2014/03/17/Using-Cntlm-to-bypass-your-corporate-proxy/ Blog]
* [https://sites.google.com/site/jestinjoy//blog/isa-server-and-ntlm Google]




3 581

contributi