17 abr 2011

Doble Validación de usuarios en Squid-Cache con PAM

Escenarios atípicos soluciones correctas

Optimizando los recursos y servidores de una entidad que contaba con dos servidores proxy-cache Squid, para redes y usuarios diferentes, propusimos usar un solo servidor como proxy y que validara de dos formas diferentes.

Escenario

1er servidor proxy estaba validando contra un servidor LDAP externo

2do servidor proxy estaba validando con una librería de Squid llamada ncsa_auth contra un fichero password, alojado en /etc/squid/

Cuestionamiento

¿Por qué no unificar todos los usuarios al LDAP o todos los usuarios al fichero password?

Re: Existen servicios en la red de esta entidad que validan contra el LDAP, como es el caso de un servidor FTP, Correo Electrónico, Jabber, Antivirus, etc. y los usuarios que están en el fichero password, son usuarios externos y que muchos de ellos son temporales y no deberían de estar relacionados a los otros servicios que están en la intranet.

No se preguntó más y comenzamos la tarea de preguntarle a San Google y este respondió muy poco y lo que respondió, lo dio bastante escueto y poco documentado, ya que nos presentamos a un escenario atípico, así que propuse crear un escenario virtual y darle solución cuanto antes para posteriormente llevarlo a la práctica.

Solución

Debemos de tener instalada como requisito indispensable, la librería libapache-htpasswd-perl (Administrar archivo de contraseñas Unix crypt-style), ya que esta librería es la que tiene la aplicación htpasswd y si no tenemos previamente instalado el apache2 o no vamos a usarlo, no la tendríamos en el sistema.

Creamos el fichero password en la ruta que decidamos y adicionamos nuestro primer usuario, llamado user1

htpasswd -c /etc/squid/password user1
New password: (introducimos la contraseña)
Re-type new password: (volvemos a introducir la contraseña)

Debemos instalar libpam-ldapd y configurarla luego de instalada, ya que esta es la que nos va permitir usar la librería de PAM con LDAP, para que PAM se pueda conectar con servidor externo de LDAP.
Nota: Por que usar libpam-ldapd y no usar libpam-ldap, la librería primera delega las consultas LDAP a un servicio no privilegiado centralizado (nslcd) que permite establecer una separación entre el proceso que utiliza la información LDAP y el demonio que hace las consultas LDAP. Esto simplifica la gestión de las conexiones LDAP seguras, credenciales de autenticación LDAP, ofrece un mecanismo más sencillo para realizar el tratamiento de conexiones fallidos y la depuración y evita cargar LDAP y las librerías asociadas en la mayoría de las aplicaciones. No siendo así con la segunda librería.

aptitude install libpam-ldapd

Nos preguntara los siguientes puntos
Identificador del servidor LDAP: ldap://ldap.intranet.org
Nombre distinguido (dn): dc=intranet,dc=org
Versión de LDAP: 3
Hace falta un usuario para acceder a la base de datos ldap: Si
Desea hacer que la configuración solo pueda leer o escribir el propietario: SI
Dar privilegios especiales de ldap para root: No
Cuenta ldap para root: cn=admin,dc=intranet,dc=org
Contraseña ldap para root: (introducimos la contraseña del admin en LDAP)
Local crypt to use when changing passwords: md5

Ya está instalada, configurada nuestra libreria y lista para ser usada por PAM.
Crear el fichero que por el cual Squid le preguntara a PAM como validar sus usuarios
Este fichero siempre debe de ir con el nombre del servicio, según dice el manual de PAM
touch /etc/pam.d/squid
Editar este fichero con algo similar a:

#%PAM-1.0

auth sufficient /lib/security/pam_ldap.so config=/etc/pam_ldap.conf
account sufficient /lib/security/pam_ldap.so config=/etc/pam_ldap.conf

auth optional /lib/security/pam_userdb.so db=/etc/squid/password
session optional /lib/security/pam_userdb.so db=/etc/squid/password
account optional /lib/security/pam_userdb.so db=/etc/squid/password


Aún no hemos terminado, queda por configurar el squid para que valide con PAM, agregándole esta línea.

auth_param basic program /usr/lib/squid/pam_auth
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

Según el manual de pam_auth
Debemos cambiarles los permisos siguientes, si no está librería es inutilizable
chown root pam_auth
chmod u+s pam_auth

Después de esto reiniciamos el Squid
invoke-rc.d squid restart

Y nuestra a validación doble en squid. Ya está funcional
Nota: el servicio PAM no hace falta reiniciarlo, solo se reinicia el servicio que usa PAM, en este caso es el Squid

5 comentarios:

  1. hola
    sabes como hacer que el squid proxy se valide con active directory ??
    gracias por compartir.

    ResponderEliminar
  2. Microsoft Active Directory es un directorio compatible con LDAP v3 y por lo tanto puede ser utilizado como un mecanismo para autenticar a los usuarios. Squid soporta un método de autenticación LDAP v3. Puedes obtener resultados similares utilizando Samba y winbind, sin embargo, el proceso es mucho más complicado.

    Te recomiendo que leas este link.

    http://www.papercut.com/kb/Main/ConfiguringSquidProxyToAuthenticateWithActiveDirectory

    ResponderEliminar
  3. Yo tengo squid 3.1 corriendo y autenticando contra AD de manera transparente en todos los browsers, hasta aplicaciones AIR. El tema es que lo que quiero hacer es permitir a usuarios que no tengan cuenta en el AD poder navegar, con otro tipo de autenticacion. Así yo puedo generar usuarios para los visitantes por ejemplo y despues borrarlos, sin tocar el AD. Alguna ayuda?

    ResponderEliminar
  4. Gustavo... podrias compartir tu procedimiento de validacion con AD ?
    gracias

    ResponderEliminar
  5. El Paso - Casinos - Mapyro
    El Paso, Texas 태백 출장샵 - Find the best hotels in El 사천 출장샵 Paso. 울산광역 출장샵 See map. 735 목포 출장안마 S El Paso Rd, El 의왕 출장안마 Paso, Texas, 97230. Get Directions.

    ResponderEliminar