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

评论

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

#1 楼

$ rpcinfo -p | grep nfs
NFS服务器的端口111(TCP和UDP)和2049(TCP和UDP)。

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

评论


我不知道rpcinfo,这很有用。我没有看到带有grep nfs的端口111,但是我放弃了grep,以了解111是用于portmapper的。也很高兴知道! (就像您提到的,必要)

–肯尼
2012年4月5日在21:12

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

–卫斯理
2012年4月5日在21:17

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

–bonsaiviking
2012年4月5日在21:23

谢谢@bonsaiviking。此过程的关键信息。我支持您的回答!

–肯尼
2012年4月6日,0:25

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

–内森·克雷克(Nathan Craike)
2015年4月9日在0:41



#2 楼

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

除了上面的指南(其中包括防火墙部分)之外,请参阅我对另一个问题的回答关于硬化NFS。

评论


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

–user9517
2012年4月5日在21:31

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

– Maciej Piechotka
16 Dec 26 '16:46

对于已安装的端口,如果重新配置以确保已安装的端口是固定的,则使用寿命会轻松得多。在debian系统上,将RPCMOUNTDOPTS值编辑为RPCMOUNTDOPTS =“-port 34567”,然后使用sysctl --system和/etc/init.d/nfs-kernel-server restart重新启动

–user45793
19年1月17日19:53

#3 楼

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

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

说明:


设置用于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”)。

这就是全部。

评论


您无需重新启动整个框。在重新启动nfs-kernel-server之前,简单的sudo服务nfs-config重新启动就可以了。

–showp1984
17-2-27在23:29

@ showp1984谢谢,我下次再试

–阿米尔·乌瓦尔(Amir Uval)
17年2月28日在5:57

或者,如果您的系统使用systemctl,则是systemctl重新启动nfs-kernel-server.service。

–fbicknel
19-10-7在20:27

您也可以在一口膨胀中完成所有操作:sudo nfs允许从10.0.0.1/20到所有端口111,2049,33333的proto tcp,然后是(好的,两个膨胀式)sudo nfs允许从10.0.0.1/20的prod udp到任何端口111204933333。请注意,端口33333符合上述示例。您可以使用其他端口作为答案。

–fbicknel
19-10-7在20:30

@jchook在我看来像事实!

–fbicknel
20-4-25在17:14

#4 楼

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

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


#5 楼

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

服务器:

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


客户端:

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


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

#6 楼

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

我希望这可以帮助某人。

评论


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

– HBruijn
15年12月16日在10:48

坦白说,我不知道为什么我需要添加1048的权限,但是添加后就解决了我的问题。我只是想分享一下是否可以节省以后的时间。很抱歉无法回答该问题。

–埃德姆·卡亚(Erdem KAYA)
2015年12月20日在10:33

#7 楼

要将Synology挂载到Ubuntu 18.04系统,我必须启用端口111,892,2049

挂载时,这是我看到的(Synology上未启用NFS 4): >
root@ub18ovh# mount -a -vv
mount.nfs: trying text-based options 'vers=4.2,addr=5.6.7.8,clientaddr=1.2.3.4'
mount.nfs: mount(2): Protocol not supported
mount.nfs: trying text-based options 'vers=4.1,addr=5.6.7.8,clientaddr=1.2.3.4'
mount.nfs: mount(2): Protocol not supported
mount.nfs: trying text-based options 'vers=4.0,addr=5.6.7.8,clientaddr=1.2.3.4'
mount.nfs: mount(2): Protocol not supported
mount.nfs: trying text-based options 'addr=5.6.7.8'
mount.nfs: prog 100003, trying vers=3, prot=6
mount.nfs: trying 5.6.7.8 prog 100003 vers 3 prot TCP port 2049
mount.nfs: prog 100005, trying vers=3, prot=17
mount.nfs: trying 5.6.7.8 prog 100005 vers 3 prot UDP port 892
successfully mounted


#8 楼

如果您使用csf防火墙而nfs无法挂载,则很可能会错过nlockmgr使用的开放端口,请键入以下内容找到它们:
rpcinfo -p

接下来编辑/etc/sysctl.conf以将这些端口上的端口锁定(示例端口)并添加这两条线。然后重新启动端口映射nfs-server。
fs.nfs.nlm_udpport=38073 

fs.nfs.nlm_tcpport=38747