Tux Brazil

Lo hice y lo entendí

El blog de Vicente Navarro
13 Jun

Reenvío dinámico de puertos / montar un servidor SOCKS con SSH

En la entrada anterior, Creando túneles TCP/IP (port forwarding) con SSH: Los 8 escenarios posibles usando OpenSSH, vimos todas las posibilidades que tenemos a nuestra disposición para el reenvío de puertos (port forwarding)… pero para el reenvío de puertos estático. Es decir, allí sólo vimos casos en los que queríamos acceder únicamente a un puerto de otro sistema encauzándolo por dentro de la conexión SSH.

Sin embargo, en aquella entrada nos dejamos en el tintero el reenvío dinámico de puertos y varios lectores lo echaron de menos, de modo que esta entrada tratará de complementar a aquélla (muchas gracias a todos por la sugerencia).

Cuando hablamos de hacer dynamic port forwarding con SSH, de lo que estamos hablando exactamente es de convertir el SSH en un servidor SOCKS. ¿Y qué es un servidor SOCKS?

¿Sabes para qué sirve un proxy web? Probablemente sí, muchas empresas usan uno. Se trata de un sistema directamente conectado a Internet que permite que los clientes de una intranet sin acceso a Internet puedan navegar por la web si configuran sus navegadores para que hagan sus peticiones a través del proxy (aunque también hay proxies transparentes). Un proxy web, además de permitir la salida a Internet, también cacheará las páginas, imágenes, etc. ya descargadas por algún cliente para no tener que descargarlas para otro cliente. Además, permite filtrar los contenidos y monitorizar la actividad de los usuarios. Sin embargo, su función básica es la de reenviar tráfico HTTP y HTTPS.

Un servidor SOCKS le daría un servicio similar a la intranet de una empresa que el que proporciona un servidor proxy pero no está limitado a HTTP/HTTPS, sino que permite reenviar cualquier trafico TCP/IP (con SOCKS 5 también UDP).

Por ejemplo, imaginemos que queremos usar nuestro correo usando POP3 o ICMP y SMTP con Thunderbird desde una intranet sin acceso directo a Internet. Si sólo tenemos un proxy web disponible, la único sencillo que nos quedaría sería usar algún webmail (aunque si es un webmail también podríamos usar la extensión Webmail de Thunderbird). También podríamos aprovecharnos del proxy montándonos un túnel por HTTP. Pero lo más sencillo sería que la red tuviera un servidor SOCKS disponible que nos permitiera usar POP3, ICMP y SMTP a través de él sin ningún inconveniente.

Sigue leyendo »

24 May

Creando túneles TCP/IP (port forwarding) con SSH: Los 8 escenarios posibles usando OpenSSH

La función típica del protocolo de red Secure Shell (SSH) es acceder en modo terminal a un sistema remoto y ejecutar allí comandos de forma segura gracias a que los datos van cifrados. Pero además, a través de esa conexión de datos segura, es posible crear túneles (reenviar puertos / port forwarding) entre los extremos conectados de forma que las conexiones TCP/IP se encauzan a través de la conexión SSH con lo que podemos conseguir saltarnos cualquier firewall o bloqueo de puertos siempre que tengamos la posibilidad de conectar con SSH.

Como este tema está muy tratado por toda la red:

en esta entrada no entraremos en los detalles del reenvío de puertos, sino que pretende ser una chuleta, una referencia rápida (cheat sheet) de cómo reenviar puertos TCP con OpenSSH en los 8 diferentes escenarios que se pueden dar. Otros clientes de SSH como PuTTY también permiten el reenvío de puertos, pero la configuración se hará con un interfaz gráfico. Nosotros nos centraremos en OpenSSH.

En los siguientes ejemplos y situaciones supondremos que tenemos una red externa y una red interna y entre ambas redes, la única conexión posible es una conexión SSH entre el nodo de la red external externo1 y el nodo de la red interna interno1. El nodo externo2 está en la red externa y tiene conectividad total con externo1. El nodo interno2 está en la red interna y tiene conectividad total con interno1.

Túneles SSH: Sin túnel

Sigue leyendo »

16 May

rsync siempre sincroniza ciertos ficheros. Ver los segundos de la fecha de un fichero.

Tengo una memoria USB de 8 GB en la que suelo sincronizar con rsync (Backups con rsync) algunos ficheros de mi ordenador principal que quiero llevar siempre conmigo.

Teóricamente, el rsync sólo debería de sincronizar aquellos ficheros que han cambiado con respecto a la sincronización anterior. Sin embargo, yo detectaba que ciertos ficheros (no todos) siempre eran sincronizados, incluso aunque ejecutara el rsync dos veces seguidas.

Este comportamiento puede ser fácilmente reproducido. Creo 5 ficheros, esperando un segundo de tiempo entre la creación de uno y del siguiente (ese segundo de diferencia es clave en el asunto, en breve se verá por qué):

$ for i in 1 2 3 4 5; do echo test > fichero$i; sleep 1; done

$ ll
total 20
-rw-r--r-- 1 vicente vicente 5 2009-05-16 10:09 fichero1
-rw-r--r-- 1 vicente vicente 5 2009-05-16 10:09 fichero2
-rw-r--r-- 1 vicente vicente 5 2009-05-16 10:09 fichero3
-rw-r--r-- 1 vicente vicente 5 2009-05-16 10:09 fichero4
-rw-r--r-- 1 vicente vicente 5 2009-05-16 10:09 fichero5

Nota: Fijémonos en que en la salida de ls no se ven los segundos; volveremos sobre ello más adelante.

Sincronizo los ficheros en una memoria USB por primera vez:

$ rsync -av /tmp/prueba_rsync /media/disk/
sending incremental file list
prueba_rsync/
prueba_rsync/fichero1
prueba_rsync/fichero2
prueba_rsync/fichero3
prueba_rsync/fichero4
prueba_rsync/fichero5

sent 374 bytes  received 111 bytes  970.00 bytes/sec
total size is 25  speedup is 0.05

Y la segunda vez (y todas las siguientes) que lo intento tras desmontar y volver a montar la memoria USB, ¡me volverá a sincronizar varios de los ficheros!:

$ rsync -av /tmp/prueba_rsync /media/disk/
sending incremental file list
prueba_rsync/
prueba_rsync/fichero1
prueba_rsync/fichero3
prueba_rsync/fichero5

sent 284 bytes  received 79 bytes  242.00 bytes/sec
total size is 25  speedup is 0.07

La clave del problema está en que la memoria USB está formateada en FAT o FAT32 y tal y como leemos en rsync FAQ: rsync recopies the same files, FAT sólo almacena para el tiempo de modificación de los ficheros, valores pares para los segundos; es decir, la precisión máxima es de 2 segundos:

Another common cause involves sending files to an Microsoft filesystem: if the file’s modified time is an odd value but the receiving filesystem can only store even values, then rsync will re-transfer too many files. You can avoid this by specifying the –modify-window=1 option.

Aunque a mí me parece algo muy curioso en lo que no me había fijado nunca, en la entrada de la Wikipedia para el sistema de ficheros FAT: File Allocation Table sí que aparece documentado en la caja lateral de características:

Date resolution 2 s

Sigue leyendo »

01 Mar

Configurar WEP y WPA en línea de comandos y en el arranque en Debian y Ubuntu

Desde que el NetworkManager se ocupa de las conexiones de red en nuestras distribuciones, la antaño ardua tarea de configurar la red en Linux se ha simplificado ahora enormemente. Sin embargo, puede haber muchos casos en los que sigamos necesitando configurar la red en la consola. También hay muchos casos en los que es imprescindible que un sistema se conecte automáticamente a una red WiFi durante el arranque de la misma.

En esta entrada veremos cómo conseguir configurar nuestra distribución Debian o Ubuntu para conectarnos a una red WiFi encriptada con WEP o con WPA usando la línea de comandos. También veremos cómo modificar el fichero /etc/network/interfaces para que el sistema se conecte automáticamente a una red WiFi durante el arranque.

Para que no interfiera con mis pruebas, he deshabilitado el NetworkManager antes de comenzar con las mismas (lo que causará que nos desconectemos de las redes que éste gestione):

$ sudo /etc/init.d/NetworkManager stop

También he verificado si el demonio wpa_supplicant está corriendo en segundo plano y lo he matado con un simple kill. Hablaremos más adelante de este proceso.

Sigue leyendo »

22 Feb

Crear los certificados SSL para nuestro servidor web HTTPS con Apache, OpenSSL y Debian Lenny

Cuando escribimos nuestra contraseña para entrar al panel de administración de WordPress, ésta va en texto plano. En una red WiFi, por ejemplo, cualquiera podría ver muy fácilmente nuestra contraseña sólo con capturar la paquetes de la red mientras nos estamos registrando.

Aunque hay soluciones parciales (Semisecure Login Reimagined), la solución definitiva, como siempre, pasa por usar HTTPS o, lo que es lo mismo, HTTP sobre SSL. Desde la versión 2.6, WordPress permite usar SSL fácilmente para el panel de administrador. Así que me puse a hacer pruebas para configurar SSL en mi servidor web.

Sin embargo, ocurre una cosa muy interesante con el protocolo SSL cuando se usa con HTTP: que no se pueden servir fácilmente múltiples sitios virtuales encriptados con SSL desde una misma IP.

En el contexto de los servidores web, hablamos de sitios virtuales (Apache Virtual Host documentation) cuando servimos páginas de diferentes dominios desde un único servidor, en muchos casos compartiendo la IP y en otros, cada dominio con una IP diferente, posiblemente con interfaces virtuales. Cuando usamos HTTP sin SSL, el servidor sabe qué página en concreto estamos solicitando porque el cliente HTTP (el navegador) lo indica en la cabecera Host:

GET /blog/ HTTP/1.1
Host: www.vicente-navarro.com
User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; es-ES; rv:1.9.0.6) Gecko/2009020911 Ubuntu/8.10 (intrepid) Firefox/3.0.6
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es,en-us;q=0.7,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

Sin embargo, cuando se usa SSL, la negociación entre los extremos y la encriptación ocurre en una capa inferior, antes de que éstos comiencen a usar el protocolo HTTP. Por ello, no es trivial configurar diferentes certificados para diferentes sitios web virtuales. En la configuración típica, sólo podremos usar un certificado compartido para todas las páginas que se sirvan por HTTPS desde un único servidor web, a menos que usemos una IP diferente para cada sitio: Apache SSL/TLS Strong Encryption: FAQ: Why can’t I use SSL with name-based/non-IP-based virtual hosts?, Apache SSL/TLS Strong Encryption: FAQ: Why is it not possible to use Name-Based Virtual Hosting to identify different SSL virtual hosts?.

Para este inconveniente hay workarounds (TLS Support for name-based virtual servers) y soluciones definitivas con el Server Name Indication (SNI). Apache 2.2 no soporta SNI, pero el módulo de Apache mod_gnutls (incluido en Debian Lenny: libapache2-mod-gnutls) nos permitiría usarlo. Desafortunadamente, aunque Firefox (>=2), Safari, Chrome y Opera soportan esta extensión del protocolo, Internet Explorer 6 e Internet Explorer 7 para Windows XP no soportan SNI, por lo que no podemos usarla de momento por motivos obvios.

Por todos estos motivos, descubrí que con los hostings profesionales no resulta fácil o, mejor dicho, barato, tener un servidor SSL. Es lo que me va a impedir a mí poder configurar SSL para el panel de administración de LHYLE.

Sin embargo, podemos seguir estudiando cómo podríamos hacerlo si lo que tenemos es un Hosting Casero o si le hemos contratado un servidor dedicado a nuestro proveedor de hosting.

Sigue leyendo »

17 Feb

Segundo aniversario del blog

Hoy 17 de Febrero de 2009 es, de nuevo, un día especial para Lo hice y lo entendí, ya que ha pasado otro año desde Primer aniversario del blog y dos desde ¡Bienvenido a mi blog!.

Este año ha sido bastante menos productivo que el anterior, ya que si la entrada Primer aniversario del blog era la número 100, ésta será la número 152. Es decir, este año ha traído la mitad de entradas que el anterior.

La verdad es que este año, por diversas circunstancias personales, he tenido mucho menos tiempo para el blog que el anterior. ¡Ah! ¡El tiempo! Qué curiosa que es la expresión “no tengo tiempo”, ¿verdad? Es curiosa porque a menudo no tenemos tiempo para unas cosas pero para otras sí. Y es curioso ver las cosas para las que queremos tener tiempo y para las que no… ¿Habéis leído alguna vez ese texto de las piedras y el tiempo que circula por Internet?

Un experto asesor de empresas en Gestión de Tiempo quiso sorprender a los asistentes a su conferencia.

Sacó de debajo del escritorio un frasco grande de boca ancha. Lo colocó sobre la mesa, junto a una bandeja con piedras del tamaño de un puño y preguntó:

-¿Cuantas piedras piensan que caben en el frasco?

Después de que los asistentes hicieran sus conjeturas, empezó a meter piedras hasta que llenaron el frasco. Luego preguntó:

-¿Está lleno?

Todo el mundo lo miró y asintió.

Entonces sacó de debajo de la mesa un cubo con gravilla. Metió parte de la gravilla en el frasco y lo agitó. Las piedrecillas penetraron por los espacios que dejaban las piedras grandes. El experto sonrió con ironía y repitió:

-¿Está lleno?

Esta vez los oyentes dudaron

-¡Tal vez no!

-¡Bien! -y puso en la mesa un cubo con arena que comenzó a volcar en el frasco. La arena se filtraba en los pequeños recovecos que dejaban las piedras y la grava.

-¿Está lleno? -preguntó de nuevo.

-¡No! -exclamaron los asistentes.

-Bien -dijo, y cogió una jarra de agua de un litro que comenzó a verter en el frasco. El frasco aún no rebosaba.

-Bueno, ¿qué hemos demostrado? -preguntó.

Un alumno respondió:

-Que no importa lo llena que esté tu agenda: si lo intentas, siempre puedes hacer que quepan mas cosas.

-¡No! -concluyó el experto-. Lo que esta lección nos enseña es que si no colocas las piedras grandes primero, nunca podrás colocarlas después.

¿Cuáles son las grandes piedras en tu vida?

Tu familia, tu vocación, tus hijos, tus amigos, tus sueños, tu salud, la persona amada.

Recuerda, ponlas primero. El resto encontrará su lugar.

Bueno, me temo que de cara a “la tercera temporada”, mis circunstancias personales aún me lleven a tener todavía “menos tiempo”, exactamente en el sentido del texto anterior. Por ello, no os extrañéis si en los próximos meses el número de entradas decrece aún más dramáticamente. Pero bueno, eso aún tiene que llegar y aún está por ver. De momento, repasemos cómo ha ido el año.

Sigue leyendo »

03 Feb

¿Aún sigues con encriptación WEP para tu WiFi?

Hace tiempo que tenía ganas de probar personalmente si era tan fácil como dicen entrar en una red WiFi encriptada con WEP (Breaking 40-bit WEP in less than 30 seconds?, What else do you need not to use WEP anymore?, To WEP or not to WEP. That is the question!), pero no ha sido hasta hace unos días que me he puesto manos a la obra con este tema.

Para quien no lo sepa, WEP (Wired Equivalent Privacy) es un algoritmo de encriptación para redes WiFi que ha demostrado ser extremadamente débil. Para solucionarlo se creó otro sistema, el WPA, y posteriormente, el aún más robusto WPA2. A la mayoría de lectores del blog sí que les serán muy conocidas las siglas WEP, WPA y WPA2 de cuando configuran su red WiFi doméstica, tanto en el router, como en el ordenador, aunque para usar WPA2 en Windows XP es necesario instalar la actualización KB917021, incluida en el SP3.

En el estado actual de las cosas, la clave de una red WiFi encriptada con una clave WEP de 104 bits se puede recuperar fácilmente consiguiendo capturar entre unos 40000 y 90000 paquetes que contengan vectores de inicialización débiles (aircrack-ptw). Además, con las técnicas adecuadas, es muy fácil conseguir que un AP (Access Point) mande todos esos paquetes a gran velocidad, siendo posible conseguirlos en cuestión de minutos.

En cambio, la clave de una red WiFi encriptada con WPA sólo puede ser recuperada por fuerza bruta, de forma que si la clave es suficientemente compleja, la potencia computacional necesaria puede ser simplemente inalcanzable hoy en día, incluso usando la tecnología CUDA de NVidia para ayudar a romper WPA.

Sigue leyendo »

19 Ene

Ciertas versiones de Java pueden provocar pantallazos azules en la librería nv4_disp.dll del driver de NVidia

Hace pocos días que tengo mi nueva NVidia GeForce 9800GT, así que no había tenido ocasión de verlo antes, pero ayer fui a abrir el diálogo de configuración de Java JRE en Windows XP e inmediatamente tuve un buen pantallazo azul en la librería nv4_disp.dll del driver de NVidia. La versión del driver es la ultimísima, la 181.20, instalada muy pocos días antes.

De momento no caí en que podría tener que ver con algo de Java, así que me sorprendió mucho y ya pensé: “Ya la hemos liado, o el driver está mal o la la tarjeta tiene algún defecto hardware.”

Sin embargo, mientras reiniciaba el sistema pensé en que lo último que había hecho había sido intentar abrir la configuración de Java. Así que volví a hacerlo y… ¡pum! otro pantallazo azul. Volví a entrar, y probé con alguna web que tuviera applets Java y, de nuevo, BSOD.

Decidí desinstalar el Java JRE para evitar problemas. Era una versión muy vieja, la 1.4.2_09, de cuando instalé ese Windows XP por primera vez, ya que apenas uso Java en Windows en este sistema. Así que fui al panel de Agregar/Quitar programas y comencé la desinstalación. Pocos segundos después, nuevo pantallazo.

- Claro -pensé-, la desinstalación ha lanzado alguna aplicación Java para hacer alguna tarea y ha vuelto a ocurrir.

De modo que tras el n-ésimo reinicio, eliminé los archivos java.exe y javaw.exe del directorio de instalación de Java y, esta vez sí, mutilada la JRE e incapaz de ejecutar ningún código Java, pude completar la desinstalación.

Posteriormente descargué la última versión existente del JRE, la 1.6.0_11, la instalé, y comprobé que podía usarla ejecutando applets en diferentes páginas sin ningún problema.

Por tanto, ciertos pantallazos azules en la librería del driver de NVidia nv4_disp.dll pueden venir causados por una versión antigua de Java. Es algo a tener muy en cuenta porque podríamos tener una aplicación Java que arrancara desde el principio y nos causara una y otra vez pantallazos azules. Se me ocurre como ejemplo el cliente de BitTorrent Azureus.

Investigando un poco más, he encontrado que no soy el precisamente el primero que ha encontrado una correlación entre pantallazos azules del driver de NVidia y aplicaciones Java:

:wq

15 Ene

Aceleración por hardware de vídeo de alta definición H.264 en Linux con los nuevos drivers 180.x de NVidia

Se ve que este año me he portado muy bien, porque los Reyes Magos me han traído una nueva tarjeta gráfica NVidia GeForce 9800GT con 512MiB de DDR3 para sustituir a mi ya vetusta NVidia GeForce 6600 de 256MiB. La verdad es que no juego mucho, pero de vez en cuando echo alguna canita al aire. ¡Esperemos que esto no tenga consecuencias catastróficas en lo que concierne a mi productividad en el blog!

Uno de los temas que más ganas tenía de probar son las recientemente estrenadas capacidades de aceleración de vídeo de alta definición en H.264 en Linux usando los últimos drivers cerrados de NVidia (versión > 180.x), algo que descubrí recientemente que por fin era posible:

Recordemos que en Windows, la aceleración del vídeo por hardware se hace mediante la API de DXVA, y que en Linux teníamos la API XvMC. Sin embargo la XvMC es bastante limitada y, hasta el momento, los fabricantes (NVidia, ATI/AMD, Intel, VIA) sólo han desarrollado soporte para acelerar MPEG2, aunque esta API también podría ayudar con el vídeo comprimido con MPEG4. En la entrada: Sobre las VIA EPIA (VI): Gráficos y vídeo acelerado por HW en Linux con la EX10000EG, ya estuvimos viendo con los resultados de pruebas reales los grandes beneficios que, con una CPU tan modesta como las VIA conseguíamos usando la aceleración de la GPU.

Pero en realidad, fuera de esos casos tan concretos como el de los procesadores VIA, a nadie le preocupaba en los últimos años la aceleración de vídeo por hardware. Cualquier ordenador reciente era totalmente capaz de mover cualquier vídeo de resolución estándar comprimido en MPEG2 o MPEG4 sin ningún problema. Pero, ¡ay!… llegó la alta definición y yo, con mi Athlon 64 X2 4600+, ya no era capaz de mover una película a resolución 1080p Full HD sin dar saltos de vez en cuando.

Pero gracias a los Reyes Magos y a la tecnología NVidia PureVideo, de nuevo voy a poder disfrutar de la alta definición sin traumas para mi CPU.

Sin embargo, es lamentable que los tres grandes fabricantes no se hayan puesto de acuerdo en una API común, como lo era el XvMC o lo es el DXVA de Windows. La nueva API de NVidia que permite la aceleración de vídeo de alta definición es la VDPAU (Video Decode and Presentation API for Unix) (Phoronix: XvMC To Support More Video Standards?, Phoronix: Mplayer, FFmpeg Gain VA-API Support); la especificación de AMD/ATI es la XvBA (X-Video Bitstream Acceleration) (Phoronix: AMD’s X-Video Bitstream Acceleration); y finalmente, la de Intel es la VaAPI (Video Acceleration API). Una vez más, cada fabricante tirando para su lado y los perjudicados, los usuarios y, sobre todo, Linux, que no va a poder contar con una API unificada frente a lo que ocurre en Windows.

En cualquier caso, veamos cómo conseguir esta aceleración en una Ubuntu 8.10.

Sigue leyendo »

13 Ene

Comentarios anidados con WordPress 2.7, nueva vista para archivos y otros cambios en la plantilla

He estado trabajando bastante en reformar la plantilla. No ha habido ningún gran cambio estético, sino que en general han sido cambios para añadir funcionalidades. Además de otras muchas pequeñas mejoras, casi imperceptibles, las dos modificaciones más importantes han sido que la plantilla ahora permite los nuevos comentarios anidados (unos comentarios responden a otros) que ha introducido Wordpress 2.7 y que ahora, las páginas de Categorías, Etiquetas o Archivos muestran todas las entradas existentes, pero sin nada de texto o extractos, sólo mostrando el título y los metadatos. Esto era algo que tenía muchas ganas de implementar desde que me inicié en esto de escribir un blog, porque la forma que tiene WordPress por defecto de mostrar las Categorías, Etiquetas y Archivos, sacando 10 entradas por página, no te deja hacerte a la idea en un solo vistazo de qué hay exactamente en cada sección.

Comentarios anidados con Wordpress 2.7

En relación a los comentarios anidados, para entender cómo funciona el nuevo loop y cómo adaptar nuestra plantilla para mostrarlos como queramos, podemos usar varias excelentes páginas como referencia:

Al final yo no metí la tijera en la actual plantilla directamente para cambiar el sistema de comentarios viejo por el loop actual. Lo hice al contrario: copié el comments.php de la plantilla de por defecto, la Kubrick, y la fui adaptando a mis necesidades para tener una plantilla que soportara ya comentarios anidados sin problemas y con la máxima compatibilidad con cualquier plugin. El resto fue mucho trabajo de ajustar los estilos en CSS. El resultado se puede ver en los primeros comentarios de ejemplo de esta misma entrada.

¡Ah! Y no se nos tiene que olvidar activar los comentarios anidados en el panel de control (Opciones → Discusión).

Sigue leyendo »

 1 2 3 4 5 6 7 8 ... 14 15 16 Siguiente
Tema LHYLE09, creado por Vicente Navarro a partir del tema Fluid Index de 2yi