SSH/SFTP Enjaulado

SSH es una herramienta extremadamente poderosa. Mucho poder quiere decir mucha responsabilidad. Si alguna vez tenemos que dar acceso de SSH o SFTP a nuestro servidor a alguien que no conozcamos, entonces es buena idea darles lo mínimo necesario para que realicen sus tareas.
Las buenas noticias es que podemos crear ambientes aislados a los usuarios con el conjunto de herramientas que ellos necesitan. . Entre otras cosas, estas herramientas pueden servir ser sincronizar directorios utilizando rsync sobre ssh, tener acceso para subir archivos de forma segura al servidor utilizando SFTP, entre otras.
La primera vez que me tocó crear un ambiente chroot para un usuario era necesario compilar una versión modificada de ssh. Si bien era un trabajo tedioso, existe buena documentación en Internet y se podría seguir how-tos bastante bien documentados. Recientemente investigué otra vez sobre el tema y veo que ahora ssh soporta nativamente ambientes enjaulados y existe un script que nos permite crear los ambientes enjaulados.

Nota: Todos los ejemplos que pongo a continuación con SSH se podría utilizar con cliente SFTP como Filezilla. Sigue leyendo

Artículos relacionados

  • No existen artículos relacionados

Simplifica tu vida gracias a ~/.ssh/config

Para las personas que trabajamos mucho con SSH, tenemos que recordar varios nombres de host, ips, usuarios, puertos, etc…. Ya vimos como hacer para no recordar demasiadas contraseñas, pero igual todavía son demasiadas cosas que recordar para acceder a nuestros servidores remotos. Hace poco descubrí que existe el archivo de configuración ~/.ssh/config que sirve para facilitar nuestra vida.

Supongamos que debemos ingresar a un servidor remoto, con un nombre de usuario que no es el mismo de mi máquina local y además corremos el servidor en un puerto distinto al 22. Cada vez que accedamos a este servidor deberíamos escribir algo así:

ssh -p 443 usuarioremoto@servidorremoto.com

No es el fin del mundo, pero si tenemos muchos servers y una mala memoria se nos complica un poco la vida. Que tal si en lugar de escribir toda esa línea podemos escribir simplemente:

ssh sremoto Sigue leyendo

Artículos relacionados

  • No existen artículos relacionados

Copiar archivos con SCP (SSH)

Para muchos esto no sea ningún tip, sino el día a día. Sin embargo, me he topado con muchos administradores de sistema no conocen un comando tan básico como scp. Además, seguro que muchos no saben que se puede controlar el ancho de banda mientras se copia un archivo. Útil para cuando copiamos archivos muy grandes al Internet pudiendo saturar nuestra conexión.

El comando SCP básicamente sirve para copiar archivos de un computador a otro, de manera encriptada, a través del protocolo SSH. Funciona de manera muy similar a como funciona el comando cp, donde tenemos un origen y un destino. La diferencia es que el origen o el destino van a ser computadores diferentes.

Ejemplo 1: Origen local, destino remoto

scp archivo.tar.gz usuario@servidorremoto.com:

Sigue leyendo

Artículos relacionados

  • No existen artículos relacionados

SSH y HTTPS en puerto 443

En el artículo anterior explique como navegar a través de un servidor socks creado con ssh. Eso va a funcionar siempre y cuando no tengamos bloqueado el puerto en el que estamos corriendo ssh en nuestro servidor (por defecto el 22). Es muy probable que el puerto 22 este bloqueado, pero muy poco probable que el 443 sea bloqueando.

Una solución simple podría ser ejecutar SSH en el puerto 443, pero lo más probable es que necesitemos correr alguna aplicación HTTPS en ese puerto. La solución a este problema se llama SSLH. Sus autores lo llaman un multiplexor SSH/HTTPS.

Básicamente lo que hace este servicio es redirigir las peticiones de SSH a localhost:22 y las de HTTPS a localhost:443. Para que todo funcione bien debemos deberíamos configurar nuestro servidor web para que escuche en: 127.0.0.1:433 en lugar de *:443. Sigue leyendo

Artículos relacionados

  • No existen artículos relacionados

SSH y Proxy Socks navegación segura en Internet

Nota: Escribí un artículo sobre Tor que puede ser una solución más simple ya que no se necesita ningún servidor.

Ahora les enseñare como navegar la web de forma ilimitada en una red muy limitada. Por ejemplo la red de una universidad, donde los pobres alumnos casi no pueden navegar a ningún lado porque todo esta bloqueado. Además con esta estragegia nevagaremos de una forma seguro, muy útil para sitios con access points públicos.

Requerimientos

Para que esto funcione, así como la mayoría de los tips ssh que he estado publicando, es importante que ustedes tengan un servidor a donde hacer ssh. Si su proveedor de internet en la casa les da un ip público, se podría usar ese ip para ssh. Otra opción es contratar un servidor virtual dedicado en la nube que puede costar unos $20 al mes. Un poco caro para hacer ssh, pero el costo puede llegar a cero si vendemos hosting a nuestros a migos para que cuelguen sus páginas web. Personalmente uso el servicio de Linode desde hace algún tiempo y me siento feliz.

Se asume que la red local no esta bloqueando el puerto 22 de SSH. Pronto publicaré un how to para correr ssh y un servidor web en el puerto 443 (normalmente https) que podría solucionar este problema.

Manos a la Obra

Dicho esto manos a la obra. Lo primero que vamos a hacer es ssh a nuestro servidor y decirle que use un puerto arbitrario como servidor Socks.

ssh -ND 8080 usuario@servidorremoto.com Sigue leyendo

Artículos relacionados

  • No existen artículos relacionados

Aplicaciones Gráficas con SSH en Red

Este es uno de los trucos que aprendí primero con SSH. La mayoría de la gente que usa SSH lo hace porque puede administrar servidores a através de este poderoso servicio. Algo que muchos no saben es que se puede ejecutar aplicaciones gráficas a través de una red con ssh y esto es mucho más sencillo de lo que nos podríamos imaginar.
Un caso simple podría ser que estoy en una red pero estoy muy lejos de mi computadora. Tengo la necesidad de acceder a mi correo electrónico que le ejecuto con Thunderbird. El camando para lograr esto es tan simple como:

ssh -X usuario@ipservidor thunderbird

Ahora que tal si queremos ejecutar más de una aplicación gráfica. Podríamos utilizar una sola sesión de ssh para abrir varias aplicaciones.

ssh -X usuario@ipservidor
thunderbird &
oowriter &
gnome-calculator& Sigue leyendo

Artículos relacionados

  • No existen artículos relacionados

Túneles SSH (parte 2)

En el artículo anterior expliqué como usar un tunel ssh para acceder a un servicio remoto  que no es accesible en mi computador, pero sí es accesible desde un servidor al cual puedo ingresar. Ahora aprenderemos a hacer lo opuesto. Vamos a compartir servicios de mi red interna o mi computadora en otra red. Lo más probable es que sea el Internet. Al igual que el artículo anterior, vamos a explicar esta utilidad con ejemplos.

Ejemplo #1: Acceder con ssh a computador con ip privado

Vamos a suponer el siguiente caso práctico. Mi mamá es una usuaria de GNU/Linux y tiene algún problema en su computador. Ella tiene su computadora en la casa y no tiene ip pública ni la menor idea de lo que es un ip. Su hijo tiene algo de experiencia le puede ayudar. Para esto con mucha paciencia le va a decir” mami vaya a accesorios terminal y escribe lo siguiente:

ssh -R *:8080:localhost:22 usuarioremoto@servidorremoto.com

Mi mamá no tiene porque entender este comando, pero ustedes sí. El * quiere decir que vamos a ser accesibles desde cualquier ip que tenga mi servidor remoto. El 8080 es el puerto que utilizaremos en el servidor remoto y localhost:22 quiere decir que vamos a hacer accesible el puerto 22 de mi máquina local. La segunda parte del comando quiere decir a que servidor ingresamos y con que usuario.
En otras palabras mi mamá esta ingresando a mi servidor y publicando el puerto 22 de su computador en el puerto 8080. Obviamente sin tener la menor idea de lo que esta haciendo. Sigue leyendo

Artículos relacionados

  • No existen artículos relacionados

Túneles SSH (parte 1)

Durante mucho tiempo utilice GNU/Linux y ssh a diario, pero me tomo tiempo darme cuenta de la utilidad de los tuneles ssh. Es una herramienta super práctica que espero ilustrar su uso con este artículo. A mi cuando me explicaron no entendí para que me iba a servir, pero con unos ejemplos creo que es más fácil entender.

Básicamente un tunel ssh sirve para acceder a un servicio remoto a través de un canal ssh. Así utilizando ssh podríamos hacer cosas como acceder a un servidor smtp que suele estar bloqueado por proveedores de Internet. Se podría compartir un recurso de mi máquina local con ip privado al mundo a través de Internet. En fin se puede hacer muchísimo más que esto y ojalá por ahí comparta alguna otra experiencia interesante.

Redirigir un puerto remoto a mi red local

Para ilustrar esta idea voy poner allgunos ejemplos hipotéticos:

Ejemplo #1: Acceder a un pop3 bloqueado

Supongamos que usted tiene acceso a Internet y el proveedor de Internet tiene bloqueado el puerto 25. Necesita enviar un correo de urgencia, pero no lo puede hacer. Pues bien un tunel ssh es una solución rápida para solucionar este problema (siempre y cuando tenga un servidor donde pueda hacer ssh)

ssh -L 2525:localhost:25 usuario@servidorremoto.com

Sigue leyendo

Artículos relacionados

  • No existen artículos relacionados

Ssh con claves Públicas y Privadas

La razón por la que escribo este artículo, es porque acabo de resolver un problema que se tiene con el pasar del tiempo. Cada vez se tiene que administrar más servidores y uno debe recordar mayor números de claves. Si uno usa la misma clave para todos los servidores, entonces se tiene un riesgo de seguridad porque si se rompe la clave en uno, se rompe en todos. Este mini how to es útil también si se desea hacer tareas automatizadas y no quieren que se requiera el uso de contraseña para ssh (ej. sincronización con rsync).

La idea es la siguiente, vamos a crear una clave privada que funcionará como nuestra contraseña para ingresar a los servidores que necesitemos. En cada servidor copiaremos nuestra clave pública y podremos ingresar a ellos. Este sistema, bien utilizado es mucho más seguro que utilizar contraseñas.

Crear el par de claves públicas y privadas:

ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):

Damos enter, para que las llaves se guarden en ~/.ssh

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Aquí ponemos una contraseña para proteger nuestra clave privada. Así que cada vez que vayamos usar la clave privada nos pedirá esta clave. En caso de querer utilizar ssh sin clave, dejar vacío (solo recomendable para tareas automatizadas y teniendo en cuenta los riesgos.)

Your identification has been saved in /yo/.ssh/id_rsa.
Your public key has been saved in /yo/.ssh/id_rsa.pub.

Aquí nos dice el sistema donde ha guardado nuestra clave pública y privada. La cave privada la tenemos que cuidar. Si llega a malas manos podrían ingresar a nuestros servidores (sobre todo si no esta protegida con un passprhase), si la perdemos nosotros no podremos llegar a nuestros servidores. La clave pública la subimos a los servidores donde queremos ingresar.

Copiar clave pública a servidores:

scp ~/.ssh/id_rsa.pub usuario@servidorremoto.com:
ssh usuario@servidorremoto.com
cat id_rsa.pub >> .ssh/authorized_keys

Listo ahora podemos ingresar a servidor remoto utilizando la llave privada. Copiamos nuestra clave pública a todos los servidores que queremos hacer ssh.

Otra opción que yo no conocía, pero me la hizo notar Gerardo Barajas es usar el comando ssh-copy-id.

ssh-copy-id usuario@servidorremotocom

Artículos relacionados

  • No existen artículos relacionados