Thursday, September 15, 2011

Squid: Autentificación contra un Active Directory (NTLM)

Saludos estimados lectores, un amigo hace unos días me consulto como configurar Squid de tal forma que autentifique con los usuarios de un Active Directory, hay varias formas de realizar esto, pero en esta guia vamos a utilizar la ayuda de Samba y Winbind.

Si no sabes lo que es Squid ni Samba, te recomiendo leer las siguientes guias basicas de mi autoria:

Recomendados:

Opcionales:

La siguiente guía puede aplicarse a cualquier distribución, ya que es el mismo procedimiento. Pero en esta guia estoy utilizando CentOS, cualquier inconveniente que tengan en sus distribuciones, me las dejan saber.

Para esta guia tengo el siguiente escenario:

1) Tengo 1 Servidor Windows Server 2003, el cual tiene configurado Active Directory y DNS, su FQDN es adwin.punto-libre.org.

2) Tengo un servidor CentOS 5.6 con Squid 2.6.

Teniendo en cuenta esto vamos a proceder a instalar instalar Samba:

# yum install samba samba-common

Y luego editamos su archivo de configuración /etc/samba/smb.conf quedando de la siguiente forma (Tener en cuenta que deben adaptar el archivo a su escenario):

[global]
workgroup = punto-libre        
password server = punto-libre.org   
security = domain
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind separator = /
winbind use default domain = true
netbios name = CentOS
passdb backend = tdbsam
winbind cachetime = 10
interfaces = 10.0.1.0/24 127.0.0.1/8    #Adaptar a su red

Luego reiniciamos el servicio samba y winbind:

# service smb restart
# service winbind restart

Registramos nuestro servidor (CentOS en mi caso) a el Active Directory del servidor Windows:

# net join -S adwin.punto-libre.org -U Administrator (Sustituyan adwin.punto-libre.org por el FQDN de su servidor con AD)

Si nos lanza "Joined domain" esta todo bien hasta el momento, el siguiente paso seria verificar que Winbind esta funcionando correctamente. Esto lo hacemos con el comando wbinfo de las siguientes maneras:

# wbinfo -t
Nos deberá imprimir "checking the trust secret via RPC calls succeeded".

# wbinfo -u  
Nos deberá imprimir los usuarios que estan en el Active Directory del servidor Windows.

#wbinfo -g
Nos deberá imprimir los grupos que estan en el Active Directory del servidor Windows.

Si los 3 comandos anteriores nos lanzaron lo que esperábamos, es hora de proceder con el siguiente paso, el cual es configurar el Name Service Switch (nss), el cual es una librería que nos provee una interfaz para acceder a diferentes bases de datos de cuentas de usuario y claves.

Para asegurarnos de que tenemos la librería nss para winbind, verificamos que tenemos el archivo libnss_winbind.so.2.

Teniendo este archivo, editamos el archivo /etc/nsswitch.conf dejandolo de esta manera:

passwd: files winbind
group: files winbind

Luego borramos el archivo TDB /var/cache/samba/winbindd_idmap.tdb:

# rm -rf /var/cache/samba/winbindd_idmap.tdb

De esta manera forzamos a que se cree nuevamente el archivo TDB en caso de que este corrupto y no se actualice (Experiencia propia).

Reiniciamos los winbind:

# service winbind restart

Y comprobamos que esta funcionando correctamente el nss con los siguientes comandos:

# getent passwd
Nos deberá mostrar una lista parecida a la de el archivo passwd pero que contendra tanto los usuarios locales como los de el AD.

# getent group
Nos deberá mostrar una lista parecida a la de el archivo groups pero que contendrá tanto los grupos locales como los de el AD.

Configuración de Squid

Si todo hasta el momento ha salido bien podemos configurar Squid. Antes de continuar vamos a probar si es posible la autentificación, utilizando el siguiente comando (Obvio: Squid debe estar instalado):

# ntlm_auth --herlper-protocol=squid-2.5-basic --username=Administrator
Nos pedira la contraseña de Administrator y si todo sale bien nos imprimira "NT_STATUS_OK: Success (0x0)"

Luego debemos darle permisos a otras aplicaciones de utilizar las funcionalidades de Winbind, dandole los permisos correspondientes a un directorio con el siguiente comando:

# chmod -R 750 /var/lib/samba/winbindd_privileged

Ahora editamos el archivo de configuración de Squid /etc/squid/squid.conf, guiandonos de esta configuración de ejemplo:

#Autentificación
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

#Listas de Control
#Debemos crear un archivo que contendra los nombres de los usuarios que tendran permisos
#En este caso "allowed-ad-users"
acl adusers proxy_auth -i "/etc/squid/"allowed-ad-users"

#Acceso
http_access allow adusers (Se permite el acceso a los usuarios que esten en la lista)
http_access deny !adusers (Se niega el acceso a los usuarios que no esten en la lista)

Finalmente reiniciamos Squid, y lo ponemos a prueba:

# service squid restart

0 comentarios:

Post a Comment