cntlm. Proxy con autenticación para herramientas que no admiten la autenticación windows

cntlm funciona como un servicio de windows, y se ocupa de la autenticación con el proxy de todas esas herramientas que no lo soportan.

 

En mi caso, tenemos, por ejemplo f5editor, owncloud, tortoise git… Aceptan parámetros de proxy, pero con autenticación no funciona.

La instalación de cntlm es sencilla, y su configuración se basa en un archivo de texto. Eso sí, usuario y contraseña del dominio quedan en claro.

C:\Program Files (x86)\Cntlm

En cntlm.in configuramos:

Username    myuser
Domain        mydomain
Password    mypass
...
Proxy       192.168.1.10:8080
Proxy       192.168.1.11:8080
...
NoProxy        localhost, 127.0.0.*, 10.*, 192.168.*

Probamos la conexión:

$ cntlm -I -M http://test.com

Espero que os sea muy útil

Autenticación de apache con Directorio Activo. LDAP, NTLM

Queremos que una serie de máquinas con apache, usen el siguiente método de autenticación:

  1. Validar usuario en directorio activo
  2. Validar usuario local (si hay problemas con el directorio activo).

Instalamos los módulos de apache para aceptar ldap:

apt-get install -y libapache-authznetldap-perl  libapache-session-ldap-perl libapache2-mod-ldap-userdir

Activamos el módulo de ldap en apache

a2enmod authnz_ldap

Versión 1: Usuario válido en dominio

El excelente tutorial de adam.shand.net , nos propone una primera versión:
<Location /aplicacion1>
AuthType Basic
AuthBasicProvider ldap
AuthName "Restricted Directory"
require valid-user

AuthLDAPURL ldap://adserver.domain.com/dc=domain,dc=com?sAMAccountName?sub
AuthLDAPBindDN anonymous@domain.com
AuthLDAPBindPassword secretpassword
</Location>

Para probar la cadena de conexión, se puede usar Apache Directory Studio.

Versión 2: Usuario válido en dominio de un grupo concreto (member of)

Añadimos en el parámetro AuthLDAPURL, la consulta después de sub, para que coja los usuarios de un dominio concreto.

<Location /aplicacion1>
AuthType Basic
AuthBasicProvider ldap

AuthName "Restricted Directory"
require valid-user

AuthLDAPURL ldap://adserver.domain.com/dc=domain,dc=com?sAMAccountName?sub?(memberOf=CN=departmentA,CN=Users,DC=domain,DC=com)
AuthLDAPBindDN anonymous@domain.com
AuthLDAPBindPassword secretpassword
</Location>

Versión 3: Aceptar también usuarios locales

Cambiamos el comportamiento de la autenticación ldap, para que no sea la única opción, con AuthzLDAPAuthoritative off

Además, aceptamos también la configuración desde nuestro fichero local de usuarios

<Location /aplicacion1>
AuthType Basic
AuthName "Restricted Directory"
AuthBasicProvider ldap
require valid-user

# Configuracion contra directorio activo:
AuthLDAPURL
ldap://adserver.domain.com/dc=domain,dc=com?sAMAccountName?sub?(memberOf=CN=departmentA,CN=Users,DC=domain,DC=com)
AuthLDAPBindDN anonymous@domain.com
AuthLDAPBindPassword secretpassword

AuthzLDAPAuthoritative off

# Configuración local

AuthUserFile /etc/apache/.htpasswd
AuthGroupFile /dev/null

Para crear el archivo local de contraseñas en apache:

htpasswd -c .htpasswd user

 

Para editar las contraseñas de un usuario concreto:

 

htpasswd .htpasswd user

 

Versión 4: aceptando también ntlm

 

Para rizar el rizo, querríamos que acepte las credenciales de windows de forma directa, sin que el usuario tenga que introducir las credenciales.

Vamos a usar el módulo Apache2::AuthenNTLM

El problema es que no se verifica el grupo de dominio, cualquier usuario que exista en dominio, entra en el apache.

<Location /aplicacion1>
AuthType ntlm, Basic
AuthBasicProvider ldap
AuthName "Restricted Directory"
require valid-user

# Configuracion contra directorio activo:
AuthLDAPURL
ldap://adserver.domain.com/dc=domain,dc=com?sAMAccountName?sub?(memberOf=CN=departmentA,CN=Users,DC=domain,DC=com)
AuthLDAPBindDN anonymous@domain.com
AuthLDAPBindPassword secretpassword

AuthzLDAPAuthoritative off

# Configuración local
# Configuración ntlm:
# domain pdc bdc
# pdc: primary domain controller
# bdc: backup domain controller
PerlAddVar ntdomain “name_domain1 name_of_pdc1”
PerlAddVar ntdomain “other_domain pdc_for_domain bdc_for_domain”

PerlSetVar defaultdomain wingr1
PerlSetVar splitdomainprefix 1
PerlSetVar ntlmdebug 1

AuthUserFile /etc/apache/.htpasswd
AuthGroupFile /dev/null

Versión 5: ntlm con módulo python

Legrandin  nos propone un módulo python para hacer más sencilla la integración con ntlm version 2.

El problema de este tipo de acceso, es que no permite autenticar sin el dominio. En caso de caida o aislamiento del dominio, no se puede recaer en los usuarios locales de nagios.

Existe opción de especificar grupos de dominios, aunque es experimental.

Instalar módulos que nos faltan:


sudo apt-get update
sudo apt-get install libapache2-mod-python python-crypto git
git clone https://github.com/Legrandin/PyAuthenNTLM2.git
cd PyAuthenNTLM2
sudo python setup.py install -f

La configuración de apache quedaría:

<Location /aplicacion1>
AuthType ntlm
AuthName "Restricted Directory"
require valid-user
# Configuración de autenticación ntlm:
PythonAuthenHandler pyntlm
PythonOption Domain adserver.domain.com
# pdc : Primary Domain Controller
PythonOption PDC 192.1.2.45
# bdc : Backup Domain controller.
PythonOption BDC 192.1.2.46
Require group grupo_dominio1,grupo_dominio2

Versión 6: libapache2-authenntlm-perl

Vamos a probar authenntlm-perl, que, según este tutorial es ridículamente fácil:

apt-get install libapache2-authenntlm-perl