viernes, 28 de septiembre de 2018

Resumiendo ... cómo bastionamos NFS


Resumiendo la entrada sobre NFS, se pasa a describir los pasos para bastionar un servicio NFS instalado:

1.- Instalar la versión 4 de NFS con un sistema de autenticación basado en Active Directory, ya que se ganaría la autenticación por usuario. Si no fuera así, se sigue recomendando el uso de la versión 4 de NFS, aunque el bastionado de la versión implicaría la NO autenticación por usuario.

2.- Incluir en el archivo: /etc/exports, los directorios que se van a compartir, así como los hosts que van a tener permiso para acceder a dichos directorios y los permisos que tendrán estos son el directorio compartido.

La estructura de la línea sería la siguiente:

directorio equipo1(opcion11,...) equipo2(opcion21,...)

Donde:

·               directorio: es el nombre del directorio que se comparte
·               equipo<1...n>: es la dirección IP o nombre DNS del hosts que tendrá acceso al recurso compartido

NOTA: 
Se permite el uso de los comodines: "*" y "?", aunque no se recomienda su uso

·               opcion <11 ... nn>: son las diferentes permisos de acceso que se tendrán por parte del hosts en el directorio compartido.

De las opciones más significativas que se pueden ver en la entrada NFS , las más adecuadas para bastionar nuestro servicio NFS es:

A.      ([ro | rw], root_squash,anonuid=<digito del usuario>,anongid=<digito del grupo del usuario>)

Está opción implica crear un usuario y su grupo dentro del sistema/s que contenga/n el/los directorio/s a los que el usuario pueda acceder, y vincularlo con la IP o nombre DNS de la máquina desde donde se puede realizar la conexión.

B.      ([ro | rw], root_squash)

Está opción implica crear un usuario dentro del sistema/s que contenga/n el/los directorio/s a los que el usuario pueda acceder y vincularlo con la IP o nombre DNS de la máquina desde donde se puede realizar la conexión. El usuario a crear debe tener el mismo nombre de usuario con el que se trabaja desde la máquina desde donde se realiza la conexión.
Si el usuario con el que se conecta el cliente no existe en el servidor, dicho usuario trabajará con los permisos del usuario “nobody”.

Ejemplo:
/home                     vale(rw,root_squash) vstout(rw,root_squash)
/usr/X11R6              vale(ro,root_squash) vstout(ro,root_squash)
/home/ftp                (ro,root_squash)

3.- Administrar los permisos de cada uno de los usuarios dentro de los directorios que se van a compartir.

IMPORTANTE:
Esto implica una gran carga de administración debido a la creación de los usuarios y la configuración de los permisos en la estructura del servidor. Eso sí, esta administración no permite tener un pseudo-control  basado en usuarios.

4.- Incluir dentro del archivo: /etc/hosts.deny, la sentencia:

portmap: ALL
nfs: ALL

NOTAS:
Con la primera línea se denegará el acceso al puerto 111/TCP (Portmap) a toda máquina.
Con la segunda línea se denegará el acceso al puerto 2049/TCP (NFS) a toda máquina.

5.- Incluir dentro del archivo: /etc/hosts.allow, la sentencia:



Portmap: host [o red/mascara_subred], host [o red/mascara_subred]
NFS: host [o red/mascara_subred], host [o red/mascara_subred]

Ejemplo:
portmap:192.168.0.0/255.255.255.0,10.20.30.40
nfs:192.168.0.0/255.255.255.0  

NOTAS:
Con la primera línea se permitirá el acceso al puerto 111/TCP (Portmap) a toda máquina declarada.
Con la segunda línea se permitira el acceso al puerto 2049/TCP (NFS) a toda máquina declarada.


Estos dos últimos puntos pueden ser sustituidos/complementados con el uso de un firewall de equipo, como pueda ser IPTABLES.

6.- Como las comunicaciones a través de NFS se realizan en texto claro, se procedería a bastionar las comunicaciones tunelizando a través del protocolo SSH, mediante la característica del “port forwarding”

Para lo cual será necesario tener algún programa que nos permita utilizar dicho protocolo, como por ejemplo, OpenSSH.

RECOMENDACIÓN:
Lectura del apartado 6.4, de la URL: http://nfs.sourceforge.net/nfs-howto/ar01s06.html