FernandoMiculan
Usuario (Argentina)
Esto lo tengo implementado en mi laburo, y costo bastante hasta que salio, comencemos: Para integrar la navegación de Squid en GNU/Linux Debian como proxy con un controlador de Dominio Windows hace falta conocer a 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. **** OBSERVACIÓN AGREGADA ****** Si usan como AD un Windows Server 2008, tienen que tener instalado SP2 o en su defecto un Hotfix (951191) que arregla un problema con la autentificacion en Kerberos. ****************************************************************************************************************************** AD domain: windows.dominio WIndows: ad.windows.dominio IP: 192.168.1.1 Debian: 192.168.1.2 En 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.dominio host 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-mit cvs build-essential automake autoconf slapd libldap-dev krb5-user libkrb5-dev wget Una 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.gz wget http://download.systemimager.org/~finley/msktutil/msktutil_0.3.16-7.diff.gz Copiamos /usr/src para poder compilarla. 3) cd /usr/src tar zxvf msktutil_0.3.16.orig.tar.gz gunzip msktutil_0.3.16-7.diff.gz cd msktutil-0.3.16Cursiva patch < ../msktutil_0.3.16-7.diff ./configure make make install 4) Hay que bajar el helper que nos permite autenticar contra el AD y compilarlo. cvs -z3 -d:pserver:[email protected]:/cvsroot/squidkerbauth co -P squid_kerb_ldap cd squid_kerb_ldap ./configure make 5) Configurar Kerberos, el archivo es /etc/krb5.conf Tendría que quedar como el siguiente! default_realm = DOMINIO.WINDOWS dns_lookup_realm = false dns_lookup_kdc = false ticket_lifetime = 24h # The following krb5.conf variables are only for MIT Kerberos. krb4_config = /etc/krb.conf krb4_realms = /etc/krb.realms kdc_timesync = 1 ccache_type = 4 forwardable = true proxiable = true DOMINIO.WINDOWS = { kdc = 192.168.1.1 admin_server = 192.168.1.1 default_domain = dominio.windows } [domain_realm] .dominio.windows = DOMINIO.WINDOWS dom.local = DOMINIO.WINDOWS 6) 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 --verbose Si 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/src wget http://www.squid-cache.org/Versions/v3/3.0/squid-3.0.STABLE25.tar.gz tar zxvf squid-3.0.STABLE25.tar.gz cd squid-3.0.STABLE25 ./configure --enable-negotiate-auth-helpers=squid_kerb_auth --enable-stacktraces --enable-delay-pools --prefix=/opt/squid make make install cp 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/squid nano squid.conf #HELPER CONFIGURACION auth_param negotiate program /opt/squid/sbin/squid_kerb_auth -d -s HTTP/debian.dominio.windows auth_param negotiate children 10 auth_param negotiate keep_alive o #HELPER DE CONSULTA DE GRUPO EN EL AD PARA ACCESO SIN RESTRICCIONES A INTERNET, EL GRUPO WINDOWS SE LLAMA INTERNETFULL external_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 INTERNETUSU external_acl_type SQUID_KERB_LDAP1 ttl=3600 negative_ttl=3600 %LOGIN /opt/squid/sbin/squid_kerb_ldap -d -g internetusu #OPTIMIZAR cache_swap_low 95 cache_swap_high 98 maximum_object_size 16384 KB maximum_object_size_in_memory 4096 KB #CONFIGURACION POR DEFECTO acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemak acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT acl LDAP_GROUP_CHECK external SQUID_KERB_LDAP acl LDAP_GROUP_CHECK1 external SQUID_KERB_LDAP1 acl localnet src 192.168.1.0/24 http_port 3128 #REGLAS PARA LOS LIMITADOS # Bloquea Download para las next extensiones acl dnld url_regex -i .avi acl dnld url_regex -i .mp3 acl dnld url_regex -i .fla acl dnld url_regex -i .flv #acl dnld url_regex -i .swf acl dnld url_regex -i .wav acl dnld url_regex -i .asf acl dnld url_regex -i .wmf acl dnld url_regex -i .pif acl dnld url_regex -i .bat acl dnld url_regex -i .scr acl dnld url_regex -i .wdm acl dnld url_regex -i .wmv acl dnld url_regex -i .mid acl dnld url_regex -i .mpg acl dnld url_regex -i .mpg acl dnld url_regex -i .mpeg acl dnld url_regex -i .ogg acl dnld url_regex -i .ogm acl dnld url_regex -i .exe acl dnld url_regex -i .zip acl dnld url_regex -i .arj acl dnld url_regex -i .rar acl dnld url_regex -i .iso acl dnld url_regex -i .nrg acl dnld url_regex -i .bin acl dnld url_regex -i .dmg acl dnld url_regex -i .img acl dnld url_regex -i .pl acl streaming browser -i ^.*NSPlayer.* acl streaming browser -i ^.*Player.* acl streaming browser -i ^.*Windows-Media-Player.* # Acls de dominios permitidos y negados acl 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 DOMINIO acl sindom src "/etc/squid/sindom" httpd_suppress_version_string on http_access allow sindom http_access allow destinos_permitidos http_access allow LDAP_GROUP_CHECK http_access allow LDAP_GROUP_CHECK1 !dnld !streaming !sitios_denegados http_access deny all cache_effective_user squid cache_dir ufs /var/cache/squid 1500 16 256 access_log /var/log/squid/access.log squid cache_log /var/log/squid/cache.log cache_store_log none pid_filename /var/run/squid.pid cache_effective_user squid cache_effective_group squid coredump_dir /var/cache/squid #-------FIN DEL ARCHIVO---------------- 10) Squid va a correr con el usuario squid, tenemos que crear ese usuario para poder dar los permisos necesarios. chown -R squid.squid /opt/squid /var/cache/squid /var/log/squid /etc/HTTP.keytab 11) Creamos el archivo de Cache de squid: /opt/squid/sbin/squid -Z 12) Para levantar el squid en el inicio de Debian ponemos lo siguiente en el archivo rc.local. nano /etc/rc.local KRB5.KTNAME=/etc/HTTP.keytab export KRTB.KTNAME /opt/squid/sbin/squid 13) Para releer la configuración del servicio podemos hacer: /opt/squid/sbin/squid -k reconfigure Esto 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.