Google EL TIPO DE INFORMATICA: Squid
Mostrando entradas con la etiqueta Squid. Mostrar todas las entradas
Mostrando entradas con la etiqueta Squid. Mostrar todas las entradas

domingo, 24 de febrero de 2013

Bloquear Youtube y Permitir Solo Algunos Videos con Squid

Posiblemente les haya pasado esto, bloquean Youtube en su red con Squid, un día les informan que hay un video que necesitan que varios usuarios puedan ver. Una forma rápida sera permitir el acceso a Youtube a ese usuario o grupo de usuarios. Y que si el video deben verlo todos los usuarios? Esto me paso varias veces y estuve buscando una forma de permitir solo algunos videos pero no encontré como hacerlo, así que me puse a buscar la forma de hacerlo y aquí se la presento. Lo primero claro esta seria bloquear Youtube, esta parte me imagino que ya todos lo tienen. Para esto usaremos la forma mas sencilla, que seria bloqueando el dominio youtube.com, algo como esto:

acl youtube dstdomain .youtube.com
http_access deny youtube all

Estas reglas bloquearan el acceso al dominio Youtube, pero como saben hay cantidades de sitios Web donde se puede ver videos Online, una forma mas efectiva es bloquear el tipo de archivo (mime type) .FLV que es el que se transfiere desde estas paginas, crearíamos entonces las siguientes reglas:

acl video-files rep_mime_type video/x-flv
http_reply_access deny video-files

Con esto ya hemos bloqueado todos los videos, y seguro que esta es la configuracion que actualmente tienen. Ahora vamos a identificar el video que queremos permitir y luego modificar la regla para permitir ese video en especifico. Bien, supongamos que nos pasan el siguiente video y quieren circularlo para que todos lo puedan ver. Pongamos por ejemplo este:


Lo que haremos entonces sera tomar lo que esta despues del signo de igual "=" (en el caso del video de ejemplo seria aBhYULqQsdM)  y copiarlo. Esto es la identificacion del video. Luego iremos a nuestra regla de Squid y agregaremos lo siguiente:

acl youtube dstdomain .youtube.com
acl videos-permitidos urlpath_regex /videoplayback
acl videos-permitidos urlpath_regex aBhYULqQsdM
http_access allow youtube videos-permitidos
http_access deny youtube all
http_reply_access allow youtube videos-permitidos

Como pueden ver agregamos el acl "videos-permitidos" y estamos utilizando "urlpath_regex" y le agregamos el identificador del video que queremos permitir, también agregamos a este mismo acl la cadena de caracteres "/videoplayback",  cuando se solicita algún video esta cadena se agrega al url. Luego permitimos el acceso al dominio Youtube.com solo a las paginas que tengan esas cadena de caracteres en su URL. Con esto se podrá acceder a Youtube para las paginas que especifiquemos. Para no tener que agregar varias lineas en el caso de que queramos permitir varios videos para los usuarios, una mejor forma seria crear un archivo y agregar cada identificador de los videos que vayamos a permitir. Por ejemplo, podemos crear un archivo el archivo de texto "/etc/squid/videos-permitidos.acl" y agregar aquí los identificadores, el contenido del archivo se vería de esta forma:

/videoplayback
aBhYULqQsdM
AV-glc90fKg
kZ2NA--PFbE

Nuestra configuracion se vería entonces de esta manera:

acl youtube dstdomain .youtube.com
acl videos-permitidos urlpath_regex "/etc/squid/videos-permtidos.acl"
http_access allow youtube videos-permitidos
http_access deny youtube all
http_reply_access allow youtube videos-permitidos

Ahora, cada vez que queramos permitir un video de Youtube solo tenemos que agregar en este archivo el identificador del video. Bueno, hasta aquí esta pequeña guia. Espero que les funcione y les sea de utilidad.

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.

jueves, 5 de noviembre de 2009

Saltando Restricciones de Proxies con UltraSurf

Recientemente me encontré en el trabajo con el problema citado en el encabezado de este post. Nos dimos cuenta que un usuario se las había arreglado para saltarse las restricciones impuestas por el proxy, o sea, podía acceder a sitios bloqueados por la política de la compañía como Facebook, Hi5, Webmessenger, en fin, paginas de baraje. Al conectarme al equipo del usuario (usando VNC) pude comprobar que realmente el usuario se estaba saltando las restricciones porque estaba en sitios que él no tenia permitido acceder. Inmediatamente trate de averiguar cómo se las había arreglado para hacerlo y hacerlo en mis narices (eso fue lo que más me molesto). Genere entonces un reporte de acceso para ver si el proxy (usamos Squid 2.6) me mostraba las conexiones de ese usuario y así hacerme una idea de cómo lo había hecho, pero no me presento los sitios que él estaba accediendo en el momento, por lo que pensé que entonces él estaba pasando por encima del Proxy, pero como?? El Firewall (IPtables) tiene reglas que no permite el acceso directo hacia Internet, o sea, la única forma de salir hacia Internet es haciéndolo a través del Proxy, el cual él se estaba saltando.

Me sentí un poco frustrado, se está conectando a Internet en mis narices y no veo como!!?? Prácticamente lo veía riéndose de mi: "Ja, El Tipo de Informática cree que puede evitar que revise mi feisbuk" lo imaginaba pensando. Bueno, mientras sigo indagando entre IPTables y Squid continuo con su escritorio abierto en una ventana de VNC, entonces me fijo que cuando el cerro el navegador cerro también una aplicación la cual no pude ver bien en el momento. Convenientemente él iba saliendo a almorzar así que tendría su computadora disponible para buscar el programa sin que él se diera cuenta (no quería que el supiera que lo estaba investigando, quería que se diera cuenta cuando su método ya no le funcionara). Cuando busco en los programas instalados no veo nada sospechoso, así que pensé: bueno, si el pudo conseguir ese programa y ponerlo a correr sin que nos enterásemos, seguro que no lo va a tener tan obvio". Mire bien la barra de inicio para ver los últimos programas abiertos y encontré un shortcut a una carpeta llamada "New Folder" que me pareció sospechoso, pensé que quizás dentro de este se encontraría el programa, hice clic encima de él y abrió el "UltraSurf", el muy sabio había cambiado el icono del shortcut para que pareciera una inofensiva carpeta.

Ventana UltraSurf
El muy oidiado UltraSurf en plena accion

Una vez el programa carga inmediatamente abre el navegador y ya se puede entrar a cualquier sitio sin las restricciones del proxy. Ok, ya habia encontrado el programa pero todavía no sabía cómo hacia para conectarse al Internet. Lo primero que hice fue tumbar por un momento el Proxy (la mayoría de usuarios estaban almorzando así que nadie lo noto) para ver si todavía así se conectaba lo cual efectivamente hizo que el programa se desconectara. Esto me indico que el programa si utilizaba el proxy para conectarse a Internet. Luego de Googlear un poco sobre cómo funciona este programita me entere de que este utiliza túneles SSL para conectarse con servidores proxy en Internet y entonces entendí el porque mi proxy lo dejaba pasar. Otra cosa que hace UltraSurf es que abre en el equipo del usuario el puerto TCP 9666 y configura el Internet Explorer para que utilice como proxy la dirección 127.0.0.1:9666, o sea, se usaba así mismo como proxy y el a su vez utilizaba el proxy de la red para gestionar la conexión.

Los Web Proxys trabajan capturando las solicitudes de sitios Web de los usuarios y conectándose ellos al Web server requerido en lugar del usuario, luego entrega al usuario la pagina solicitada. El usuario nunca hace una conexión directa con el sitio, quien hace la conexión al sitio web es el proxy. Es decir, el proxy es un intermediario entre el usuario interno de la red y un servidor web externo. Al estar en medio de la conexión entre el usuario y el servidor web, el proxy puede ver el contenido de los paquetes, como origen, dominio de destino, usuario que hace la solicitud, contenido del sitio web, etc., y en base a esto aplicar las restricciones especificadas. Esto aplica para el protocolo HTTP y otras aplicaciones, pero no para el protocolo HTTPS que no es más que HTTP sobre SSL. Al utilizar SSL el proxy no puede modificar el paquete, o sea, no puede ponerse en medio de la conexión, y debe dejar que el usuario negocie una conexión segura con el servidor de destino (utilizando el método http "CONNECT"). Así que al establecerse la conexión (o túnel) entre el usuario y el servidor el proxy no puede intervenir ni ver el contenido de los paquetes ya que estos son encriptados. Por esta razón el UltraSurf podía conectarse a Internet porque hace conexiones SSL con servidores en Internet.
Bloqueando UltraSurf con Squid
Para evitar estas conexiones lo que hice fue limitar los sitios en los que se pueden establecer conexiones SSL, podría también buscar el listado de servidores que utiliza UltraSurf y bloquearlos pero este no sería un método muy efectivo, ya que en tal caso bloquearía solo al UltraSurf y otro programa similar podría funcionar utilizando el mismo método. Generalmente HTTPS solo se utiliza para Internet Banking y algunas otras aplicaciones Web, afortunadamente ya tenía una lista con estos sitios creada, una especie de "Whitelist", así que lo que hice fue permitir conexiones HTTPS solo a los sitios de este listado. Para hacer esto en Squid, se hace lo siguiente:

#Creacion del ACL para el metodo CONNECT
acl CONNECT method CONNECT
# ACL que contiene los sitios Web permitidos para HTTPS
acl sitios-https url_regex "/ruta-al-listado-de-sitios.txt"
# Regla que permitira conexiones HTTPS solo a los sitios del listado creado arriba
http_access allow CONNECT sitios-https
http_access deny CONNECT all

Luego de insertar estas líneas y refrescar la configuración del squid (/etc/init.d/squid reload) UltraSurf ya no podía conectarse a sus servidores en Internet, y por ende el usuario ya no podría saltarse las restricciones (adiós feisbuk!). Pero todavía tenía pendiente el asunto de que este programa modificaba la configuración de Proxy que por GPO habíamos configurado en las computadoras. Tenemos una política de grupo (GPO) que configura el Internet Explorer para utilizar nuestro Proxy y no permite que los usuarios cambien esta opción, pero aparentemente esta política solo esconde la opción de "Connection" en las opciones del Internet explorer, pero estas podrían ser modificadas por el usuario utilizando algún script, como lo hace el UltraSurf. Así que pensé en modificar los permisos de la clave del registro de Windows que maneja la configuración de proxy del Internet Explorer, esta se encuentra en:

HKEY_USERS\SID-DEL-USUARIO\Software\Microsoft\CurrentVersion\Internet Settings

Para modificar los permisos de esta clave solo tenemos que abrir el Editor del Registro (start-->run-->regedit.exe), movernos hasta la clave especificada, hacer clic derecho encima y seleccionar "Permissions". Por defecto el usuario tendrá "Full Control" sobre esta clave, si le cambiamos este y solo le dejamos el permiso "Read" el UltraSurf no podrá modificar la configuración de proxy de Internet explorer, por lo que tendrá obligatoriamente que utilizar el proxy Interno. Así que aunque el programa llegue a conectarse a sus proxies en Internet, el usuario no podrá utilizarlo porque el Internet Explorer continuara siempre viendo solo a nuestro Proxy interno. Bueno, hasta aqui el post de hoy. Espero que este les haya servido de ayuda, mas a administradores de sistemas que a usuarios queriendo violar las politicas de su compañia o universidad (nada bueno sale de eso, creanme). Como siempre espero no haberles hecho perder su tiempo leyendome, habiendo tantos buenos blogs en la red para leer, pero nada, gracias por pasar por aquí.