Si tenemos algunos servidores conectados a internet es posible que nos interese compartir entre ellos algunos archivos mediante NFS. El problema viene que al crear el servidor conectado directamente a internet cualquiera puede consultar los directorios compartidos.
Esto es lo que se conoce como enumeración NFS y no hay solución vinculada al protocolo.
La solución que propongo consiste en tener en cada servidor dos interfaces de red, una de ellas la configuraremos como privada, la otra quedará expuesta a internet. Ahora cuando algún usuario no autorizado escanee nuestros puertos verá algo así:
# nmap -sS servidor.com Starting Nmap 5.21 ( http://nmap.org ) at 2011-07-25 20:35 CEST Nmap scan report for servidor.com (xxx.xxx.xxx.xxx) Host is up (0.060s latency). Not shown: 990 closed ports PORT STATE SERVICE *** 2049/tcp open nfs *** Nmap done: 1 IP address (1 host up) scanned in 5.92 seconds
Mostrando el servidor NFS corriendo y abierto. Así podría crear una enumeración como la que sigue
# showmount --all servidor.com All mount points on servidor.com: 192.168.8.2:/path/to/share 192.168.8.3:/path/to/share 192.168.8.4:/path/to/share 192.168.8.5:/path/to/share 192.168.8.6:/path/to/share ...
En el listado vemos las distintas máquinas que están conectadas al servidor y el directorio que tienen montado.
Para resolver esto usaremos los ficheros /etc/hosts.allow y /etc/hosts.deny para evitar conexiones sólo desde máquinas de confianza.
El contenido de /etc/hosts.allow sería:
portmap: 192.168.8.0/24 nfsd: 192.168.8.0/24
y para el caso de /etc/hosts.deny
nfsd: ALL portmap:ALL
El software de NMap seguiré mostrando el puerto abierto, pero ahora cuando intenten obtener un listado de lo compartido por NFS obtendrán esto:
# showmount --all servidor.com clnt_create: RPC: Program not registered
Desde la red privada podremos seguir consultando las comparticiones con showmount, las opciones que le podemos pasar al comando son:
-a or --all List both the client hostname or IP address and mounted directory in host:dir format. This info should not be considered reliable. See the notes on rmtab in rpc.mountd(8). -d or --directories List only the directories mounted by some client. -e or --exports Show the NFS server's export list.