
Propósito de este manual:
Configurar un pc como proxy-cache y utilizar los grupos del Active Directory de windows 2003 server para la gestión de usuarios del proxy
Descripción:
Hace ya algún tiempo instale un squid con winbind, sobre linux(debian), para autenticar con un dominio windows 2000 y fue una odisea, es realmente fácil cuando averiguas como funciona el squid, pero los primeros pasos son realmente un calvario. Además la integración con la autentificación NTLM, utilizando winbind deja mucho que desear, si, funciona, pero la gestión de usuarios es desde el squid y cada vez que reinicias el servidor de dominio que tiene asociado el squid, tienes que reiniciar el servicio winbind, lo cual no resulta nada practico.
debian no hace mucho liberó su versión 4 (etch) y esto me hizo replantear la instalación del servidor proxy. Un upgrade de versión en debian es algo peligroso, si lo haces en un equipo que esta en producción y del cual dependen unos cien usuarios, ya se que no son muchos, pero hay que cuidarlos igual. Decidí volver a instalar el debian con squid, squidguard, apache 2 y sarg, vamos un servidor proxy de lo más profesional. Revisando la web de squid y algunos manuales descubrí que una alma caritativa había dedicado algo de su tiempo en crear un "helper" para integrar squid con ldap, la solución a mis problemas. Lo que me hizo plantearme el escribir todos los pasos para configurar un squid con integración con ldap,creo que funciona en cualquier ldap pero solo lo he probado en el de microsoft.
Escenario:
Tres tipos de usuario:
Empezamos:
Primero en el active directory hay que crear una unidad organizativa UO, te recomiendo que la crees en la raíz, la llamaremos Internet, ahora dentro de esta UO tienes que crear tantos grupos como necesites para agrupar a tus usuarios por necesidades, en este manual usaremos los grupos:
En el grupo AccesoTotal añadiremos a todos los usuarios que puedan visitar casi todo el contenido de internet.
En el grupo AccesoLimitado añadiremos a todos los usuarios que puedan visitar los websites que permita la empresa tales como bancos, servidores locales, web de la propia empresa, y cualquier otro sitio que se considere.
Si el usuario no esta en cualquiera de estos grupos se le denegara el acceso a internet.

Esto es todo lo que tenemos que hacer en windows. Pasamos al servidor debian etch 4, primero instalamos el squid, utilizamos apt para instalar la ultima versión, este manual esta escrito para squid (2.6.5-6)
proxy:~# apt-get install squid squid-common winbindAhora solo tenemos que configurar el squid, se muestra linea a linea el archivo de configuración que se utiliza en este manual, pero recuerda que el archivo de configuración original consta de más de 4000 lineas entre comentarios y parámetros, utiliza esta configuración de base. Al final de este documentos podrás encontrar una copia sin comentar y lista para usar en tu squid.
proxy:~# vi /etc/squid/squid.confhttp_port 3128icp_port 0forwarded_for offhierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERYacl apache rep_header Server ^Apache
broken_vary_encoding allow apacheaccess_log /var/log/squid/access.log squidemulate_httpd_log onhosts_file /etc/hostscache_dir aufs /var/spool/squid/ 2000 16 256cache_mem 128 MBHasta aquí todo es bastante sencillo y estándar, ahora se complica con la conexión con el LDAP de windwos
auth_param basic program /usr/lib/squid/ldap_auth -R -b "dc=babilonics,dc=com" -D "cn=usuarioldap,ou=Internet,dc=babilonics,dc=com" -w "micontraseña" -f sAMAccountName=%s -h 192.168.74.2Como esta linea es básica para que funcione, "el invento", se comenta punto por punto
external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -R -b "dc=babilonics,dc=com" -D "cn=usuarioldap,ou=Internet,dc=babilonics,dc=com" -w "micontraseña" -f "(&(objectclass=person) (sAMAccountName=%v) (memberof=cn=%a,ou=Internet,dc=babilonics,dc=com))" -h 192.168.74.2Como esta linea es básica para que funcione, "el invento", se comenta punto por punto
auth_param basic children 25
auth_param basic realm Babilonics Proxyauth_param basic credentialsttl 5 minutesacl CONNECT method CONNECT
acl Safe_ports port 80 443 1024-65535
#acl Safe_ports port 80 443acl SSL_ports port 443acl all src 0.0.0.0/0.0.0.0acl manager proto cache_objectacl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8acl purge method PURGEacl ldapSinAcceso external ldap_group SinAcceso acl ldapConAcceso external ldap_group ConAcceso acl dstcomun dstdomain "/etc/squid/acl/comun.acl"acl ldap-group proxy_auth REQUIREDoffline_mode onhttp_access deny !Safe_portshttp_access deny CONNECT !SSL_portshttp_access deny ldapSinAccesohttp_access allow ldapConAccesohttp_access allow manager localhost
http_access deny managerhttp_access allow purge localhost
http_access deny purgehttp_access allow localhosthttp_access deny allhttp_reply_access allow allicp_access deny allheader_access X-Forwarder-For deny all
header_access Via deny allheader_access Accept-Language deny all#header_access User-Agent deny all
#header_replace User-Agent babilonics/1.0 (CP/M; 16-bit)Otra opción es falsear esta información, si en tu red se utiliza el interenet explorer puedes enviar la cabecera del firefox o viceversa, pero claro esto también puede darte problemas en otras webs
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320cache_effective_user proxy
cache_effective_group proxycoredump_dir /var/spool/squiderror_directory /usr/share/squid/errors/SpanishHasta aquí todas las lines del archivo de configuración del squid, ubicado en /etc/squid/squid.conf, ahora solo tienes que añadir los usuarios en los grupos corespondientes del Active Directory de windows, configurar el navegador de los usurios con dirección ip y el puerto del proxy, puedes hacerlo con las politicas de windows 2000 o 2003 server (windows 2kx server).
Ahora antes de reiniciar el squid, tenemos que crear el directorio acl y añadir el archivo comun.acl
Creamos el directorio acl en el directorio de configuración del squid
proxy:~# mkdir /etc/squid/aclCreamos el archivo comun.acl y lo llenamos con una lista de dominios permitidos como la que se muestra más abajo.
proxy:~# vi /etc/squid/acl/comun.aclConcedemos permisos de escritura y lectura solo al usuario root
proxy:~# chmod 600 /etc/squid/acl -REl archivo de dominios comunes, estos son los dominios donde los usuarios limitados pueden acceder.
.babilonics.com
.babilonics.net
.banco.com
.bancos.net
.elsuper.com
.etc.com
.tuweb.comYa podemos reiniciar nuestro nuevo proxy-cache squid
proxy:~# /etc/init.d/squid restartUtiliza este codigo para copiar y pegar
archivo de configuracion sin comentar
http_port 3128
icp_port 0
forwarded_for off
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
cache deny QUERY
acl apache rep_header Server ^Apache
broken_vary_encoding allow apache
access_log /var/log/squid/access.log squid
emulate_httpd_log on
hosts_file /etc/hosts
cache_dir aufs /var/spool/squid/ 2000 16 256
cache_mem 128 MB
auth_param basic program /usr/lib/squid/ldap_auth -R -b "dc=babilonics,dc=com" -D "cn=usuarioldap,ou=Internet,dc=babilonics,dc=com" -w "micontraseña" -f sAMAccountName=%s -h 192.168.6.2
external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -R -b "dc=babilonics,dc=com" -D "cn=usuarioldap,ou=Internet,dc=babilonics,dc=com" -w "micontraseña" -f "(&(objectclass=person) (sAMAccountName=%v) (memberof=cn=%a,ou=Internet,dc=babilonics,dc=com))" -h 192.168.6.2
auth_param basic children 25
auth_param basic realm babilonics Proxy
auth_param basic credentialsttl 1 minutes
acl CONNECT method CONNECT
acl Safe_ports port 80 443 1024-65535
acl SSL_ports port 443
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl purge method PURGE
acl ldapLimitado external ldap_group AccesoLimitado
acl ldapTotal external ldap_group AccesoTotal
acl dstcomun dstdomain "/etc/squid/acl/comun.acl"
acl ldap-group proxy_auth REQUIRED
offline_mode on
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow ldapLimitado dstcomun
http_access allow ldapTotal
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access allow localhost
http_access deny all
http_reply_access allow all
icp_access deny all
header_access X-Forwarder-For deny all
header_access Via deny all
header_access Accept-Language deny all
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
cache_effective_group proxy
coredump_dir /var/spool/squid
error_directory /usr/share/squid/errors/Spanish
<-- Instalar un servidor debian "Básico"
Instalar filtrado web squid + squidGuard en debian -->
Comentarios
(SaYa) Exelente "How To" y solicito tu ayuda por favor
Te felicito, por la perfecta explicacion de todos los pasos no he encontrado ninguno how to mejor que me permitiera entender e implementar la autentificacion con AD para squid
Abusando de tu confianza, espero me puedas ayudar, pues apartir de seguir tu manual, quise ir un poko mas haya por lo cual me avente a probar con OPENLDAP y entonces he logrado instalarlo y configurarlo sobre un debian etch superando la autentificacion del admin cambiando:
auth_param basic program /usr/lib/squid/ldap_auth -R -b "dc=babilonics,dc=com" -D "cn=usuarioldap,ou=Internet,dc=babilonics,dc=com" -w "micontraseña" -f sAMAccountName=%s -h 192.168.6.2por esto
auth_param basic program /usr/lib/squid/ldap_auth -R -b "dc=babilonics,dc=com" -D "cn=usuarioldap,ou=Internet,dc=babilonics,dc=com" -w "micontraseña" -f uid=%s 192.168.6.2pero al momento de seleccionar a los grupos, :S
external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -R -b "dc=babilonics,dc=com" -D "cn=usuarioldap,ou=Internet,dc=babilonics,dc=com" -w "micontraseña" -f "(&(objectclass=person) (sAMAccountName=%v) (memberof=cn=%a,ou=Internet,dc=babilonics,dc=com))" -h 192.168.6.2kreo ke no he hayado el problema pues lo que intente hacer es:
external_acl_type ldap_group %LOGIN /usr/lib/squid/squid_ldap_group -R -b "dc=babilonics,dc=com" -D "cn=usuarioldap,ou=Internet,dc=babilonics,dc=com" -w "micontraseña" -f "(objectclass=person) (uid=%v) (memberof=cn=%a,ou=Internet,dc=babilonics,dc=com)" -h 192.168.6.2sin niguna suerte, ojala puedas y quieras ayudarme, agradecere mucho tu ayuda ;), gracias de antemano
PD: mi openLDAP ya es funcional tanto ke puedo autenticar usuarios para el dominio de windows no tengo problemas con el openLDAP
memberof con openldap
A ver , el campo memberof no es mas q un campo y no existe como tal en openldap, es decir no tiene la misma filosofía lo unico que tienes que hacer para solucionar el problema es quitar la entrada memberof, y x ejemplo usar filtro como gid=600, añades a tu esquema el campo gid, y para los que todos los gid = 600 es que tienen que tener correo, te he dicho el campo gid pero puede ser otro que te venga en gana. No se si me he explicado bien . saludos
Forma de Login
Muy bueno el Manual, y muy bien explicado el paso a paso. Ahora tengo una consulta, existe alguna forma de realizar esta misma integración Squid+ldap, pero que las credenciales del usuario ldap se pasen a squid al momento del login? para que el usuario no tenga que ingresar usuario y contraseña cada vez que abre una nueva sesion de navegador.-
Muchas Gracias
Enviar un comentario nuevo