Ene 30 2014

(Y un día conocí a) Mosh, la evolución móvil de SSH

Gabolonte Blasfemus

moshEs increíble como uno de los antes y después de comenzar a laburar con *nix boxes es que, cuando te querés acordar, respirás la línea de comandos. No me refiero a que te los vas a saber todos de memoria, pero sí a que de repente vas a saber dónde estás más o menos parado y, en caso de que no te acuerdes qué deberías tipear, al menos saber cómo y en dónde buscarlo con confianza. Pero lo que sí se comienza a respirar casi con naturalidad es SSH. SSH para montar una unidad, para ver estadísticas del sistema, para correr scripts; SSH para todo.

No es para menos, es un protocolo muy seguro (si está bien implementado el cliente), podemos redireccionar infinitos puertos para usar túneles seguros y así llegar a cualquier servicio dentro de otra red (como VNC, uno de los primeros usos que todos le damos), y podemos tener tantas terminales abiertas como se nos antoje. Es casi de tereso pedirle más.

Continue reading


Ago 10 2012

Reconexión automática a VPN en Ubuntu Linux

Gabolonte Blasfemus

Aquellos que osadamente urgan en este repositorio de pecaminosas incongruencias saben bien que la seguridad al conectarse en redes Wi-Fi es un tema que siempre me interesó, llegando a dejar algunos consejos para una navegación más segura.

Desde hace ya algunos años que mi método de seguridad rutinario a la hora de conectarme desde mi portátil, ya sea desde Windows o Ubuntu, es a través de una VPN. En particular uso OpenVPN, que me parece excelente por una larga serie de motivos, entre los que cuento:

  1. Open Source.
  2. Clientes para casi todas las plataformas, incluidas las móviles; aunque ahí el mayor problema es el soporte de los fabricantes ya que en Android o iOS no alcanza con instalar una aplicación.
  3. Servidor también multiplataforma, aunque lo más recomendable es hacerlo desde Linux.
  4. Y tal vez lo más importante, no usa ningún protocolo raro que vaya a dar problemas con routers hogareños y demás; va por UDP o por TCP, y hasta podemos configurarlo para elegir uno o el otro, incluso cambiar el puerto por defecto. Esto es especialmente útil para los access points de lugares como StarBucks donde tienen ortivamente bloqueados todos los puertos de salida con excepción de los necesarios para navegar, el 80 que corresponde a http, y el 443 para su contraparte segura el https, y sólo en TCP. En este caso podemos levantar nuestro servidor OpenVPN en cualquiera de estos dos puertos con TCP y hacerles pito catalán lo más panchos.

Sin embargo, dentro de toda esta maravilla tenía un pequeño problema. Es muy normal que a veces la conexión VPN se interrumpa, generalmente por microcortes en la red inalámbrica. En el caso de OpenVPN GUI, la interfaz gráfica para gestionar las conexiones del cliente para Windows, esto no es un gran problema, ya que automáticamente reintenta hasta que vuelve a establecer el túnel VPN. En Linux, al menos si utilizamos para conectarnos el Network Manager de Gnome que incorporan distros como Ubuntu, al ocurrir la interrupción la conexión no vuelve a resumirse, y nuestro único aviso es el pequeño y diminuto icono del candado que desaparece del icono del Network Manager y un temporal mensaje que nos avisa del evento. Si estábamos absortos en algo o no mirábamos a la pantalla es fácil obviarlo, y continuar con nuestra sesión ya sin contar con la protección necesaria para no encontrarse a merced de ojos ajenos. Y aunque los diálogos de configuración de Network Manager contemplan la posibilidad de marcar la conexión para que se realice automáticamente, esta opción sencillamente aún no funciona para las conexiones VPN.

Vi que existen otros métodos para resolver este problema, pero el que realmente me funcionó tiene que ver con la genial posibilidad que poseen las versiones más recientes del Network Manager de controlarlo desde la consola a través del comando nmcli. Esto abre las puertas a una solución simple y sucia de scripting como la que vi en este hilo de AskUbuntu.

#! /bin/bash

REQUIRED_CONNECTION_NAME="name-of-connection"
VPN_CONNECTION_NAME="name-of-vpn-connection"
activ_con=$(nmcli con status | grep "${REQUIRED_CONNECTION_NAME}")
activ_vpn=$(nmcli con status | grep "${VPN_CONNECTION_NAME}")
if [ "${activ_con}" -a ! "${activ_vpn}" ];
then
     nmcli con up id "${VPN_CONNECTION_NAME}"
fi

Este script básicamente conecta la VPN definida sólo cuando determinada conexión de red, que puede ser inalámbrica, por cable, o 3G, se vuelve activa. En este caso, name-of-connection es el nombre que lleva en Network Manager la conexión de red sobre la cual queremos establecer la conexión VPN, por ejemplo una conexión a una red Wi-Fi; name-of-vpn-connection es por otro lado el nombre que lleva la conexión VPN que deseamos usar, no importa si es por OpenVPN u otro estándar. Pero para mi menester necesito algo aún mucho más simple, yo sólo necesito que la conexión VPN a la que decidí conectarme vuelva a reconectarse automáticamente en caso de corte, por lo que mi script quedó, desde mi poco pulidos conocimientos, así:

#! /bin/bash

NUNCA=1
VPN_CONNECTION_NAME="name-of-vpn-connection"
while [ $NUNCA ]; do
     activ_vpn=$(nmcli con status | grep "${VPN_CONNECTION_NAME}")
     if [ ! "${activ_vpn}" ];
     then
          nmcli con up id "${VPN_CONNECTION_NAME}"
     fi
     sleep 5
done

El anterior es un script que podemos ejecutar desde cualquier ventana de terminal y dejarlo corriendo todo el tiempo que lo necesitemos de fondo. Al ejecutarlo lo único que hace es entrar en un loop interminable donde chequea si la conexión VPN definida está levantada, y si no lo está la activa; luego espera 5 segundos y vuelve a comenzar. Se puede refinar muchísimo más la idea pero si lo queremos hacer simple y rápido podemos tener una copia de este script para cada perfil VPN que usemos, y luego ya no hará falta conectarse desde el icono del Network Manager a la VPN, simplemente ejecutamos el script seleccionado y mientras no lo interrumpamos con un Ctrl+C o cerrando la ventana se va a encargar de mantener siempre arriba el enlace VPN.


May 25 2012

Crear un hotspot Wi-Fi desde la línea de comandos de Windows 7

Gabolonte Blasfemus

MiFi, módem 3G + router WiFiHoy en día está muy expandida la idea de poder compartir inalámbricamente cualquier conexión a Internet de la que dispongamos, generalmente enlaces de datos de telefonía celular. La mayoría de los smartphones decentes tienen la capacidad de hacerlo nativamente o mediante algun hack y/o aplicación (lo que se le llama tethering), y de hecho ya son bastante comunes las “cajitas para compartir Internet” conocidas como MiFi, que no son más que un modem 3G asociado a un router WiFi, todo integrado en un solo gadget del tamaño de un estuche de anteojos, de manera que facilite tener un enlace móvil para dispositivos que también lo son, como notebooks, netbooks, smartphones, tablets o lo que se nos ocurra. ¡Si hasta ya son comunes los autos con WiFi!

Pero lo más probable es que no tengamos un auto que comparte Internet, ni aún justifiquemos la compra de un MiFi, pero que sí tengamos un modem 3G o 4G USB que usemos en nuestra PC o notebook, y a través del cual algunas veces nos gustaría poder compartir la conexión, inalámbricamente, con otros aparatos. Hace un buen tiempo vimos como una aplicación llamada Connectify nos permitía conseguir exactamente esto, utilizando capacidades propias de Windows 7. Lo que me enteré hace poco, despistado de mí, es que esto mismo podemos lograrlo desde la misma línea de comandos de Windows 7, sin necesidad de descargar e instalar aplicación alguna.

Continue reading


Abr 23 2012

Retomar una sesión SSH de la que nos desconectamos

Gabolonte Blasfemus

si Keanu lo dice por algo seráPor estos días tenía una pequeña duda existencial (no, no de estas): ¿Qué pasaba cuando me desconectaba de una sesión SSH en la que estaba corriendo algo? Bueno, en realidad la respuesta a eso la intuía por experiencia y por mirar: Cuando el cliente se desconecta la sesión, y sus procesos hijos, son eliminados. Más bien mi inquietud era: ¿Existe alguna forma de dejar un proceso corriendo en una sesión, desconectarse y que este continúe ejecutándose, para luego volver a conectarse y resumir dicha sesión?

Pongamos como ejemplo que estamos cursando la carrera de BOFH básico, y hay un luser que nos cae tan pero tan bien que vamos a copiar una de sus copias de seguridad, donde figuran todos esos correos y videos calientes que no le muestra a nadie en la oficina, a una carpeta pública en la red para deleite de compañeros y superiores. Pero el muchacho en cuestión tiene tonelada de material, y es fanático de la alta definición, y nosotros queremos copiarlo todo; si lo hacemos desde una sesión SSH deberíamos tenerla abierta todo el tiempo que la operación de copia dure. Todo un bajón si estamos desde el Wi-Fi de nuestro café favorito y en un rato nos tenemos que ir, ya que si nos desconectamos, como dijimos antes, todos los procesos hijos se matan, entre ellos la copia de archivos que ejecutamos. Lo ideal sería, iniciar la copia ahora desde el café, y cuando lleguemos a nuestro nuevo destino volver a conectarnos por SSH y de alguna manera recuperar esa sesión, que nunca debería haberse anulado, para continuar viendo el proceso, o si ya terminó y todo salió bien.

Desde mi tierna inocencia sospechaba que un mundo tan poderoso a nivel línea de comandos como el de *nix tenía que tener desde hace tiempo una solución a esto, y esa solución es el comando screen. screen mantiene la sesión abierta por nosotros, con el proceso que hayamos lanzado corriendo, aún cuando nos hayamos desconectado. En realidad, screen es una herramienta mucho más poderosa, no pensada únicamente para esto, ya que se trata de un emulador de terminales virtuales desde donde podemos correr varias sesiones separadas de línea de comandos, cada una con su proceso, en simultáneo. Pero para nuestro fin todo lo que tenemos que saber es que tenemos que tipear el comando screen ni bien iniciamos sesión, luego presionar espacio o enter para continuar, y volveremos a la línea de comandos para hacer lo que tengamos que hacer, por ejemplo copiar los videos y mails de nuestro amigo luser. ¿Qué pasa entonces si nos desconectamos de la sesión SSH? screen continúa corriendo esa sesión de consola con el proceso que hayamos lanzado por nosotros. Cuando nos volvemos a conectar por una nueva sesión SSH y deseamos volver a ella, todo lo que tenemos que escribir es screen –r, y la magia sucederá.

la pantalla de inicio de screen

También podemos, como mencioné antes, manejar varias sesiones desde screen. Supongamos que mientras copiamos los videos de nuestro muchacho queremos hacer algo más, como por ejemplo borrarle un documento importante (acción digna de todo BOFH). Con presionar Control+a y luego c, screen creará una nueva sesión y nos posicionará en ella; de esta manera podemos crear tantas como necesitemos. Para luego volver a cada una, podemos presionar Control+a y el número de sesión (comienza desde 0) o simplemente Control+a y luego (comillas dobles) para visualizar un menú desde donde podemos ver las sesiones activas e ingresar a la deseada. Podemos ver la abrumadora lista de completa de atajos y parámetros de línea de comandos en su manpage cuando no tengamos nada que hacer durante una tarde.

image

Seguramente existirán a lo mejor otras formas de acometer el mismo fin propuesto, pero este método me resultó terriblemente cómodo, y para mejor, screen es uno de esos comandos que vienen incluidos en cualquier Linux; no hace falta andar instalando ni mucho menos compilando nada.


Mar 21 2012

Ésto es Internet móvil, lo demás pavadas

Gabolonte Blasfemus

Todavía observo con asombro como otra profecía post-apocalíptica de la TV y el cine se hizo realidad, y tal como en la serie debut de Jessica Alba, Dark Angel, el gobierno yanqui manda drones voladores, muchas veces armados, operados a control remoto a vigilar y atacar objetivos, entre ellos gente y, por qué no, hasta a sus propios ciudadanos que ayudaron a pagar estas amenazas con sus propios impuestos.

Por suerte, en medio de tanta oscuridad cada tanto se encuentra un atisbo de esperanza, de que algo mejor puede hacerse con las cartas que nos dieron. Liam Young, de Tomorrows Thoughts Today, un grupo de pensamiento (o think tank, como les gusta decir a los anglos) dedicado a “explorar las consecuencias del urbanismo fantástico, perverso y subestimado”, nos enseña esa lección con un enjambre de drones que, siendo utilizados como unidades de vigilancia y control por los militares y la policía, fueron reacondicionados para una función mucho más social y humana: Ayudar a compartir.

Flotando en el aire, estos vigilantes reivindicados conforman una red inalámbrica Wi-Fi que permite a cualquiera en las cercanías conectarse y compartir contenido con otros en la misma zona. El proyecto se llama Electronic Countermeasures, y lo definen como una suerte de verdadera Internet pirata, un Napster aéreo. Cuando la reunión se termina, o llegan fuerzas represivas, los drones simplemente pueden volar lejos a otra parte, trasladando consigo su red y su punto de conexión para la gente. Aunque me pregunto cuánta autonomía y alcance de control tendrán estos bichos…

Pero no sólo esta red de drones aporta la posibilidad de conectarse entre las personas y compartir, sino que además lo hace con arte y elegancia. Cada vez que alguien se conecta a la red, las naves parpadean y cambian formación, representando diversos patrones, que en un cielo nocturno deben ser todo un espectáculo para vivir. Los dejo con el video que nos da una idea de lo genial que debe ser conectarse a esta red pirata.