Requerimientos: Squid >= 2.5 (con LDAP helpers)
Versión de Squid utilizada:
root@squid-testing:~# squid -vSquid Cache: Version 2.7.STABLE9
LDAP Helpers (ldap_auth y squid_ldap_group):
root@squid-testing:~# locate ldap_auth/usr/lib/squid/ldap_auth/usr/share/doc/squid/README.auth_module.ldap_auth.gzroot@squid-testing:~# locate squid_ldap_group/usr/lib/squid/squid_ldap_group/usr/share/man/man8/squid_ldap_group.8.gz
Antes de modificar la configuración del squid testeamos por la línea de comandos:
/usr/lib/squid/ldap_auth -R -D usuario@mi.dominio.net -w 'password_de_usuario' -b "dc=mi,dc=dominio,dc=net" -f "sAMAccountName=%s" -h ip_del_AD
Ejemplo:
root@squid-testing:~# /usr/lib/squid/ldap_auth -R -D morsa@redes.seguridad.net -w 'Mi-P2ssbuor' -b "dc=global,dc=company,dc=domain" -f "sAMAccountName=%s" -h 192.168.0.1
Luego de ejecutar el comando previo, queda esperando que ingresemos usuario y password separado por un espacio, en mi caso:
morsa Mi-P2ssbuor
OK
Si obtenemos OK es que la autenticación funciona correctamente.
Editamos la configuración del Squid:
root@squid-testing:~# vi /etc/squid/squid.conf
Reemplazamos el auth_param basic program por el comando ejecutado anteriormente y unos parametros más como el realm y las TTLs de las credenciales:
auth_param basic program /usr/lib/squid/ldap_auth -R -D morsa@redes.seguridad.net -w 'Mi-P2ssbuor' -b "dc=redes,dc=seguridad,dc=net" -f "sAMAccountName=%s" -h 192.168.0.1
auth_param basic children 5
auth_param basic realm Tupperware
auth_param basic credentialsttl 5 minutes
La siguiente acl nos permite el que al abrir el explorardor nos pida credenciales:
acl password proxy_auth REQUIRED
Agregamos una lista de acceso externa llamada GrupoInternet utilizando squid_ldap_group:
external_acl_type GrupoInternet %LOGIN /usr/lib/squid/squid_ldap_group -R -b "dc=redes,dc=seguridad,dc=net" -D morsa@redes.seguridad.net -w Mi-P2ssbuor -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a,ou=Groups,ou=Contenedor1,ou=Contenedor2,dc=redes,dc=seguridad,dc=net))" -h 192.168.0.1
Agregamos otra lista de acceso llamada Internet utilizando la previa acl (GrupoInternet) y utilizará un grupo en Active Directory llamado GrupoSquidAD donde este grupo estará dentro del contenedor (ou=Groups,ou=Contenedor1,ou=Contenedor2,dc=redes,dc=seguridad,dc=net):
acl Internet external GrupoInternet GrupoSquidAD
Permitimos acceso a la acl previa con el siguiente linea:
http_access allow Internet
Reiniciamos el squid:
root@squid-testing:~# /etc/init.d/squid start
Starting Squid HTTP proxy: squid.
root@squid-testing:~# !ps
ps -efa | grep squid
root 3901 1 0 20:14 ? 00:00:00 /usr/sbin/squid -D -YC
proxy 3906 3901 99 20:14 ? 00:00:02 (squid) -D -YC
root 3932 31579 0 20:14 pts/2 00:00:00 grep squid
root@squid-testing:~#
IMPORTANTE: Recordar agregar los usuarios que queremos permitir el acceso a internet deben estar dentro del grupo GrupoSquidAD del Active Directory.
También les dejo una configuración completa del squid para que quede más claro:
root@squid-testing:~# cat /etc/squid/squid.conf############################################################## Auth
#############################################################auth_param basic program /usr/lib/squid/ldap_auth -R -D morsa@redes.seguridad.net -w 'Mi-P2ssbuor -b "dc=redes,dc=seguridad,dc=net" -f "sAMAccountName=%s" -h 192.168.0.1auth_param basic children 5auth_param basic realm Redes.Seguridadauth_param basic credentialsttl 5 minutes############################################################## ACL's#############################################################acl http proto httpacl port_80 port 80acl port_443 port 443acl SSL_ports port 443 # httpsacl SSL_ports port 563 # snewsacl SSL_ports port 873 # rsyncacl Safe_ports port 80 # httpacl Safe_ports port 21 20 # ftpacl Safe_ports port 443 # httpsacl Safe_ports port 70 # gopheracl Safe_ports port 210 # waisacl Safe_ports port 1025-65535 # unregistered portsacl Safe_ports port 280 # http-mgmtacl Safe_ports port 488 # gss-httpacl Safe_ports port 591 # filemakeracl Safe_ports port 777 # multiling httpacl Safe_ports port 631 # cupsacl Safe_ports port 873 # rsyncacl Safe_ports port 901 # SWATacl purge method PURGEacl CONNECT method CONNECTacl all src all#Agregado por morsa para bloqueo de youtubeacl no_domains dstdomain "/etc/squid/sitios_denegados.txt"acl manager proto cache_objectacl localhost src 127.0.0.1/32acl to_localhost dst 127.0.0.0/8 0.0.0.0/32acl password proxy_auth REQUIREDexternal_acl_type GrupoInternet %LOGIN /usr/lib/squid/squid_ldap_group -R -b "dc=redes,dc=seguridad,dc=net" -D morsa@redes.seguridad.net -w Mi-P2ssbuor -f "(&(objectclass=person)(sAMAccountName=%v)(memberof=cn=%a,ou=groups,ou=Contenedor1,ou=Contenedor2,dc=redes,dc=seguridad,dc=net))" -h 192.168.0.1acl Internet external GrupoInternet ARG1-InternetSquid##############################################################ACCESOS#############################################################http_access deny no_domainshttp_access allow Internethttp_access allow passwordhttp_access deny allhttp_access allow manager localhosthttp_access deny managerhttp_access allow purge localhosthttp_access deny purgehttp_access deny !Safe_portshttp_access deny CONNECT !SSL_portshttp_access allow localhosthttp_access deny allicp_access deny allhttp_port 3128hierarchy_stoplist cgi-bin ?cache_mem 100 MBcache_dir aufs /var/spool/squid 20000 16 256maximum_object_size 4096 KBcache_swap_low 95cache_swap_high 100access_log /var/log/squid/access.log squidcache_log /var/log/squid/cache.logpid_filename /var/run/squid.pidrefresh_pattern ^ftp: 1440 20% 10080refresh_pattern ^gopher: 1440 0% 1440refresh_pattern -i (/cgi-bin/|\?) 0 0% 0refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880refresh_pattern . 0 20% 4320acl permitidos src "/etc/squid/permitidos"http_access allow permitidosacl shoutcast rep_header X-HTTP09-First-Line ^ICY.[0-9]upgrade_http0.9 deny shoutcastacl apache rep_header Server ^Apachebroken_vary_encoding allow apacheextension_methods REPORT MERGE MKACTIVITY CHECKOUTcache_effective_user proxycache_effective_group proxyvisible_hostname squid-testingicon_directory /usr/share/squid/iconserror_directory /usr/share/squid/errors/es-arhosts_file /etc/hostscoredump_dir /var/spool/squidroot@squid-testing:~#