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

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

rpcinfo -p | grep nfs

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

还有群集和客户端状态的端口(前者为1110 TCP,后者为1110 UDP)以及NFS锁pipe理器(端口4045 TCP和UDP)的端口。 只有您可以确定哪些端口需要允许,具体取决于需要哪些服务跨网关。

除了portmapper的端口号为111以及nfs的端口号为2049之外,您还需要允许mountd端口以及可能的rquotad,lockd和statd,所有这些都可以是dynamic的。 这个优秀的NFS安全指南build议更改您的启动脚本和内核模块configuration,强制他们使用静态端口。

除了上面的指南,其中有关于防火墙的一节 ,请参阅我对有关强化NFS的另一个问题的回答 。

使用FERM,可以使用反引号从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部分)。

我在这个页面上发现了我的问题的有用的方向,但是不容易遵循配方。 所以这是我的食谱

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 

并testing它是否有助于使用:

 rpcinfo -p | grep tcp.*mountd 

对我来说这是不够的,但完全重新启动解决了这个问题。

( 信贷 )


设置防火墙

(1)删除旧规则,手动执行或重置,如果这是防火墙的唯一用途:

 sudo ufw reset sudo ufw enable 

(2)添加nfs&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 

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

这就是它的全部。

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

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

对于logging,我必须为端口111,2049 1048添加权限,以便在Windows 2008 R2服务器中导出NFS共享并且客户端是Ubuntu 12.04.4。

我希望这可以帮助别人。