Squid con soporte ldap

Saltar a: navegación, buscar
Icon-usage.png
Las personas encargadas de la edición de esta página consideran que aún necesario efectuar cambios, quizás importantes, en la misma.

SQUID cuenta con una cantidad enorme de variables dentro de su fichero de configuración /etc/squid/squid.conf, el alcance de esta receta se limita al soporte LDAP.

Introducción

Que es SQUID

Squid es software libre que implementa un servidor proxy y un demonio para caché de páginas web.

Mas información en http://es.wikipedia.org/wiki/Squid

Consideraciones iniciales

para el buen desempeño de este procedimiento debe:

  1. . Configurar LDAP
  2. . Saber ingresar Usuarios y grupos en LDAP

3. Saber instalar SQUID
4. Conocimientos de SQUID y manejo de un editor tipo vi | nano | pico.

Estructura de ejemplo

Img0.png

Autenticación simple

Asegúrese que el servidor LDAP funciona con el programa externo de autenticación, ejecute en la linea de comandos /usr/sbin/basic_ldap_auth -b "ou=people,dc=Antiquitera,dc=site" -v 3

  • -b "ou=people,dc=Antiquitera,dc=site" indica donde se encuentran los usuarios de árbol ldap
  • -v 3 indica que se esta utilizando la versión 3 del protocolo LDAP.

Al ejecutar el comando se da un usuario y su contraseña separadas por un espacio en blanco, si el usuario existe y la contraseña es la correcta el resultado es OK sino, el resultado es ERR Success

jvelez@Antiquitera:~>/usr/sbin/basic_ldap_auth  -b  "ou=people,dc=Antiquitera,dc=site" -v 3 
pperez 13sktocnghkle7
OK
pperez klxmruiwcmfg
ERR Success

ahora como root edite el archivo squid.conf

vi /etc/squid/squid.conf

}ingrese estas lineas al inicio del archivo

auth_param basic program /usr/sbin/basic_ldap_auth  -b  "ou=people,dc=Antiquitera,dc=site" -v 3 

Ahora busque la sección de las ACL (al principio del archivo) e ingrese la siguiente linea

acl ldapauth proxy_auth REQUIRED

Ahora busque las lineas http_access y realice las siguientes modificaciones:
La linea http_access allow localhost, comentela, debe quedar así

# http_access allow localhost

Ingrese la siguiente linea

http_access allow ldapauth

Y finalize con:

http_access deny all

Las lineas anteriores que ingreso o modifico deben preceder a http_access deny all, de lo contrario SQUID las ignorara.
Ahora guardamos el archivo y salimos, luego reiniciamos SQUID con

systemctl restart squid.service

Luego de esto ya podemos configurar nuestro navegador favorito de Internet colocando la dirección del proxy y el puerto a utilizar, si no se ha modificado, el 3128

Autorización de grupos

Hasta ahora todos nuestros usuarios que están en el DIT o árbol LDAP (tienen una entrada valida con contraseña) navegan por Internet, ahora necesitamos que solo los usuarios que pertenecen a cierto grupo naveguen o que los usuarios de cierto grupo naveguen de forma restringida y otros sin restricciones, este proceso se llama autorización, para esto SQUID se apoya en el programa externo ext_ldap_group_acl , nuevamente antes de incluirlo dentro del archivo de configuración de SQUID (/etc/squid/squid.conf) es bueno realizar pruebas desde la linea de comandos
/usr/sbin/ext_ldap_group_acl -b "ou=group,dc=antiquitera,dc=site" -f "(&(objectclass=posixGroup)(cn=%a)(member=uid=%v,ou=people,dc=antiquitera,dc=site))" -B "ou=people,dc=antiquitera,dc=site" -v 3 -s sub


Donde:

  • -b "ou=group,dc=antiquitera,dc=site" indica donde se encuentra el contenedor de grupos dentro del árbol LDAP
  • -f "(&(objectclass=posixGroup)(cn=%a)(member=uid=%v,ou=people,dc=antiquitera,dc=site))", indica el filtro con que se realizara la busqueda dentro del arbol LDAP, (cn=%a) indica cual es el grupo objetivo de la busqueda, (member=uid=%v,ou=people,dc=antiquitera,dc=site) busca dentro del atributo member de los objetos de grupo del árbol LDAP
  • -B "ou=people,dc=antiquitera,dc=site" indica donde se encuentras los usuarios en el árbol LDAP.
  • -v 3 indica que se esta utilizando la versión 3 del protocolo LDAP
  • -s sub indica que la búsqueda se realice "en profundidad" recursivamemte desde los puntos de entrada hasta las ultimas ramas del árbol.

Al ejecutar el comando se da un usuario y un grupo asociado separados por un espacio en blanco, si el usuario existe y pertenece al grupo el resultado es OK sino, el resultado es ERR

jvelez@Antiquitera:~> /usr/sbin/ext_ldap_group_acl- b "ou=group,dc=antiquitera,dc=site" 
-f "(&(objectclass=posixGroup)(cn=%a)(member=uid=%v,ou=people,dc=antiquitera,dc=site))"
-B "ou=people,dc=antiquitera,dc=site"  -v 3 -s sub
pperez tesoreria
ERR
pperez ventas
OK
  • Por motivos de formato del wiki la instrucción se dividió en tres lineas.
  • Nota: el atributo member de los contenedores de grupos, contiene el nombre completo (ruta) del los objetos de usuario, por ejemplo para el usuario pperez el atributo completo member es uid=pperez,ou=people,dc=antiquitera,dc=site, otras implementaciones de grupos en LDAP usan el atributo memberUID, para este tipo de atributo el parámetro de búsqueda es (memberUID=%v)

Ahora se configurara SQUID para que solo los usuarios del grupo ventas puedan salir a Internet, para eso, habiendo ejecutado la configuración de #Autenticación simple siga los siguientes pasos.
Edite el archivo de configuración de SQUID.

vi /etc/squid/squid.conf

Ingrese al inicio del archivo /etc/squid la siguiente linea

external_acl_type group_auth %LOGIN /usr/sbin/ext_ldap_group_acl-b "ou=group,dc=antiquitera,dc=site"
-f "(&(objectclass=posixGroup)(cn=%a)(member=uid=%v,ou=people,dc=antiquitera,dc=site))" -B
"ou=people,dc=antiquitera,dc=site"  -v3 -s sub
  • Por motivo de formato del wiki la linea se dividió en 3, en el archivo squid.conf debe quedar como una sola linea

Ahora busque TAG: acl y desplácese al final de la documentación de acl e ingrese la siguiente linea

acl Auth-internet external group_auth ventas

Aqui, Auth-internet es el nombre de la acl, Group_auth es el nombre de la acl externa definida en external_acl_type y ventas es el nombre del grupo en el Arbol ldap al cual le vamos a autorizar acceso a Internet
Ahora busque TAG: http_access y desplácese al final de la documentación de http_access y haga los siguentes cambios
La directiva http_access allow ldapauth comentela. debe quedar asi

# http_access allow ldapauth 

Ingrese la siguente linea

http_access allow Auth-internet 

Y finalize con br

http_access deny all

Ahora puede reiniciar SQUID.

systemctl start squid.service

Seguridad

Estos mecanismos son intrínsecamente inseguros.. tanto usuario como password se transmite en texto en claro entre el navegador cliente y el servidor squid

Autenticación kerberos clientes y servidor linux/Unix

En un ambiente solo linux una forma segura de autenticar clientes es mediante kerberos, el mecanismo se activa con

/usr/sbin/negotiate_kerberos_auth 

ejecutar este programa en la linea de comandos no retornara nada, primero debe crear un principal HTTP/fqdn@REALEM con ayuda de kadmin.local en el servidor kerberos

kldap:/etc/squid # kadmin.local
Authenticating as principal avelez/admin@ANTIQUITERA.SITE with password.
kadmin.local:  addprinc -randkey HTTP/kldap.antiquitera.site 
....
kadmin.local: ktadd -k /etc/squid/HTTP.keytab  HTTP/kldap.antiquitera.site
...
kadmin.local: exit

Luego cambie el propietario al archivo /etc/squid/HTTP.keytab para que pueda leerlo squid

kldap:/etc/squid chown squid:squid HTTP.keytab

y agregue las siguientes lineas a /etc/squid.conf al principio del archivo agregue esto

auth_param negotiate program /usr/sbin/negotiate_kerberos_auth -k /etc/squid/HTTP.keytab
auth_param negotiate children 10
auth_param negotiate keep_alive on

donde finaliza la sección de las acl's aguegue esto

acl password proxy_auth REQUIRED
http_access deny !password
http_access allow password
http_access deny all

reinice squid

 kldap:/etc/squid # systemctl restart squid.service

En los clientes debe configurar el proxy.. dirección del servidor proxy.. puerto squid (3128)

Eso es todo... por ahora

Edición

Inicial
--jvelez 00:09 11 jul, 2009 (UTC)
Primera modificación - actualización documento
--jvelez (discusión) 17:26 7 ene 2017 (UTC)
-Se actualizo el documento para los nuevos programas

* /usr/sbin/basic_ldap_auth 
* /usr/sbin/ext_ldap_group_acl

-Se adiciono la parte de kerberos

* /usr/sbin/negotiate_kerberos_auth