Tuneles SSH permanentes

En el siguiente post explicamos como crear túneles SSH fijos, sin tener que ejecutar una y otra vez el comando ssh -L. Para más información sobre túneles podemos ver el post ( SSH y VNC tunelizar conexiones).

La configuración se realizará en ~/.ssh/config para que sólo se aplique al usuario actual o bien en /etc/ssh/sshd_config si queremos que dicho túnel sea compartido por todos los usuarios de nuestra maquina.

Al igual que hicimo sen el post original queremos conectar nuestra maquina-cliente a un servidor VNC (servidorremoto), y para ello queremos hacerlo a través de SSH (ssh port forwarding). En lugar de crear el túnel usando la sentencia:
ssh -L 65535:localhost:5900 dieguz2@servidorremoto

Crearemos un tunel fijo editanto el archivo ~/.ssh/config (el túnel sólo estará disponible para nuestro usuario). Añadiendo la linea:
LocalForward 65535 dieguz@servidorremoto:5901

Reiniciamos el servidor ssh, para que los cambios sean efectivos:
sudo rcsshd restart

Y deberiamos ver como nuestra máquina escucha el puerto 65535
netstat -atupn | grep 65535

Para conectar con la maquina VNC:
vncviewer localhost::65535

Fuente:
http://en.opensuse.org/SDB:OpenSSH_tunnels

SSH y VNC : tunelizar conexiones

Vamos a usar tuneles SSH para conectar a un servidor VNC remoto.


Presupongo que ya hay un servidor SSH y un servidor VNC en el servidor. El nombre de esta maquina es "servidorremoto", con ip 192.168.1.2 (una máquina en nuestra misma lan)

En el Servidor:
1) Nos aseguramos que en el archivo /etc/ssh/sshd_config tenemos la opción
X11Forwarding yes
2) Suponemos que el servidor VNC está escuchando la pantalla :1, que suele ser 5901 .Para arrancarlo
vncserver :1

3) Suponemos que tenemos ejecutandose el servidor ssh en el servidor:
/etc/init.d/sshd start


En el cliente:

1) Creamos un tunel local Ejecutamos el comando:
ssh -L puertolocal:localhost:puertoremoto
servidorvnc. En nuestro caso podríamos hacer lo siguiente:
ssh -L 65535:localhost:5901 dieguz2@servidorremoto
El primer puerto 65535 es puerto local (en nuestra maquina cliente), el 5901 es el puerto remoto, el del servidor al que nos queremos conectar. Hemos especificado a continuación el usuario (si lo necesitamos) y el servidor (nombre o dirección ip)

Con este comando estamos creando un túnel en nuestra máquina local, de modo que cualquier programa que se conectará a nuestro puerto local 65535 es tunelizado al puerto ssh (el puerto 22) del servidor remoto, el servidor ssh en el remoto mandara la entrada al puerto 5901.

2) Conectar con el cliente VNC. Usamos el comando:
vncviewer localhost::65535
Es decir nos conectamos a nosotros mismos (localhost). Pero como como hemos hecho un túnel en el paso anterior lo que mandemos al puerto local 65535 de nuestra máquina local se estará mandando al puerto 5901 del servidor con el vnc

Esta técnica de tunelización se puede aplicar a otros muchos puertos: ftp, smtp, pop3, http .... En todos los casos usamos un puerto local para conectarnos al puerto de un servidor remoto.

SEGURIDAD

Deberíamos definir reglas en el cortafuegos para lo siguiente:

a) En el cliente no permitir conexiones al puerto 65535 que no sean locales. Cerrar puerto 65535 en el cliente
b) Abrir el puerto 22 en el servidor para permitir conexiones SSH. Abrir el 22 en el servidor
c) En el servidor asegurarnos que el puerto 5901 esta CERRADO para conexiones externas. Dado que las conexiones se hacen a través del puerto 22 en el servidor, y el acceso al puerto 5901 es local (del servidor al servidor) debemos . Cerrar el 5901 en el cortafuegos:

Eliminar directorios .svn de forma recursiva

Para eliminar recursivamente los directorios .svn en Linux, podemos usar este comando:
rm -rf `find . -type d -name .svn`
De este modo no se dectectaran como directorio tipo SVN