Google EL TIPO DE INFORMATICA

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, 20 de febrero de 2013

Programar Backups Routers Cisco

Regularmente hago copias de la conflagración de los Routers de mi red, lo hago copiando la "running-config" a un archivo de texto vía TFTP con el comando "copy running-config tftp:". En estos dias pense "mm, seguro que debe haber una forma de programar esto, alguna especie de cron", y efectivamente, se pueden programar tareas en los equipos Cisco con el comando Kron. El procedimiento es bastante sencillo,  primero se crea una lista de los comandos que queremos ejecutar y luego se especifica cuando se realizara esta tarea creando un "ocurrence". Bien, lo primero que necesitaran es un servidor TFTP, les recomiendo este. Luego que tengan su TFTP server funcionando, se logean a su Router para configurar el Kron. Una vez estén dentro, crearemos la lista de comandos que queremos ejecutar:

Router(config)#kron policy-list NombrePolitica

Donde "NombrePolitica" es el nombre que le daremos al listado que estamos creando. Presionamos enter y como podremos ver en el Promp, estaremos dentro del "Policy-list" que acabamos de crear. Aquí entonces agregaremos los comandos o acciones que queremos que se realicen automaticamente, en nuestro caso, sera copiar la configuración del Router al servidor TFTP. Ejecutaremos entonces lo siguiente:

Router(config-kron-policy)#cli sh run | redirect tftp://IP-TFTP-SERVER/nombre-archivo.cfg

luego:

Router(config-kron-policy)#exit

En la primera de las 2 lineas anteriores, iniciamos escribiendo "cli" y luego escribimos "sh run", como saben este comando mostrara la configuracion actual del router. Luego agregamos " | redirect tftp://ip-tftp-server/archivo.conf", lo que hacemos con esto es tomar la salida del comando anterior y redireccionarla a nuestro TFTP server. Como se imaginaran tendran que sustituir "IP-TFTP-SERVER" por la dirección IP de su servidor TFTP, luego escriben el nombre del archivo que se creara con la conflagración del router. Esto sera un archivo de texto, pueden ponerle o no extensión, en mi caso prefiero ponerle ".cfg". Como en este caso solo queremos programar la copia de la configuración, salimos de la edición de la lista con la segunda linea: "exit". En caso de que quieran programar otros comandos, deben tener pendiente que kron no soporta comandos interactivos, o sea, comandos que necesiten alguna acción o respuesta del usuario. Ya tenemos el listado de las acciones que realizara kron, ahora tenemos que indicarle cuando las realizara. Para esto ejecutamos el siguiente comando:

Router(config)#kron occurrence Nombre-ocurrance at 23:00 Sun recurring
luego:

Router(config-kron-occurrence)#policy-list NombrePolitica

En las lineas anteriores creamos el "occurrence" con el comando "kron occurrence", a este tambien le asignaremos un nombre que no tiene necesariamente que coincidir con el listado que creamos anteriormente. Luego especificamos el horario en que se ejecutara, en el caso de este ejemplo correra a las 11 de la noche de cada Domingo (23:00 Sun), como queremos que estas acciones se realicen recurrentemente agregamos al final "recurring", y presionamos "enter". Como pueden ver, el promp cambiara nuevamente indicando que estamos dentro de la configuracion del "occurrence". Aqui entonces indicaremos el listado que creamos anteriormente con el comando "policy-list NombrePolitica", y que como se imaginaran tienen que remplazar "NombrePolitica" por el nombre que le hayan puesto al listado (Policy-list) que crearon al inicio. Con esto ya tenemos nuestra "tarea" programada en nuestro router o switch. Podemos confirmar o verificar que se haya programado correctamente con el siguiente comando:

Router#sh kron schedule

Con esto veremos la fecha próxima en que se realizara la tarea que acabamos de programar. Bueno, hasta aqui este post, el primero del 2013, y como siempre espero que les haya sido de utilidad. En caso de que no hayan entendido mi explicación pueden leer mas sobre esto en esta pagina.

lunes, 22 de octubre de 2012

FTP Server (modo Pasivo) detras de IPTables

Digamos que tienen un su red un servidor FTP el cual utilizaran para colocar unos archivos que otros descargaran. No pondrán este servidor FTP diréctamente de cara a Internet, sino que en el Firewall redireccionaran los puertos de FTP hacia ese servidor servidor Internet utilizando reglas NAT o PAT. Como seguro saben, FTP utiliza 2 puertos IP: el puerto 21 y el puerto 20. El puerto 21 es el puerto de control, en el que se inicia la conexión al servidor, y el puerto 20 se utiliza para la transferencia de datos. Por lo que lo primero que haríamos seria configurar nuestro IPTables para que redirija estos 2 puertos a nuestro servidor FTP interno, utilizando reglas como estas:


-A PREROUTING -p tcp -i eth0 --dport 20 -j DNAT --to-destination ftp-server-interno.23:20
-A PREROUTING -p tcp -i eth0 --dport 21 -j DNAT --to-destination ftp-server-interno:21

Y luego:

-A FORWARD -p tcp -s 0/0 -d ftp-server-interno -m multiport --dports 20,21 -j ACCEPT

Debería funcionar cierto? bueno, funcionara siempre y cuando indiquen en su cliente FTP que utilizaran FTP  en modo "activo", que es este modo que acabamos de describir. En este modo el cliente hace la solicitud de conexión al servidor al puerto 21, aquí se le indica al servidor el puerto local que el cliente utilizara para esta conexión y entonces el servidor inicia una nueva conexión hacia el cliente al puerto que este le indico. O sea que el servidor inicia una conexión hacia el cliente luego de la negociacion inicial, lo que significa que si el cliente esta detras de un Firewall la conexión no se podra lograr, y como la mayoría de Routers ADSL y Firewalls bloquean todo el trafico entrante no se permitiría esta conexion hacia el cliente. Por esto es muy probable que las reglas de mas arriba no funcionen. Aquí un pequeño gráfico del funcionamiento de este modo:

Negociacion FTP

Ahora bien, para evitar que el servidor inicie una nueva conexión hacia el cliente, se creo el modo "FTP Pasivo", en este modo el servidor luego de la negociación inicial le envía el cliente un puerto aleatorio para la transferencia de datos y el cliente entonces hace la conexion a este nuevo puerto. Así se evita el problema de filtrado del lado del cliente. Este puerto aleatorio se escoge dentro del rango de puertos TCP 1024 al 65535. En el siguiente gráfico se muestra el funcionamiento de este modo:

FTP

Esto quiere decir que tenemos que crear una regla que redirija este rango de puertos a nuestro FTP interno? Por suerte no, para esto utilizamos los módulos "ip_nat_ftp"  y "ip_conntrack_ftpjunto a las reglas que definimos mas arriba. Con esto, IPTables sabra el puerto aleatorio que se negocio para la transferencia de datos y lo direccionará a nuestro FTP Server. Para habilitar este modo ejecutamos:

# modprobe ip_conntrack_ftp
# modprobe ip_nat_ftp

Para hacer esto permanente y no tener que ejecutarlo en cada reinicio o incluirlo en algun script, solo tenemos que modificar el archivo /etc/modules y agregar:

ip_conntrack_ftp
ip_nat_ftp

Con estos módulos y utilizando las reglas de IPTables que les mostre mas arriba (las 2 que crean el DNAT y la de FORWARD que permite el  trafico de estos puertos hacia nuestro FTP server) tendremos nuestro servidor FTP funcionando detrás de IPTables. Como siempre, espero que esto les haya servido de ayuda y les haya econimizado unos minutos de busqueda en Google.

lunes, 20 de agosto de 2012

Instalando/Actualizando Java RunTime via GPO

Como bien escribió Sergio de los Santos en uno de los artículos de "Una al Día" de Hispasec, "si no actualizas Java, estas infectado". Por lo que en nuestra red debemos primeramente mantener Java actualizado, y segundo minimizar su instalación, o sea, instalarlo únicamente en los equipos que estrictamente lo necesiten. En muchos casos no sera necesario tener esta aplicacion instalada, pero seguro habrán algunos casos que lo necesiten. Para seas computadoras en las que es necesario tenerlo instalado podemos crear una Política de Grupo o "GPO" que se encargue de realizar la instalación y que solo se aplique a estos equipos. Cuando salga una actualizacion de Java, solo tenemos que actualizar nuestra GPO con el nuevo paquete de instalación. Y esa es la idea de este Post, aquí veremos como crear la política y como aplicarla a un grupo especifico de computadoras.


Como seguro saben, para instalar un programa mediante una GPO necesitamos tener la instalación de este en un paquete ".MSI". Pero cuando vamos a la pagina de Java (en este link) para descargar la ultima versión, vemos que lo que nos ofrecen es un archivo ".EXE" de instalación. Por ejemplo, a la fecha de este post la versión mas reciente (de la rama 6) es la 6 Update 33, el archivo que se descarga se llama "jre.6u33-windows.exe". Lo bueno es que este archivo trae empaquetado la instalación del programa y un instalador en formato de Windows Installer (.MSI), y al hacer doble clic encima de este descomprime estos archivos en una carpeta temporal y luego ejecuta desde ahi el instalador. Para crear nuestra política de grupo  solo tenemos que copiar estos archivos una vez han sido descomprimidos a una carpeta compartida a la cual las computadoras a las que se les aplicara la GPO tengan acceso. En Windows 7 estos archivos se descomprimen en la ruta "C:\Users\nombre-de-usuario\AppData\LocalLow\Sun\Java\". Al hacer doble clic encima el ejecutable que descargamos se abrirá la ventana de bienvenida siguiente, en ese momento podemos ir a la carpeta que les mencione y encontraremos la carpeta con los archivos necesarios:


Instalacion_Java
Al entrar a esta carpeta verán que se encuentran 2 archivos: un archivo de instalación "jre1.6.0_33.msi" y un archivo conteniendo los demás archivos necesarios llamado "Data1.cab". Copiaremos entonces la carpeta llamada "jre1.6.0_33", para el caso de la versión que estamos trabajando en este ejemplo, y la compartiremos en la red. Ya teniendo los archivos de instalación necesarios pasamos entonces a crear la GPO.

Para la creación de la GPO, en Windows 2008 abrimos la consola "Group Policy Management" y hacemos clic derecho encima del OU donde se encuentren las computadoras a las cuales aplicara la política. Se podría también crear la GPO a nivel del Dominio y luego configurar un filtro para que solo se aplique a un grupo especifico de Computadoras, de esta manera se podría aplicar la política a computadoras de diferentes OU. Para este ejemplo, crearemos un grupo llamado "Java_Computers" y haremos miembro de este grupo las computadoras a las que aplicaremos la política. La carpeta compartida que contiene el archivo "MSI" debe permitir el acceso a este grupo,  claro esta también los archivos dentro de esta. En este ejemplo crearemos la política a nivel de todo el dominio y mas adelante filtraremos en base al grupo "Java_Computers". Al hacer clic derecho encima del dominio, seleccionamos la opción "Create a GPO in this domain, and Link it here..." como se muestra a continuación:


Creacion GPO

Llamaremos a esta política "JavaInstall", haremos entonces clic derecho encima de nuestra nueva política y seleccionamos "Edit". En la ventana de edicion de la politica nos movemos a "Computer Configuration --> Policies --> Software Settings" y en "Software Installation" hacemos clic derecho, nos ponemos encima de "New" y hacemos clic en "Package":

Instalacion de Paquetes via GPO

Se abrirá entonces una ventana donde tenemos que indicar donde se encuentra el paquete de instalación a utilizar en esta Política, asi que escribiremos en la sección "File Name" la ruta completa al archivo que compartimos en la red. En el caso de este este ejemplo, los archivos de instalación se encuentran en "\\VBOXSRV\APPS\jre1.6.0_33\jre1.6.0_33.msi". Una vez hemos escrito la ruta hacemos clic en "Open"

Instalacion de paquetes via GPO

Luego seleccionamos "Assigned" en la ventana de dialogo que aparecerá a continuación y hacemos clic en "OK", al concluir esta parte se vera entonces la política de instalación de software de esta manera:

GPO

Aquí podemos cerrar esta ventana y con esto hemos creado la GPO, ahora como la aplicamos al dominio, filtraremos ahora la Política para que solo se aplique a las computadoras que pertenezcan al grupo "Java_Computers". Para esto, en la consola "Group Policy Management", haremos clic encima de la política que acabamos de crear (JavaInstall), en haremos clic en el tab "Delegation", aquí entonces haremos clic en "Advanced", como se muestra a continuación:

Asignacion permisos a GPO

En esta ventana se nos mostrara los permisos de la Política que hemos creado, eliminaremos el grupo "Authenticated Users" y agregaremos el grupo "Java_Computers" haciendo clic en "Add". Luego, estando encima de "Java_Computers" seleccionaremos "Allow" en la seccion "Apply group policy". De esta manera, solo las computadoras que pertenezcan a este grupo aplicaran esta política.

Asignacion Permisos GPO

Hacemos clic en "OK" y cerramos la consola "Group Policy Management". Con esto ya hemos creado nuestra política y se aplicara a las computadoras que especificamos. Deben tener en cuenta que una vez hayan agregado la cuenta del dominio de las computadoras al grupo "Java_Computers" deben reiniciarlas para que se aplique su membresia al grupo. Otra cosa a tener en cuenta son los permisos de acceso a la carpeta donde se encuentre la instalación de Java, ya que la computadora debe poder acceder a estos archivos para iniciar la instalación, recuerden que no es el permiso del usuario, ya que la instalación iniciara antes de que se inserten las credenciales del usuario en el sistema, sino la cuenta de la computadora la que debe tener acceso al Share. En caso de que la instalación no se ejecute, pueden dirigirse al "Security Log" en Windows Events y revisar los errores, generalmente los errores son de acceso a los archivos de instalación.

martes, 24 de julio de 2012

Leer Conversaciones Guardadas de Skype con SQLiteBrowser

En estos días se ha estado hablando de Skype en la red debido a la publicación de su código fuente y también a un problema que causaba que mensajes llegaran a personas que nisiquiera estaban en la lista de contactos. Así que quise aprovechar para hablarles de algo que encontré hace un tiempo mientras revisaba los archivos de datos de Skype, por simple curiosidad. Y es que el historial de conversaciónes o chat y otras informaciónes (como la lista de contactos) del usuario son almacenadas en un archivo de base de datos, y lo mejor, no esta encriptado ni nada parecido. Y todavía mejor, por default Skype almacena un historial de todas las conversaciónes, a menos claro que le digamos lo contrario, cosa que por lo que he visto muy poca gente hace.

En Windows 7, los archivos de datos de Skype se almacenan en la dirección "C:\Users\nombre-de-usuario-de-windows\AppData\Roaming\Skype\", dentro de esta carpeta encontraremos una o varias carpetas con los nombres de usuarios de Skype que se hayan logeado en esa computadora, en la que encontraremos estos archivos:


Archivos Skype

Como pueden ver en el gráfico anterior esta señalado el archivo "main.db", este es el archivo que contiene el historial de chat, los contactos, etc. Aquí es entonces donde utilizaremos el programa "SQLite Database Browser" que pueden descargar desde este link. Verán que es bastante sencillo de utilizar, solo hacen doble clic encima del ejecutable, luego hacen clic en "File--> Open Database" y buscamos el archivo "main.db" en la ruta mencionada anteriormente o donde lo hayamos copiado. Al abrir nuestro archivo lo primero que veremos sera la estructura de la base de datos, como se ve a continuación:

Base de datos Skype

En esta ventana seleccionamos el tab "Browse Data", y luego en la sección "Table" seleccionamos la tabla "Messages". Esta tabla es la que contiene el historia de Chat del usuario. Como verán, aquí aparecen las demás tablas que también pueden contener información interesante. En este caso seleccionaremos "Messages":

Archivo de Datos Skype

Esta tabla contiene muchas columnas, para ver el mensaje transmitido tendremos que movernos hacia la derecha en la ventana hasta la columna "body_xml". Lo bueno es que esta herramienta nos permite también ejecutar Queries SQL en esta base de datos, lo que nos facilitaría la lectura de los mensajes, para esto nos movemos al tab "Execute SQL", y en la sección "SQL String:" podemos escribir nuestro query y filtrar los mensajes. Las columnas mas importantes son author, from_dispname, dialog_partner y body_xml, así que podríamos ejecutar el siguiente query:

Archivos de Datos Skye

Como ven, ahora nos resultara mas cómodo leer todas las conversiones. Ahora bien, que hacer para evitar que alguien pueda leer nuestras conversaciones de esta manera? Lo primero primero seria decirle a Skype que no conserve nuestras conversaciones, esto se hace en "Tools --> Options --> Privacy" en la sección "Keep history for" seleccionamos "no history":

Configuracion Skype


Otra opcion seria borrar periódicamente este log, como ven en el gráfico anterior hay un botón "clear hostory" que se encargaría de esto. En la mayoría de los casos creo que la mejor opción seria la primera, no guardar historial de conversaciónes. Así que ya saben, la próxima vez que tengan la computadora de un amigo o compañero en sus manos y este usa Skype... no sean malos y adviertanle sobre el setting para eliminar las conversaciónes :) . Bueno, espero como siempre que esta información les haya sido de utilidad (tanto como a mi :P ).