Google EL TIPO DE INFORMATICA: abril 2010

lunes, 26 de abril de 2010

Correr Aplicaciones como Servicios en Windows Server 2003

Recientemente en el trabajo se me presento el siguiente caso: Debia instalar en uno de los servidores un programa que usarian un grupo de usuarios, este programa revisaria periodicamente un sitio FTP y si habia algun archivo nuevo lo descargaria a un determinado folder, con el que los usuarios luego trabajarian. El problema es que el sistema con el que trabajarian los usuarios se a traves Terminal Services, y el programa que alimentaria a este sistema a traves de la descarga de archivos FTP no estaba diseñado para trabajar como servicio, lo que significa que cada usuario debia iniciar la aplicacion FTP una vez logeado al servidor.

Bueno, no es tan problematico el hecho de que los usuarios tengan que iniciar ellos mismos esa aplicacion, el problema es que si 15 usuarios se logeaban al servidor e iniciaban la aplicacion, tendria 15 instancias de la misma aplicacion corriendo en el servidor de Terminal Services, y todos haciendo la misma tarea. La solucion: hacerlo correr como un servicio, asi los usuarios no tendrian que lidiar con abrir la aplicacion [mientas menos hagan los usuarios en el servidor mejor] y tendria una sola instancia de la aplicacion corriendo. Para hacer esto, utilizamos los comandos INSTSRV.EXE y SRVANY.EXE, ambos incluidos en el Windows Server 2003 Resource Kit Tools. Instsrv.exe crea o remueve servicios en el sistema y Srvany.exe nos permite correr las aplicaciones como servicio. Para crear entonces nuestro nuevo servicio ejecutamos:

ruta-al-comando-INSTSRV.EXE Mi Servicio ruta-al-comando-SRVANY.EXE

Donde "ruta-al-comando-instsrv.exe" es, como ya se habran imaginado, la ruta donde se encuentra dicho comando. Claro, esto tenemos que especificarlo en caso de que no hayamos incluido ese comando comando en la variable del sistema "PATH". Luego escribimos el nombre que queremos dar a nuestro nuevo servicio ("Mi Servicio"). Y por ultimo la ruta hacia el comando "srvany.exe". Por ejemplo, supongamos que llamaremos a nuestro nuevo servicio "Sftp", el comando seria de esta forma:

C:\Program Files\Windows\windows Resource Kits\Tools\instsrv.exe Sftp C:\Program Files\Windows\windows Resource Kits\Tools\srvany.exe

Con esto hemos creado nuestro servicio, ahora debemos indicar en el registro la ruta hacia la aplicacion. Para esto abrimos en editor del registro (regedit.exe). Y nos movemos hacia la siguiente clave del registro:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\

Aqui buscamos la clave correspondiente al servicio que acabamos de crear, de acuerdo a este ejemplo debe llamarse "Sftp". Una vez estemos sobre esta clave, crearemos una nueva sub-clave haciendo clic derecho encima de "Sftp", moviendonos hacia "New" y luego seleccionando "Key", a la que renombraremos "Parameters". Hacemos clic derecho nuevamente encima de "Parameters", nos movemos encima de "New" y seleccionamos "String Value", a esta estrada la llamaremos "Application". Esta clave del registro sera la que indicara la ruta hacia el ejecutable de la aplicacion que queremos correr como servicio, asi que haremos doble clic enicima de "Application" y escribiremos la ruta hacia nuestro ejecutable, por ejemplo, C:\Program Files\Sftp\Sftp.exe".

Windows Regedit

El grafico anterior muestra los cambios dentro de la clave del registro correspondiente a nuestro nuevo servicio. Una vez hemos hecho estos cambios, solo nos resta iniciar nuestro servicio, para esto nos vamos a la consola de administracion de servicios (podemos acceder ejecutando services.msc) e iniciandolo como cualquier otro servicio (clic derecho encima del servicio y seleccionando "start").

Consola de Servicios Windows Server

Ya con esto tenemos nuestra aplicacion corriendo como servicio. Espero que esta informacion les haya sido de utilidad. Hasta el Proximo!

miércoles, 21 de abril de 2010

Instalacion y Configuracion Squid con Active Directory

En esta ocasion continuaremos con la preparacion de nuestro Web Proxy Linux con autenticación en Active Directory en el que hemos trabajado en posts anterioes. En este mostraremos la instalación y configuracion de Squid utilizando nuestro recien instalado y configurado Samba/Winbind. En esta entrada haremos una configuracion sencilla de Squid, solo configuraremos lo necesario para que permita el acceso a Internet. No configuraremos filtro de contenido, ni bloqueo de extensiones ni nada por el estilo. Simplemente se mostrara la forma de utilizar Active Directory para autenticar las solicitudes de acceso a Internet basados en la membresia de un determinado grupo del dominio.

Bueno, vamos a entrar en materia inmediatamente y vamos a instalar Squid. La version que instalaremos sera la version 3.1 y al igual como hicimos con Samba compilaremos sus fuentes, ya que tenemos que especificar algunas opciones que normalmente no se encuentran en los paquetes de instalacion.

Instalacion Squid

Bien, para descargar la versión mas reciente al momento de este post pueden hacer clic en este link o pueden acceder directamente al sitio web (http://www.squid-cache.org/). Este archivo se descomprime de la misma manera que lo hicimos con los fuentes de samba (tar -xzf). Entramos a la carpeta con los fuentes de squid y ejecutamos el comando "configure" con las siguientes opciones:

[root@centos-box squid-3.1.1]# ./configure --enable-auth-helpers="winbind,SMB" --enable-external-acl-helpers="unix_group,wbinfo_group" --enable-auth="ntlm,basic" --with-winbind-auth-challenge --with-samba-sources="ruta-a-los-fuentes-de-samba" --sysconfdir=/etc/squid

Como se puede ver en la línea anterior, estamos especificando que utilizaremos a Winbind y Samba ("SMB" va escrito en mayuscula como se muestra). Tambien es necesario indicar en esta linea la ruta a los fuentes de Samba que utilizamos para su instalacion, en la opcion "--with-samba-source". Si este comando finaliza sin presentarnos ningun error podemos seguir adelante con la instalacion ejecutando el camando "make" y luego "make install", justo como lo hicimos en la instalacion anterior de Samba:

[root@centos-box squid-3.1.1]# make
[root@centos-box squid-3.1.1]# make install

Ambos comandos tomaran unos minutos en completar, una vez hayan terminado ya tendremos Squid 3.1 instalado en nuestro equipo, podemos pasar entonces a la parte interesante: la configuracion.

Configuración

Empezaremos la configuracion creando un usuario en el sistema (en el equipo Centos) llamado "squid", el cual utilizaremos para iniciar el Squid Proxy, tambien crearemos un grupo con el mismo nombre e insertaremos al usuario creado en este:

[root@centos-box ~]# useradd squid
[root@centos-box ~]# groupaddad squid
[root@centos-box ~]# usermod squid -g squid

[root@centos-box ~]# usermod -s /bin/false squid
[root@centos-box ~]# passwd -l squid

Los 2 ultimos comandos ejecutados anteriormente lo utilizamos para impedir que alguien pueda logearse localmente al equipo utilizando esta cuenta de usuario. A continuacion crearemos una carpeta que Squid utilizara para almacenar los archivos de CACHE, y agregaremos al usuario squid como dueño de esta carpeta y tambien como dueño de la carpeta en la que se almacenaran los logs.

[root@centos-box ~]# mkdir /var/spool/squid
[root@centos-box ~]# chown squid:squid /var/spool/squid
[root@centos-box ~]# chown squid:squid /usr/local/squid/var/logs

Como utilizaremos el tipo de autenticacion NTLM a traves de Winbind, debemos darle acceso al usuario "squid" a utilizar el "pipe" winbindd_privileged. Para esto, utilizaremos los siguientes comandos:

[root@centos-box ~]# chgrp squid /var/lib/samba/winbindd_privileged
[root@centos-box ~]# chmod 750 /var/lib/samba/winbindd_privileged

Con esto, el usuario "squid" con el que correra nuestro Proxy, tendra acceso al pipe de Winbind. Ahora podemos pasar al archivo de configuracion de Squid, "/etc/squid/squid.conf". Haremos una configuracion sencilla en nuestro Proxy, donde permitiremos el acceso a Internet a los miembros del grupo de Active Directory "Internet_Users" y le denegaremos el acceso a todos los usuarios que no pertenezcan a este. Nuestro proxy escuchara en el puerto 8080 y correra bajo los privilegios del usuario "squid". Indicaremos donde se almacenara la Cache de Squid. Para eso agregaremos las siguientes lineas a nuestro archivo de configuracion:

Con la siguiente linea le indicamos a Squid en que direccion IP y puerto escuchara, en este ejemplo, la IP de nuestro Proxy es 10.0.1.71.

http_port 10.0.1.71:8080

Luego le indicamos el usuario y grupo bajo los cuales correra, aqui utilizamos el usuario y grupo que creamos anteriormente:

cache_effective_user squid
cache_effective_group squid

A continuacion indicamos la ruta donde se encuentra el directorio en el que se ubicara la cache de Squid, el tipo (ufs) y el tamaño:

cache_dir ufs /var/spool/squid/ 900 16 256

Indicaremos tambien servidor DNS que utilizara nuestro proxy (utilizaremos la ip del domain controller)

dns_nameservers 10.0.1.70

En la siguiente linea le indicamos a Squid el tipo de autenticacion que utilizara, en este caso utilizaremos NTLM


auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 30

A continuacion definiremos una ACL externa llamada "wb_group" que utilizara el script "wbinfo_group" y le indicamos a Squid la ubicacion de este script. Este se utilizara para determinar la membresia de un usuario a un determinado grupo de Active Directory, en nuestro caso este grupo se llamara "Internet_Users".


external_acl_type wb_group %LOGIN /usr/local/squid/libexec/wbinfo_group.pl

Ahora crearemos una ACL llamada "grupo-internet" utilizando "wb_group" definida anteriormente. En esta  indicaremos el grupo del dominio Active Directory que tendra acceso a Internet. Cuando un usuario solicite a Squid una determinada pagina Web, Squid le solicitara su username del dominio, y junto al grupo que especificaremos en esta ACL, lo enviara como parametro al script "wbinfo_group.pl" para determinar si el usuario pertenece a dicho grupo. Si el usuario pertenece al grupo indicado, wbinfo_group.pl le devolvera a Squid una respuesta positiva y se le permitira al usuario el acceso al web site, de lo contrario se le denegara.

acl grupo-internet external wb_group internet_users

En este caso especificamos el grupo del dominio "Internet_Users", el cual ya he creado previamente en mi Domain Controller y del cual es miembro un usuario de prueba del dominio llamado "winuser". Note que en la definicion de este ACL se escribe el nombre del grupo en letras minusculas completo. Definiremos otra ACL que llamaremos "autenticacion" donde le indicaremos a Squid la autenticacion de los usuarios es requerida, esta la utilizamos para denegar el acceso a todo usuario no autenticado:

acl autorizacion proxy_auth REQUIRED

Ahora crearemos las reglas que permitiran el acceso a Internet a los usuarios en base a las ACL que hemos creado:

http_access allow grupo-internet all
http_access deny !autorizacion

Por ultimo dentro del archivo squid.conf insertaremos la siguiente linea donde especificaremos el nombre de nuestro proxy, en este caso utilizaremos SQUID-PROXY. Este nombre no tiene necesariamente que coincidir con el nombre real del equipo o con el nombre del dominio.

visible_hostname SQUID-PROXY

Luego de insertar esta linea, guardamos y cerramos en archivo. Luego ejecutamos "/usr/local/squid/sbin/squid -z", para que Squid cree los directorios necesarios para almacenar los archivos de cache, o "Swap Directories". Ahora solo nos resta iniciar nuestro Proxy, pero vamos a iniciarlo en modo "debug", de esta forma podemos ver las actividades que va realizando Squid al momento de cargar y podremos detectar rapidamente cualquier fallo en la configuracion, en algun modulo o cualquier error en los permisos de las carpetas en las cuales Squid intente escribir. Para inciarlo de este modo utilizamos el siguiente comando:

[root@centos-box ~]# /usr/local/squid/sbin/squid -NCd1

Si nuestra configuracion de Squid esta correcta, asi como los permisos en las carpetas que este utiliza, en la salida de este comando deberiamos tener algo como esto:


Para salir de este modo presionamos "CTRL+C", y para iniciar Squid en modo normal como servicio utilizamos:

[root@centos-box ~]# /usr/local/squid/sbin/squid

Podemos confirmar que nuestro proxy esta corriendo y esperando solicitudes ejecutando el comando "netstat -nat", el cual deberia devolvernos una ventana como la siguiente:



Como se puede ver en el circulo rojo, Squid esta corriendo y escuchando peticiones en el puerto 8080. Ahora podemos probar nuestro proxy desde un equipo Windows en el dominio y con Internet Explorer configurado para utilizar como proxy nuestro equipo y claro, con un usuario que pertenezca al grupo que configuramos para tener acceso a Internet, que para el caso de este ejemplo es "Internet Users".

Bueno, hasta aqui este post. Recuerden que el proposito de este post no es una hacer una configuracion normal o completa de Squid, solo especifico lo necesario para permitir el acceso a Internet a traves de Active Directory, todavia hay muchisimas cosas mas que se pueden hacer con Squid. Para una referencia de las demas opciones de Squid pueden visitar esta pagina. Espero que esta informacion les haya sido de utilidad.