Como sortear la Censura de Internet
ar en fa fr my ru vi zh

SSH Tunnelling

SSH, (Secure Shell), es un protocolo estándar que cifra las comunicaciones entre el ordenador y el servidor. El cifrado impide que estas comunicaciones sean vistas o modificadas por los operadores de red. SSH puede ser usado por una gran variedad de aplicaciones de comunicaciones seguras, donde lo más común es el acceso seguro a los servidores y la transferencia de ficheros segura (SCP o SFTP).

SSH es especialmente útil para evadir la censura porque puede proveer túneles cifrados y trabajar como un cliente proxy genérico. Los censuradores normalmente no bloquean completamente el SSH porque se usa para muchos propósitos y no solo para evadir la censura; por ejemplo, es usado por los administradores de sistema para administrar sus servidores en Internet.

Usar SSH requiere de una cuenta en un servidor, generalmente un servidor Linux o Unix. Para evadir la censura este servidor necesita tener acceso sin restricciones a Internet e, idealmente ser operado por un contacto confiable. Algunas compañías también venden cuentas en sus servidores, y muchos sitios de hospedaje brindan acceso SSH. Se puede encontrar una lista de proveedores de cuentas en:
http://www.google.com/Top/Computers/Internet/Access_Providers/Unix_Shell_Providers que venden cuentas entre los 2 y 10 USD por mes.

Un programa SSH llamado OpenSSH viene instalado en la mayoría de los Unix, Linux y Mac OS y consiste en un programa de líneas de comando ejecutado desde un terminal como “ssh”. Para Windows también se puede obtener una implementación SSH llamada PuTTY.

Todas las versiones recientes que soportan SSH crean un proxy SOCKS que permiten que un navegador Web y otras variedades de aplicaciones usen conexiones SSH cifradas para conectarse con Internet sin restricciones. En este ejemplo, solo se describe este uso de SSH. Los pasos a continuación configuran un Proxy SOCKS en un puerto local 1080 en la computadora.

Linea de comando EN Linux/Unix Y MacOS (Con OpenSSH)

OpenSSH está disponible en http://www.openssh.com/, pero viene pre instalado en Linux/Unix y Mac OS.

El comando ssh que se ejecutará contiene un puerto local (típicamente 1080), un nombre de servidor y un nombre de usuario (nombre de cuenta). El comando sería así:

ssh -D localportnumber accountname@servername

Por ejemplo:

Se nos pedirá la contraseña y se establecerá la conexión con el servidor. Con el uso de la opción –D, se creará un Proxy SOCKS que existirá mientras se esté conectado al servidor. Importante: debemos verificar la llave del host y configurar nuestras aplicaciones, de otra forma no estaremos usando el túnel que creamos.

Interfaz de usuario gráfica de Windows (with PuTTY)

PuTTY está disponible en :
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html.

Podemos salvar el programa putty.exe en el disco duro para usos futuros, o ejecutarlo directamente desde el sitio Web (a menudo, esto es posible en una computadora compartida o con acceso público como las de las librerías o Cibercafés).

Cuando iniciamos PuTTY, aparece un diálogo de configuración de sesión. Primero entramos el nombre (dirección) del servidor SSH al que queremos conectarnos (aquí, “ejemplo.com”). Si solo conocemos la dirección IP o si el DNS impide usar el nombre de los servidores, podemos usar la dirección IP. Si ejecutamos estos pasos frecuentemente, podemos crear opcionalmente un perfil PuTTY para salvar estas opciones que se describen anteriormente para usarlas cada vez que se necesiten.

PuTTY_config_1

Después en la lista, Category, seleccionamos Connection, después SSH, y después Tunnels.

Entramos 1080 en el campo Source port, y seleccionamos las cajas Dynamic e IPv4.

PuTTY_config_2

Ahora hacemos clic en el botón Add y después en el botón “Open”. Se establece una conexión con el servidor, y se abre una ventana pidiendo el nombre de usuario y la contraseña.

Entramos esta información y estaremos registrados en el servidor y recibiremos un prompt de una línea de comando desde el servidor. El proxy SOCKS está establecido. Importante: debemos verificar la llave del host y configurar nuestras aplicaciones, de otra forma no estaremos usando el túnel que creamos.

Verificación de la llave de host

La primera vez que nos conectamos a un servidor, debemos confirmar la impresión digital de ese servidor. La impresión digital es una secuencia larga de letras y números (hexadecimales) ej.  57:ff:c9:60:10:17:67:bc:5c:00:85:37:20:95:36:dd que identifica de forma segura a un servidor en particular. Chequear la impresión digital es una medida de seguridad que permite confirmar que estamos comunicando con el servidor que pensamos, y que la conexión cifrada no está siendo interceptada. 

SSH no brinda un medio de verificar esto automáticamente. Para obtener el beneficio de este mecanismo, debemos tratar de chequear el valor de la firma digital del servidor con el administrador del servidor que estamos usando, o pedirle a un contacto de confianza que intente conectarse al mismo servidor para ver si ve la misma firma digital.

Verificar la firma digital es importante para asegurarnos que SSH protege la privacidad de las comunicaciones de la curiosidad de terceros, pero no es necesario si solo deseamos evadir la censura y no nos importa si los operadores de redes pueden ver el contenido de las comunicaciones.

Configurando aplicaciones para usar el Proxy

El Proxy creado en los pasos anteriores debe trabajar hasta que se cierre el programa SSH. Sin embargo, si se interrumpe la conexión al servidor, se necesitará repetir los mismos pasos para reactivar el Proxy.

Una vez que el Proxy esté ejecutándose, necesitamos configurar las aplicaciones para usarlo. Para ello veremos los pasos a continuación, el Proxy será un Proxy SOCKS localizado en localhost, puerto 1080 (también conocido como 127.0.0.1, puerto 1080). Debemos asegurarnos que las aplicaciones estén configuradas de forma que impida la fuga de DNS, lo que puede hacer menos efectivo a SSH en cuanto a protección de privacidad y evasión de censura.

Más opciones

Hasta el momento, todos estos comandos muestran una línea de comando en la máquina remota desde la que podemos ejecutar los comandos. Algunas veces podemos querer ejecutar un comando simple en una máquina remota, que se devuelva después a nuestra línea de comandos en la maquina local. Esto se puede lograr poniendo el comando que queremos ejecutar en la máquina remota entre comillas simples.

$ ssh remoteusername@othermachine.domain.org 'mkdir /home/myname/newdir'

Algunas veces lo que necesitamos es ejecutar comandos que consumen mucho  tiempo en una máquina remota, pero no estamos seguros de tener suficiente tiempo durante la sesión actual ssh. Si cerramos la conexión remota antes de que una ejecución de comandos se haya completado, ese comando será abortado. Para evitar perder nuestro trabajo, podemos empezar por la vía ssh una sesión screen remota y separarla y reconectarnos cada vez que queramos. Para separar una sesión remota, simplemente cerramos la conexión ssh: una sesión aparte se mantendrá ejecutándose en la máquina remota.

ssh ofrece muchas más opciones, que se describen en la página del manual. Podemos configurar nuestro sistema favorito para permitir registrarnos o ejecutar comandos sin especificar nuestra contraseña todo el tiempo. La instalación es complicada pero puede ahorrarnos bastante interacción con el teclado; intentemos algunas búsquedas web con "ssh-keygen", "ssh-add", y "authorized_keys".

scp: copia de ficheros

El protocolo SSH se extiende más allá del comando ssh. Un comando particularmente útil basado en el protocolo SSH es scp (secure copy command). El siguiente ejemplo copia ficheros del directorio actual de nuestra máquina local al directorio /home/me/stuff en una máquina remota.

$ scp myprog.py me@othermachine.domain.org:/home/me/stuff

Debemos tener en cuenta que el comando sobrescribirá cualquier fichero con el mismo nombre /home/me/stuff/myprog.py. (O tendremos un mensaje de error si hay un fichero con el mismo nombre y no tenemos privilegios para sobrescribirlo). Si /home/me es nuestro directorio, el directorio destino puede abreviarse.

$ scp myprog.py me@othermachine.domain.org:stuff

Podemos fácilmente copiar en la otra dirección: de la máquina remota a la local.

$ scp me@othermachine.domain.org:docs/interview.txt yesterday-interview.txt

El fichero en la máquina remota es interview.txt en el subdirectorio docs de nuestro directorio. El fichero será copiado en yesterday-interview.txt en nuestro directorio en el sistema local 

scp puede usarse para copiar un fichero de una máquina remota a otra.

$ scp user1@host1:file1 user2@host2:otherdir

Para copiar recursivamente todos los ficheros de un subdirectorio a un directorio, usamos la opción –r.

$ scp -r user1@host1:dir1 user2@host2:dir2

Podemos ver la página man de scp para más opciones.

rsync: Transferencias y copias de seguridad automáticas

rsync es un comando muy útil que mantiene un directorio remoto en sincronía con un directorio local. Se menciona aquí porque es una forma muy útil de trabajo en red, como ssh, y porque el protocolo ssh es recomendado como transmisión fundamental para rsync.

El siguiente es un ejemplo simple y útil. Copia ficheros desde nuestro directorio local /home/myname/docs a un directorio llamado backup/ en nuestro directorio en el sistema quantum.example.edu. Rsync actualmente minimiza la cantidad de copias necesarias a través de varios chequeos sofisticados.

$ rsync -e ssh -a /home/myname/docs me@quantum.example.edu:backup/

La opción –e ssh es para usar el protocol SSH bajo la transmisión, como se recomienda. La opción –a (que significa “archivo”) copia cualquier cosa con el directorio especificado. Si deseamos eliminar los ficheros en el sistema local mientras se van copiando, incluimos la opción a –delete. Para más detalles podemos la página del manual acerca de rsync.

Haciéndonos la vida más fácil cuando usamos SSH con frecuencia

Si usamos SSH para conectarnos a muchos servidores diferentes, podemos a veces cometer errores escribiendo sus nombres y nuestro nombre de usuario (imaginemos si tenemos que recordar 20 combinaciones nombres de usuario/nombres de servidor). Afortunadamente, SSH ofrece un método simple para manejar la información de sesión a través de un fichero de configuración.

El fichero de configuración está oculto en nuestro directorio bajo el directorio .ssh (el path completo sería algo así /home/jsmith/.ssh/config – si el fichero no existe podemos crearlo).
Usamos nuestro editor favorito para abrir el fichero y especificamos los hosts así:

Host dev
HostName example.com
User fc

Podemos configurar múltiples hosts en nuestro fichero de configuración, y cuando lo salvemos nos conectamos al host que nombramos “dev” ejecutando el siguiente comando:

$ ssh dev

Es necesario recordar, que mientras más usemos estos comandos más tiempo ganamos.