Backup-remoto con autolimitación de ancho de banda

El siguiente comando, de una única línea parece que hiciera magia:

 tar -cj /backup | cstream -t 777k | ssh host 'tar -xj -C /backup'

Explicación:

tar -cj : (j) comprime con bzip el directorio backup, (c) y lo empaqueta en un único archivo
cstream -t 777k : limita la transferencia del contenido que le llega (el archivo empaquetado) a 777 kbps
ssh host ‘tar -xj -C /backup’ : se conecta por ssh al host destino y desempaqueta+descomprime el archivo bzip de backup que le llega en un directorio con el mismo nombre.

cstream es una joya que acabo de descubrir, al igual que el comando que he explicado, gracias a la excelente base de datos de comandos para administradores Linux que es commandlinefu.com

Túnel inverso SSH

Supongamos la siguiente situación: estás en casa y quieres conectar por ssh con el Linux de tu oficina (destino). Problema: el firewall de la oficina bloquea las conexiones entrantes. Desde el pc de la oficina puedes conectar hacia el exterior, y en concreto tienes acceso ssh a una máquina intermedia. Desde casa tienes acceso a la misma máquina intermedia, también por ssh. Bien, aquí es donde entra en juego los túneles ssh inversos.

Desde la máquina destino (lógicamente tendrás que hacerlo antes de irte de la oficina, o bien que alguien que ya esté en la oficina lo haga, o bien un proceso cron…)

user@destino$ ssh -R 10000:localhost:22 usuariointermedio@maquinaintermedia

Es decir, desde destino, abrir una conexión ssh contra la máquina intermedia. Al conectar, crear un túnel inverso de tal forma que el puerto 10.000 de la máquina intermedia conecte con el puerto 22 de la máquina destino.

Desde casa:

user@casa $ ssh usuariodestino@maquinaintermedia -p 10000

Es decir, conectar desde casa al puerto  10.000 de la máquina intermedia (con credenciales de la máquina destino). Si todo va bien, se nos abrirá una conexión ssh contra el Linux de la oficina , pasando como trampolín o pasarela  por la máquina intermedia.

Para rematar, si quieres evitar problemas de desconexión por timeout, modifica el fichero de configuración ssh /etc/ssh/sshd_config  para que incluya las siguientes líneas:

TCPKeepAlive yes
ClientAliveInterval 30
ClientAliveCountMax 99999

Nota: si la última orden ssh te dice algo como «Connection refused» haz lo siguiente: conecta normal por ssh (al puerto 22) desde casa a la máquina intermedia. Una vez ahí, lanza la siguiente orden:

$ ssh usuariodestino@localhost -p 10000

¡Listo!  Hoy, leer en el wiki de Gentoo sobre cómo se hacen túneles inversos por ssh contra máquinas protegidas por un firewall me ha salvado de hacer un viaje de unas cuantas horas… Espero que os venga igual de bien a vosotros, lectores de diariolinux.com.  Y recuerda que no es la primera vez que hablamos de las maravillas de ssh.

Soporte SOCKS con SSH. O cómo navegar de forma ‘más segura’

socks.pngssh cada vez me sorprende más. Las posibilidades que ofrece son inmensas, es com una navaja suiza de las comunicaciones. Al principio sólo lo usas para conexiones seguras. Luego le vas sacando punta con el uso de claves públicas, más tarde te enteras de la posibilidad de port forwarding, luego de la posibilidad de montar por ssh en local un directorio remoto, y ahora del soporte de port forwarding dinámico, es decir, del soporte SOCKS, que la Wikipedia define como: » protocolo de Internet que permite a las aplicaciones Cliente-servidor usar de manera transparente los servicios de un firewall de red. SOCKS es una abreviación de ‘SOCKetS'».

¿Y traducido al castellano? 🙂 Veámoslo con un caso práctico. En la facultad, tienes una conexión a Internet buena, pero no te fías de posibles intrusos, sniffers y demás. Y quieres actualizar tu blog a través de una conexión http (lo ideal sería https, pero…) sin que tu password vaya a caer al saco de los passwords capturados. Te gustaría enviar la información web cifrada SIEMPRE, independientemente de si usas http o https (al menos, te gustaría enviarla cifrada hasta un punto seguro, a partir del cual, te fías más y desde el que no te «molesta» tanto que vaya sin cifrar). Además, has leído que, si dispones de acceso ssh a algún servidor, puedes usarlo como trampolín (la información viajará cifrada hasta ese servidor y a partir de ahí, se usará como puente hacia la web que quieras acceder. La respuesta será recogida por el servidor ssh y éste nos la devolverá cifrada).

Bien, éste es el procedimiento: vamos a configurar un servidor SOCKS con ssh. Para ello:


$ ssh -l usuario -f -N -D 1082 servidor.com sleep 7200 <--- tenemos acceso ssh a servidor.com Ahora, en Firefox, abrimos Editar/Preferencias/Avanzado/Red/Configuración/ Seleccionamos Configuración manual del Proxy y en la casilla "Servidor SOCKS" ponemos: localhost En la casilla puerto, ponemos: 1082 (el mismo que hayamos elegido en el comando ssh anterior, no tiene por qué ser 1081) Pulsamos Aceptar y Cerrar. Ya puedes navegar de forma "algo más segura" 🙂 (¡y usando la IP del servidor SSH !) Esto último puede tener muchos e interesantes usos... Nota: -f es para hacer fork del proceso. -N es para evitar que se ejecuten comandos en la sesión ssh abierta. sleep 7200 es un comando cualquiera que no hace nada (para poder usar -f hay que dar un comando inicial a ejecutar. A partir de ahí el proceso se quedará residente en segundo plano.)