Google EL TIPO DE INFORMATICA

lunes, 10 de febrero de 2014

Corriendo Aplicaciones de Windows en Mac OS X con Wine

Desde hace unos meses he estado trabajando con una MacBook Pro, la había estado utilizando como segunda computadora aprovechando la base Unix del sistema, así utilizaba algunas herramientas en ella. Hace poco decidí probar migrarme por completo a esta y utilizarla en el día a día, pero necesitaría buscar la forma de correr algunas aplicaciones que uso a diario en Windows, cosas sencillas como UltraVNC (si, se que hay versiones de VNC nativas para OS X, pero la versión que uso en el trabajo es UltraVNC y autenticando con Active Directory) entre otras mas, así que sobre esto les voy a hablar en este Post. Para correr aplicaciones Windows en Mac OS usaremos el ya conocido Wine que se usa en Linux para los mismos fines, y para instalar Wine, usaremos Homebrew, que si no lo han utilizado antes, verán que les sera de mucha utilidad.

Homebrew es un manejador de paquetes, es el "apt-get" o "yast" para Mac (o uno de ellos, también esta MacPorts) Con homebrew podemos instalar facilmente herramientas open-source sin tener que preocuparnos por sus dependencias, ya que Homebrew se encargara de gestionarlas e instalarlas. Para instalar Homebrew necesitaran primero instalar Xcode, pueden descargarlo desde el App Store. Una vez hayan instalado Xcode solo necesitan ejecutar la siguiente linea en una ventana de Terminal:

$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Luego que haya concluido la instalación, ejecutamos el siguiente comando para confirmar que todo ande bien con Brew y sus requisitos, en caso de que haya algún problema o haga falta algo, el nos lo hará saber. 

$ brew doctor

Este comando nos hará saber cualquier cosa que haya que corregir, si todo salió bien, podremos continuar con la instalación de Wine. Ya que tenemos Homebrew, la instalación de Wine es bastante sencilla. En una ventana de Terminal ejecutamos el siguiente comando:

$ brew install wine winetricks

Como sucede con otros gestores de paquetes como 'apt-get', podemos indicar varias aplicaciones a instalar, en este caso a parte de WINE instalaremos tambien WINETRICKS. Winetricks nos permitira instalar algunos componentes y librerias (DLL's) requeridas por algunas aplicaciones, lo podremos utilizar para instalar, por ejemplo, .NET Framework. Una vez ejecutemos el comando anterior, Homebrew se encargara de descargar wine y sus dependencias y los compilara, esto se tomara unos minutos. Cuando haya terminado este proceso ya tendremos Wine instalado y podemos pasar a instalar la aplicación Windows que queremos ejecutar. A esta altura, solo necesitamos la instalación del programa que queremos ejecutar en nuestra Mac. Usaremos como ejemplo la aplicación que les mencione al inicio, UltraVNC. Lo descargamos de esta pagina y guardamos la instalación en cualquier carpeta, por ejemplo en 'Downloads'. Abrimos nuevamente una Terminal, nos movemos a la carpeta donde tenemos la instalación del programa y ejecutamos el siguiente comando:

$ wine UltraVNC_1.0.9.6.1_Setup.exe

Si todo ha salido bien, veremos la siguiente ventana:

Instalacion VNC

De aquí en adelante solo tenemos que hacer como en cualquier instalación en Windows, presionar "Ok" y luego Next, Next, Next. Los programas que instala wine se ubican por defecto en:

 "/Users/usuario/.wine/drive_c/Program Files/Aplicacion"

Donde "usuario" es el home folder del usuario con el estamos logeados y ejecutamos wine, y "Aplicación" es el folder que creo la aplicación que instalamos, para el caso de este ejemplo esta carpeta es "UltraVNC". Así que para abrir nuestra aplicación ejecutaremos el comando:

 $ wine /Users/usuario/.wine/drive_c/Program \Files\UltraVNC/vncviewer.exe

Entonces abrirá nuestra aplicación:

UltraVNC

Y ya tenemos nuestra aplicación corriendo en Mac OS 10. Pero como seguramente están pensando, no resulta cómodo ejecutar la aplicación con esta linea de comando cada vez que necesitemos la aplicación, así que en el próximo post veremos como crear un acceso directo para la aplicación y crearle también su icono de acceso para el Dock, mientras tanto vayan instalando sus aplicaciones.

Crear Shortcuts Para Aplicaciones Wine en Mac OS X

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.