我需要在防火墙中打开哪些端口才能使用NFS?


73

我正在运行Ubuntu 11.10-设置NFS以在许多其他服务器之间共享目录。需要在防火墙上打开哪些端口?


6
这取决于您打算使用的协议版本。NFS 4只需要2049,而旧版本则需要更多。
lzap

Answers:


97
$ rpcinfo -p | grep nfs

NFS服务器的端口111(TCP和UDP)和2049(TCP和UDP)。

还有用于集群和客户端状态的端口(前者为端口1110 TCP,后者为1110 UDP)以及NFS锁定管理器的端口(端口4045 TCP和UDP)。只有您可以根据跨网关需要的服务来确定需要允许的端口。


4
我不知道rpcinfo,这很有用。我没有看到端口111带有grep nfs,但是我放弃了grep来了解111是用于的portmapper。也很高兴知道!(和您提到的一样,必要)
肯尼(Kenny

@KennyYounger rpcinfo也是有用的。如果这回答了您的问题,请不要忘记将其标记为答案,以使将来的观众受益。
韦斯利2012年

6
首次挂载文件系统时,需要mountd open。它在动态端口上运行,因此不会总是相同的。我在回答中加入了指南的链接。
bonsaiviking 2012年

1
谢谢@bonsaiviking。此过程的关键信息。我支持您的回答!
肯尼,2012年

您能否简要描述这些服务(“群集和客户端状态”,“ NFS锁定管理器”)的功能以及何时需要它们?如果这些服务被防火墙阻止,NFS服务器和客户端是否会正常降级,还是仅锁定等待响应?
内森·克雷克

27

除了用于portmapper的111和用于nfs的2049外,您还需要允许安装的端口以及可能的rquotad,lockd和statd,它们都是动态的。这份出色的NFS安全指南建议您更改启动脚本和内核模块配置,以强制它们使用静态端口。

除了上面的指南(其中包含有关防火墙的部分)之外,请参阅对有关加固NFS的另一个问题的回答


7
我们确实确实更喜欢内容,而不是内容的指针。带有链接的内容的原则也是可以的,并且优先于链接。
user9517'4

2
不确定2012年,但链接中的建议似乎已过时。由于各种原因,首选使用基于TCP的NFS,并且由于协议限制,基于UDP的NFS可能会导致快速链接上的静默数据损坏。安全指南中未提及的Kerberos / GSS等
马切伊Piechotka

对于已安装的端口,如果您重新配置以确保已安装的端口是固定的,则生活会容易得多。在Debian系统上,编辑RPCMOUNTDOPTS值类似RPCMOUNTDOPTS="--port 34567",然后用重新启动sysctl --system/etc/init.d/nfs-kernel-server restart
user45793

14

我在此页面上找到了解决问题的有用指导,但没有容易遵循的方法。这是我的食谱。

TL; DR-修复后需要同时允许nfs端口(111、2049)和mountd端口。

说明:


设置用于mountd的固定端口

gksudo gedit /etc/default/nfs-kernel-server
  • 注释掉这一行: RPCMOUNTDOPTS=--manage-gids
  • 改为添加以下内容: RPCMOUNTDOPTS="--port 33333"

或任何其他端口号。

现在尝试使用以下方法重置nfs:

sudo service nfs-kernel-server restart

并测试它是否有助于使用:

rpcinfo -p | grep "tcp.*mountd"

对我来说这还不够,但是完全重启可以解决此问题。

信用


设置防火墙

(1)删除旧规则,手动执行此操作;如果这是防火墙的唯一用法,则将其重置:

sudo ufw reset
sudo ufw enable

(2)添加NFS和挂载端口

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

(更改为您的本地IP或更改为“ any”,而不是10.0.0.1/20

这就是全部。


3
您无需重新启动整个框。一个简单的sudo service nfs-config restart重新启动nfs-kernel-server就可以了。
showp1984

@ showp1984谢谢,我下次再试试
Amir Uval

或者,如果您的系统使用systemctl,则为systemctl restart nfs-kernel-server.service
fbicknel

您也可以一口气做所有事情:sudo nfs allow proto tcp from 10.0.0.1/20 to any port 111,2049,33333接着是(好的,两口气做饭)sudo nfs allow proto udp from 10.0.0.1/20 to any port 111,2049,33333。注意,端口33333符合上述示例。您可以使用其他端口作为答案。
fbicknel

5

这将提供所有与NFS相关的程序使用的所有端口的列表:

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

3

使用FERM,可以使用Backticks从rpcinfo获取端口,例如:

服务器:

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
}}

客户:

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

(如果只打算使用TCP,则只需要proto tcp一部分)。


1

为了进行记录,我必须为Windows 2008 R2服务器导出NFS共享且客户端为Ubuntu 12.04.4的配置添加端口111、2049 1048的权限。

我希望这可以帮助别人。


2
这可能有助于解释为什么需要端口1048以及如何确定端口1048。
HBruijn

3
坦白说,我不知道为什么我需要添加1048的权限,但是添加后就解决了我的问题。我只是想分享一下,是否可以节省其他人的时间。很抱歉无法回答该问题。
Erdem KAYA 2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.