
Para integrar la navegación de Squid en GNU/Linux Debian como proxy con un controlador de Dominio Windows hace falta conocer algunos términos y tecnologías. Una buena página para empezar es la de Samba, en la sección de Samba 4 donde pueden leer cómo funciona la autenticación de Windows.
Claro está que la tecnología de autenticación Kerberos no fue inventada por Windows pero, lamentablemente, la vemos implementada en las empresas mayormente de la mano de la ventanita. En GNU/Linux es totalmente posible kerberizar un entorno, pero no es el tema de este Post.
Lo que vamos a hacer acá es usar Squid para autenticar vía kerberos los equipos Windows que quieran navegar por la red. De esta forma los usuarios de Windows que se autentiquen en el dominio AD 2003 o 2008 van a obtener un tiket HTTP/DOMINO que les permitirá navegar de acuerdo a las ACLS puestas en el squid. Doy por supuesto que tienen una instalación de GNU/Linux Debian.
El primer paso es testear algunas cosas en el servidor Windows 2003/08, sí sí lamentablemente tenemos que tocarlo o pedir al administrador amigo que lo haga por nosotros :). Vamos a llamar al dominio, AD (Active Directory), haciendo referencia al 2003 o 2008.
En el AD tienen que asegurarse que las zonas DNS estén bien configuradas, con todos sus equipos y zonas reversas respectivamente. Como política tiene que estar el sincronismo de la hora al iniciar sesión ya que Kerberos es muy estricto con esto.
AD domain: windows.dominioWIndows: ad.windows.dominioIP: 192.168.1.1Debian: 192.168.1.2En el DNS del AD deben crear una registro (A) con la IP del servidor Debian y su respectiva zona PTR.
En el Debian tiene que estar bien configurado el archivo hosts y el hostname haciendo referencia al nombre FQDN, en este caso: debian.windows.domino.
Antes de empezar en el Debian tenemos que hacer lo siguiente:
Instalar ntpdate y configurar que tome la hora del servidor AD, se configura en /
etc/default/ntpdate colocando la IP del AD.
Luego corren
ntpdate-debian y debería sincronizar con el AD.
En el
resolv.conf poner como DNS al AD unicamente. NO hace falta reiniciar el servicio de red, prueben con el comando host (aptitude install host) que resuelva el nombre del AD en forma directa e inversa:
host ad.windows.dominiohost 192.168.1.1#En el caso de Instalar el AD en Windows 2008 hacía falta un hotftix, pero si tienen el SP2 no hace falta, ya que viene incluido.
1)En nuestro Debian tenemos que instalar los siguientes paquetes con aptitude:
libsasl2-modules-gssapi-mitcvsbuild-essentialautomakeautoconfslapdlibldap-devkrb5-userlibkrb5-devwgetUna vez instalado tenemos que crear el tiket kerberos de HTTP que nos permitirá autenticar los equipos a través del AD. Esto se puede hacer utilizando la herrmienta ktutil y el comando ktpass en el AD o bajando una herramienta llamada msktutil. Nosotros vamos a usar la segunda opción.
2)wget http://download.systemimager.org/~finley/msktutil/msktutil_0.3.16.orig.tar.gzwget http://download.systemimager.org/~finley/msktutil/msktutil_0.3.16-7.diff.gzCopiamos /usr/src para poder compilarla.
3)cd /usr/srctar zxvf msktutil_0.3.16.orig.tar.gzgunzip msktutil_0.3.16-7.diff.gzcd msktutil-0.3.16Cursivapatch < ../msktutil_0.3.16-7.diff ./configure make make install4)Hay que bajar el helper que nos permite autenticar contra el AD y compilarlo.
cvs -z3 -d:pserver:anonymous@squidkerbauth.cvs.sourceforge.net:/cvsroot/squidkerbauth co -P squid_kerb_ldapcd squid_kerb_ldap./configuremake5)Configurar Kerberos, el archivo
es /etc/krb5.confTendría que quedar como el siguiente!
[libdefaults]default_realm = DOMINIO.WINDOWSdns_lookup_realm = falsedns_lookup_kdc = falseticket_lifetime = 24h# The following krb5.conf variables are only for MIT Kerberos.krb4_config = /etc/krb.confkrb4_realms = /etc/krb.realmskdc_timesync = 1ccache_type = 4forwardable = trueproxiable = true[realms]DOMINIO.WINDOWS = {kdc = 192.168.1.1admin_server = 192.168.1.1default_domain = dominio.windows}[domain_realm].dominio.windows = DOMINIO.WINDOWSdom.local = DOMINIO.WINDOWS6)Tenemos que crear el keytab, archivo que se pondrá en /etc y es nuestro tiket de autenticación kerberos.
kinit administrador
msktutil -c -b "CN=COMPUTERS" -s HTTP/debian.dominio.windows -h debian.dominio.windows -k /etc/HTTP.keytab --computer-name debian -http --upn HTTP/debian.dominio.windows --server ad.windows.dominio --verboseSi no nos dá ningún error...Estamos!!
7) klist -k para probar nos debería mostrar un tiket.
8) A instalar Squid!, vamos a bajar el source squid 3
cd /usr/srcwget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE25.tar.gztar zxvf squid-3.0.STABLE25.tar.gzcd squid-3.0.STABLE25./configure --enable-negotiate-auth-helpers=squid_kerb_auth --enable-stacktraces --enable-delay-pools --prefix=/opt/squidmakemake installcp helpers/negotiate_auth/squid_kerb_auth/squid_kerb_auth /opt/squid/sbin/cp /usr/src/squid_kerb_ldap/squid_kerb_ldap /opt/squid/sbin/9)Configurar Squid, el archivo podría quedar algo así:
cd /opt/squidvi squid.conf#ARCHIVO MODIFICADO POR ROOTLINUX.COM.AR#HELPER CONFIGURACIONauth_param negotiate program /opt/squid/sbin/squid_kerb_auth -d -s HTTP/debian.dominio.windowsauth_param negotiate children 10auth_param negotiate keep_alive o#HELPER DE CONSULTA DE GRUPO EN EL AD PARA ACCESO SIN RESTRICCIONES A INTERNET, EL GRUPO WINDOWS SE LLAMA INTERNETFULLexternal_acl_type SQUID_KERB_LDAP ttl=3600 negative_ttl=3600 %LOGIN /opt/squid/sbin/squid_kerb_ldap -d -g internetfull#LO MISMO PERO PARA EL GRUPO CON RESTRICCIONES, EN EL AD SE LLAMA INTERNETUSUexternal_acl_type SQUID_KERB_LDAP1 ttl=3600 negative_ttl=3600 %LOGIN /opt/squid/sbin/squid_kerb_ldap -d -g internetusu#OPTIMIZARcache_swap_low 95cache_swap_high 98maximum_object_size 16384 KBmaximum_object_size_in_memory 4096 KB#CONFIGURACION POR DEFECTOacl SSL_ports port 443acl Safe_ports port 80 # httpacl Safe_ports port 21 # 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 # filemakacl Safe_ports port 777 # multiling httpacl CONNECT method CONNECTacl LDAP_GROUP_CHECK external SQUID_KERB_LDAPacl LDAP_GROUP_CHECK1 external SQUID_KERB_LDAP1acl localnet src 192.168.1.0/24http_port 3128#REGLAS PARA LOS LIMITADOS# Bloquea Download para las next extensionesacl dnld url_regex -i \.aviacl dnld url_regex -i \.mp3acl dnld url_regex -i \.flaacl dnld url_regex -i \.flv#acl dnld url_regex -i \.swfacl dnld url_regex -i \.wavacl dnld url_regex -i \.asfacl dnld url_regex -i \.wmfacl dnld url_regex -i \.pifacl dnld url_regex -i \.batacl dnld url_regex -i \.scracl dnld url_regex -i \.wdmacl dnld url_regex -i \.wmvacl dnld url_regex -i \.midacl dnld url_regex -i \.mpgacl dnld url_regex -i \.mpgacl dnld url_regex -i \.mpegacl dnld url_regex -i \.oggacl dnld url_regex -i \.ogmacl dnld url_regex -i \.exeacl dnld url_regex -i \.zipacl dnld url_regex -i \.arjacl dnld url_regex -i \.raracl dnld url_regex -i \.isoacl dnld url_regex -i \.nrgacl dnld url_regex -i \.binacl dnld url_regex -i \.dmgacl dnld url_regex -i \.imgacl dnld url_regex -i \.placl streaming browser -i ^.*NSPlayer.*acl streaming browser -i ^.*Player.*acl streaming browser -i ^.*Windows-Media-Player.*# Acls de dominios permitidos y negadosacl destinos_permitidos url_regex "/etc/squid/destinos_permitidos"acl sitios_denegados url_regex "/etc/squid/sitios_denegados"#ACL ACCESO PARA MAQUINAS QUE NO ESTAN EN EL DOMINIOacl sindom src "/etc/squid/sindom"httpd_suppress_version_string onhttp_access allow sindomhttp_access allow destinos_permitidoshttp_access allow LDAP_GROUP_CHECKhttp_access allow LDAP_GROUP_CHECK1 !dnld !streaming !sitios_denegadoshttp_access deny allcache_effective_user squidcache_dir ufs /var/cache/squid 1500 16 256access_log /var/log/squid/access.log squidcache_log /var/log/squid/cache.logcache_store_log nonepid_filename /var/run/squid.pidcache_effective_user squidcache_effective_group squidcoredump_dir /var/cache/squid#-------FIN DEL ARCHIVO----------------10) Squid va a correr con el usuario squid, por lo tanto debemos crear ese usuario para poder dar los permisos necesarios.
chown -R squid.squid /opt/squid /var/cache/squid /var/log/squid /etc/HTTP.keytab11) Creamos el archivo de Cache de squid:
/opt/squid/sbin/squid -Z12) Para levantar el squid en el inicio de GNU/Linux debian ponemos lo siguiente en el archivo
rc.local.
vi /etc/rc.localKRB5.KTNAME=/etc/HTTP.keytabexport KRTB.KTNAME/opt/squid/sbin/squid13) Para releer la configuración del servicio podemos hacer:
/opt/squid/sbin/squid -k reconfigureEsto lo debemos hacer cada vez que cambiemos un parámetro en la conf. del squid o que agreguemos o saquemos usuarios de los grupos del AD.
14) El último paso es poner el navegador del usuario que está en el dominio en modo proxy.
ATENCION: colocar el FQDN del servidor no la IP para el proxy, en este caso debería ser: debian.dominio.windows:3128, ahora al iniciar la navegación estaría autenticando el usuario del dominio y aplicando las restricciones correspondientes de acuerdo al grupo en que se encuentre.
Saludos!!!!