¿Qué puertos necesito abrir en el firewall para usar NFS?

73

Estoy ejecutando Ubuntu 11.10, configurando NFS para compartir un directorio entre muchos otros servidores. ¿Qué puertos deben abrirse en el firewall?

kenny
fuente
66
Depende de la versión del protocolo que intente utilizar. NFS 4 solo requiere 2049, mientras que las versiones anteriores requieren más.
lzap

Respuestas:

97
$ rpcinfo -p | grep nfs

Puerto 111 (TCP y UDP) y 2049 (TCP y UDP) para el servidor NFS.

También hay puertos para el clúster y el estado del cliente (Puerto 1110 TCP para el primero y 1110 UDP para el último), así como un puerto para el administrador de bloqueo NFS (Puerto 4045 TCP y UDP). Solo usted puede determinar qué puertos debe permitir en función de los servicios que se necesitan entre puertas de enlace.

Wesley
fuente
44
No sabía sobre rpcinfo, eso es bastante útil. No vi el puerto 111 con el grep nfs, pero dejé el grep para saber que 111 es para portmapper. También es bueno saberlo! (y como mencionaste, necesario)
kenny
@KennyYounger rpcinfo también es útil. Si esto respondió a su pregunta, no olvide marcarlo como la respuesta para el beneficio de los futuros espectadores.
Wesley
66
Necesita mountd open cuando monte por primera vez el sistema de archivos. Se ejecuta en un puerto dinámico, por lo que no siempre será lo mismo. Puse un enlace a una guía en mi respuesta.
bonsaiviking
1
Gracias @bonsaiviking. Información crítica para este proceso. ¡Voté tu respuesta!
Kenny
¿Podría dar una breve descripción de lo que hacen esos servicios ("clúster y estado del cliente", "administrador de bloqueos NFS") y cuándo podrían ser necesarios? Si esos servicios están bloqueados por un cortafuegos, ¿los servidores y clientes NFS se degradarán con gracia o solo se bloquearán esperando una respuesta?
Nathan Craike
27

Además de 111 para portmapper y 2049 para nfs, deberá permitir el puerto mountd y posiblemente rquotad, lockd y statd, todo lo cual puede ser dinámico. Esta excelente guía de seguridad NFS recomienda cambiar los scripts de inicio y las configuraciones del módulo del kernel para obligarlos a usar puertos estáticos.

Además de la guía anterior, que tiene una sección sobre firewalls , vea mi respuesta a otra pregunta sobre cómo fortalecer NFS.

bonsaiviking
fuente
77
Realmente preferimos el contenido, no los punteros al contenido. Un resumen del contenido con un enlace también está bien y se prefiere a un enlace.
user9517 es compatible con GoFundMonica el
2
No estoy seguro sobre 2012, pero la recomendación en los enlaces parece estar muy desactualizada. Se prefiere NFS sobre TCP por varias razones y NFS sobre UDP puede causar corrupción de datos silenciosa en el enlace rápido debido a limitaciones de protocolo. La guía de seguridad no menciona a Kerberos / GSS, etc.
Maciej Piechotka
Con respecto a mountd, la vida es mucho más fácil si reconfigura para asegurarse de que el puerto de mountd sea fijo. En sistemas debian, edite el valor RPCMOUNTDOPTS en algo así RPCMOUNTDOPTS="--port 34567"y luego reinicie con sysctl --systemy/etc/init.d/nfs-kernel-server restart
user45793
14

Encontré instrucciones útiles para mi problema en esta página, pero no había una receta fácil de seguir. Así que aquí está mi receta.

TL; DR: debe permitir los puertos nfs (111, 2049) y el puerto mountd después de arreglarlo.

Instrucciones:


Configurar un puerto fijo para mountd

gksudo gedit /etc/default/nfs-kernel-server
  • comentar esta línea: RPCMOUNTDOPTS=--manage-gids
  • agregue esto en su lugar: RPCMOUNTDOPTS="--port 33333"

O cualquier otro número de puerto.

ahora intenta restablecer nfs usando:

sudo service nfs-kernel-server restart

Y pruebe si ayudó a usar:

rpcinfo -p | grep "tcp.*mountd"

Para mí no fue suficiente, pero un reinicio completo solucionó el problema.

( crédito )


Configurar el cortafuegos

(1) elimine las reglas antiguas, hágalo manualmente o restablezca si este es el único uso para el firewall:

sudo ufw reset
sudo ufw enable

(2) agregue puertos nfs y mountd

sudo ufw allow in from 10.0.0.1/20 to any port 111 
sudo ufw allow in from 10.0.0.1/20 to any port 2049
sudo ufw allow in from 10.0.0.1/20 to any port 33333

(Cambie a sus IP locales o a " any" en lugar de 10.0.0.1/20)

Eso es todo lo que hay que hacer.

Amir Uval
fuente
3
No necesita reiniciar todo el cuadro. Un simple sudo service nfs-config restartantes de reiniciar nfs-kernel-serverlo hará bien.
showp1984
@ showp1984 gracias, lo intentaré la próxima vez
Amir Uval
O si su sistema usa systemctl, es systemctl restart nfs-kernel-server.service.
fbicknel
También puede hacerlo todo de una sola vez: sudo nfs allow proto tcp from 10.0.0.1/20 to any port 111,2049,33333seguido de (ok, dos vueltas) sudo nfs allow proto udp from 10.0.0.1/20 to any port 111,2049,33333. Tenga en cuenta que el puerto 33333 es según el ejemplo anterior. Puede usar otro puerto como indica la respuesta.
fbicknel
5

Esto le dará una lista de todos los puertos utilizados por todos los programas relacionados con NFS:

rpcinfo -p | awk '{print $3" "$4}' | sort -k2n | uniq
charlesnadeau
fuente
3

Con FERM uno puede usar Backticks para obtener los puertos de rpcinfo, por ejemplo:

Servidor:

proto tcp {saddr ($CLIENT) {
  dport (`rpcinfo -p | perl -e 'while(<>){/\s+\d+\s+\d\s+(?:tcp)\s+(\d+)/ and $ports{$1}=1}; $, = " "; print sort(keys(%ports)),"\n"'`) ACCEPT; # NFS
}}
proto udp {saddr ($CLIENT) {
  dport (`rpcinfo -p | perl -e 'while(<>){/\s+\d+\s+\d\s+(?:udp)\s+(\d+)/ and $ports{$1}=1}; $, = " "; print sort(keys(%ports)),"\n"'`) ACCEPT; # NFS
}}

Cliente:

proto udp {saddr ($SERVER) {ACCEPT;}}  # NFS

(Si solo va a usar el TCP, entonces solo necesita la proto tcpparte).

Artem
fuente
1

Para los registros, tuve que agregar permisos para los puertos 111, 2049 y 1048 para una configuración en la que un servidor Windows 2008 R2 exporta un recurso compartido NFS y los clientes son Ubuntu 12.04.4.

Espero que esto ayude a alguien.

Erdem KAYA
fuente
2
Puede ser útil explicar por qué necesitaba el puerto 1048 y cómo lo determinó.
HBruijn
3
Francamente, no tengo idea de por qué necesitaba agregar un permiso para 1048, pero agregar eso resolvió mi problema. Solo quería compartir si eso puede ahorrarle tiempo a alguien más en el futuro. Lamento no poder responder la pregunta.
Erdem KAYA