lunes, 11 de noviembre de 2019

Montar carpeta NFS por Tunel SSH

Tengo montados dos servicios en una máquina (servidor), SSH y NFS. Y mi objetivo es que la comunicación entre un ordenador cliente, que va a montar una carpeta, y el servidor esté cifrada.





Para instalarlos:
sudo apt-get install openssh-server
sudo apt-get install nfs-kernel-server

Comprobamos que está activo con el comando:
systemctl status nfs-server

Para compartir una carpeta por NFS hay que editar el fichero exports:
sudo nano /etc/exports


la línea añadida es:
/home/pedro/Descargas 192.168.0.10(insecure,rw,sync,no_subtree_check)

Nota: Estas opciones sólo son para que el túnel funcione sin problemas, para más información NFS

La IP del servidor es 192.168.0.135 y la del cliente es la 192.168.0.10, así sólo el cliente con la IP indicada(192.168.0.10) puede montar esa carpeta.

Para que los cambios en el archivo se puedan aplicar hay que guardar el archivo y ejecutar el comando:
sudo exportfs -a

Desde el ordenador cliente me conecto por SSH sin problema y también monto directorios del servidor en el cliente por NFS.
Los servicios funcionarían bien, con comandos como estos:

ssh pedro@192.168.0.135
mount -t nfs 192.168.0.135:/home/pedro/Descargas /carpeta_local_montaje

Ahora quiero encapsular el tráfico NFS por un túnel SSH. De esta manera todo el tráfico NFS estará cifrado.
Nota: ¿Para qué sirve un tunel SSH?

Creo el túnel SSH:

ssh -fNv -L 20001:192.168.0.135:2049 pedro@192.168.0.135

Le estamos diciendo que establezca un túnel entre el puerto local 20001 y el puerto 2049 (el que usa NFS) del servidor. Para entender mejor el comando: explicación del comando

El comando deja la terminal abierta en modo debug para ver las conexiones que se hacen


(ojo con pulsar intro que se cierra el modo debug)
Ahora hay que abrir otro terminal para montar la carpeta NFS por el túnel SSH:

sudo mount -t nfs -o port=20001,proto=tcp localhost:/home/pedro/Descargas /home/pedro/share/

Nota: sin el proto=tcp da un error de protocolo. Y además no figura la IP del servidor sino localhost porque está información va por el túnel y este ya comunica con el servidor.

Ahora está montada la carpeta del servidor en local


Que es la misma que la del servidor


Pues ya está, todo el tráfico por NFS entre el cliente y el servidor está cifrado gracias al túnel.

Para poneros en contacto conmigo @mosqueteroweb