LinuxParty
Introducción: Network File System (NFS) es una solución común para compartir archivos en redes Unix y Linux, pero, en su configuración predeterminada, la transmisión de datos ocurre sin cifrado. Esto representa un riesgo de seguridad, especialmente en redes inseguras o abiertas. En este artículo, te mostraremos cómo mejorar la seguridad de tu NFS utilizando un túnel SSH para cifrar la transmisión de datos.
Tunelizar NFS sobre SSH proporciona una capa de seguridad que evita que los datos sean interceptados, asegurando que solo los dispositivos autorizados puedan acceder a la información. Aunque la configuración de un túnel SSH para NFS puede requerir unos pasos adicionales, vale la pena en términos de protección de datos, especialmente en redes no confiables.
Paso 1: Requisitos Previos
Para comenzar, asegúrate de contar con lo siguiente:
- Un servidor NFS correctamente configurado.
- Un cliente NFS con permisos para montar el recurso compartido.
- Acceso SSH al servidor NFS, con privilegios suficientes para crear túneles.
- SSH configurado y en ejecución tanto en el cliente como en el servidor.
Nota: Este procedimiento supone que tienes acceso y permisos para configurar y utilizar SSH en ambos sistemas.
Paso 2: Configurar el Servidor NFS
Configura el servidor NFS normalmente si no lo has hecho:
1. Instala NFS Server:
# [ Debian Ubuntu y similares ]
sudo apt-get install nfs-kernel-server
# [ RHEL, Fedora, AlmaLinux y similares ]
yum -y install nfs-utils libnfs-utils
2. Edita el archivo /etc/exports
para definir los directorios compartidos y las IPs o redes permitidas:
/ruta/del/directorio 192.168.1.0/24(rw,sync,no_subtree_check)
3. Aplica los cambios recargando NFS:
sudo exportfs -a
sudo systemctl restart nfs-kernel-server# El nombre del servicio puede variar, por nfs-server, etc. Pulsa [Tabulador], un par de veces y lo sabrás.
Paso 3: Crear un Túnel SSH en el Cliente
Ejecuta el siguiente comando en el cliente para establecer un túnel SSH entre el cliente y el servidor NFS. Reemplaza server_ip
por la IP o nombre de host del servidor.
ssh -f -N -T -L localhost:2049:localhost:2049 usuario@server_ip
-f
: Ejecuta SSH en segundo plano.-N
: No ejecuta comandos remotos.-T
: Desactiva la asignación de pseudo-terminal.-L
: Especifica el reenvío de puertos (2049 es el puerto NFS por defecto).
Nota: Puede que debas ajustar el puerto si el servidor utiliza un puerto NFS diferente.
Paso 4: Montar el Recurso Compartido usando el Túnel SSH
Ahora que el túnel está activo, monta el recurso NFS utilizando localhost
y el puerto 2049.
Crea un directorio donde montar el recurso:
sudo mkdir -p /mnt/nfs_secure
Monta el recurso con el siguiente comando:
sudo mount -t nfs -o port=2049,vers=3,proto=tcp localhost:/ruta/del/directorio /mnt/nfs_secure
Nota: Cambia vers=3
a vers=4
si estás utilizando NFSv4.
Este comando monta el recurso NFS a través del túnel SSH, asegurando la transmisión de datos entre el cliente y el servidor.
Paso 5: Automatizar el Túnel SSH con autossh
(Opcional)
Para mantener la conexión SSH en ejecución automáticamente, instala y configura autossh
, una herramienta que reinicia automáticamente el túnel si la conexión se interrumpe.
1. Instala autossh
:
# [ Debian Ubuntu y similares ]
sudo apt-get install autossh
# [ RHEL, Fedora, AlmaLinux y similares ]
sudo yum install autossh
Usa el siguiente comando para crear el túnel SSH con autossh
:
autossh -f -N -T -L localhost:2049:localhost:2049 usuario@server_ip
Ejemplo Práctico: Montar y Acceder a un Recurso Compartido de Forma Segura
Imagina que necesitas montar un directorio compartido en el servidor con IP 192.168.1.10
en el directorio /var/shared
. Una vez que has seguido los pasos anteriores, solo debes iniciar el túnel SSH en el cliente:
ssh -f -N -T -L localhost:2049:localhost:2049 Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.
Después, monta el recurso de forma segura:
sudo mount -t nfs -o port=2049,vers=4,proto=tcp localhost:/var/shared /mnt/nfs_secure
Ahora puedes acceder a los archivos compartidos a través del túnel cifrado.
EJEMPLOS ARCHIVOS DE CONFIGURACIÓN
Aquí tienes un ejemplo de cómo podría configurarse el archivo /etc/exports para un servidor NFS. Este archivo define los directorios compartidos y las configuraciones de acceso para los clientes.
# Formato general # /ruta/del/directorio cliente(opciones) # Ejemplo de configuración # Comparte el directorio /var/shared con todos los dispositivos en la red 192.168.1.0/24 /var/shared 192.168.1.0/24(rw,sync,no_subtree_check) # Comparte el directorio /home/user/documents con un cliente específico con IP 192.168.1.100 /home/user/documents 192.168.1.100(rw,sync,no_root_squash,no_subtree_check) # Comparte el directorio /media/data en modo solo lectura con una red completa /media/data 10.0.0.0/16(ro,sync,no_subtree_check) # Comparte el directorio /mnt/backup de forma segura (sin permisos de superusuario) # Esto previene que el cliente acceda con permisos de root al recurso compartido /mnt/backup 192.168.1.200(rw,async,root_squash,no_subtree_check) # Comparte el directorio /opt/nfs con múltiples IPs específicas /opt/nfs 192.168.1.101(rw,sync,no_subtree_check) 192.168.1.102(rw,sync,no_subtree_check)
Explicación de las Opciones
- rw: Permite lectura y escritura en el directorio compartido.
- ro: Permite solo lectura (ideal para recursos que no se deben modificar).
- sync: Asegura que todas las escrituras se realicen de forma sincrónica. Esto es más seguro pero puede reducir el rendimiento.
- async: Permite que las escrituras se realicen de forma asincrónica, mejorando el rendimiento pero con un ligero riesgo de pérdida de datos en caso de falla.
- no_root_squash: Permite que el usuario root en el cliente tenga permisos de root en el recurso compartido. (Úsalo con precaución).
- root_squash: Impide que el usuario root en el cliente acceda como root en el servidor; sus permisos se reducirán a los de un usuario anónimo.
- no_subtree_check: Omite la verificación de subdirectorios, lo cual es útil para mejorar el rendimiento cuando se comparte un subdirectorio específico de un sistema de archivos.
Nota: Después de editar el archivo /etc/exports, ejecuta el siguiente comando para aplicar los cambios:
sudo exportfs -a
Esta configuración te permite definir diferentes niveles de acceso para cada recurso compartido y ajustar la seguridad según las necesidades de tu red.
ACCEDER DESDE WINDOWS. ( En una Red Local, es mejor usar SAMBA, Ej. [ 1 ], [ 2 ] y [ 3 ] )
Para acceder a los recursos compartidos por NFS en un servidor Linux desde un equipo con Windows, el sistema operativo de Windows debe tener habilitado el cliente NFS. Esta característica está disponible en las ediciones Pro, Enterprise y Education de Windows y debe activarse antes de su uso. Aquí te explico cómo configurarlo:
Paso 1: Habilitar el Cliente NFS en Windows
- Abre el Panel de control en Windows y dirígete a Programas > Activar o desactivar las características de Windows.
- Busca y selecciona Cliente para NFS y haz clic en Aceptar. Esto instalará el cliente NFS en tu equipo.
Nota: En algunas versiones de Windows, esta opción puede no estar disponible, y necesitarías una versión Pro o superior para acceder a ella.
Paso 2: Montar el Recurso NFS en Windows
Una vez habilitado el cliente NFS, puedes montar el recurso compartido de la siguiente manera:
Abre PowerShell o el Símbolo del sistema en Windows.
Utiliza el siguiente comando para montar el recurso NFS. Sustituye server_ip
con la IP del servidor NFS y /ruta/del/directorio
con el recurso compartido que deseas montar:
mount -o anon \\server_ip\ruta\del\directorio Z:
anon
: Usa este parámetro si el servidor NFS no tiene configuradas autenticaciones específicas (acceso anónimo).Z:
: Es la letra de unidad que asignas en tu sistema Windows para el recurso compartido (puede ser cualquier letra libre).
Ejemplo:
mount -o anon \\192.168.1.10\var\shared Z:
Ahora, deberías poder ver el recurso NFS montado como una unidad de red en el Explorador de archivos de Windows.
Paso 3: Configurar Permisos y Opciones (Opcional)
Si necesitas opciones específicas para el montaje (por ejemplo, si el servidor tiene restricciones de usuario o autenticación), utiliza el comando mount
con parámetros adicionales. Algunos ejemplos de opciones comunes:
mount -o mtype=hard,rsize=8192,wsize=8192 \\server_ip\ruta\del\directorio Z:
- Establece el tipo de conexión como “hard” para mejorar la estabilidad en conexiones inestables y ajusta los tamaños de lectura y escritura.
Nota: Si deseas que el recurso NFS se monte automáticamente al iniciar Windows, puedes agregar este comando en un script de inicio o configurar una tarea programada que lo ejecute al inicio del sistema.
Paso 4: Desmontar el Recurso NFS
Cuando termines de usar el recurso, puedes desmontarlo usando el siguiente comando en PowerShell o el símbolo del sistema:
umount Z:
Este comando libera la unidad Z:
y cierra la conexión al recurso NFS.
-
Seguridad
- Conexión Segura NFS en Linux, Tunelizar NFS sobre SSH y Configuración de NFS sobre SSH para Mayor Seguridad
- Cómo limitar las conexiones SSH (puerto TCP 22) con ufw en Ubuntu Linux
- Utilizar ssh sin contraseña con ssh-keygen y ssh-copy-id
- Millones de teléfonos móviles podrían ser vulnerables a la vigilancia del gobierno chino
- Cómo limitar las conexiones SSH a la red local en Linux
- Los televisores inteligentes son como un «caballo de Troya digital» en los hogares
- Snort para Windows, detección de Intrusos y seguridad.
- Detección de Intrusiones con las herramientas: BASE y Snort.
- El Sistema de Detección de Intrusos: Snort. ( Windows y Linux )
- Configuración con Ejemplos de Snort para Windows, detección de intrusiones
- ¿El gobierno de EE. UU. ignoró la oportunidad de hacer que TikTok fuera más seguro?
- ¿Qué es SSH y cómo se utiliza? Los conceptos básicos de Secure Shell que necesitas saber
- Asegurar memcached del servidor, para evitar amplificar ataques DDoS
- Consejos de Seguridad para Pagos Móviles en España: Protege tus Transacciones con Estos Consejos Prácticos
- 22 herramientas de seguridad de servidores Linux de código abierto en 2023