NFS支持在iptables(或其他防火墙)

如何使用带DROP策略的iptables启用NFS安装/共享?

NFS使用dynamic分配的端口,因此很难与防火墙配合使用。 我有一个NFS服务器和一些客户端。 我只想在NFS所需的端口上接受通信。 我已经configurationNFS服务器使用静态端口(4000-4004)。

但问题是,客户端仍然select一个随机的端口 – 因为它是UDP我只能让它工作,如果我接受来自服务器的所有UDP通信。

我发现了一些描述设置/ sysvariables的文档,这会限制客户端使用NFS的一个静态端口范围,但是,我似乎无法使其工作。 提到的/ sysvariables是:

/sys/module/sunrpc/parameters/max_resvport /sys/module/sunrpc/parameters/min_resvport /sys/module/lockd/parameters/nlm_tcpport /sys/module/lockd/parameters/nlm_udpport /sys/module/nfs/parameters/callback_tcpport 

我一直无法做到这一点。 也许我正在接近这个错误的方式? 对于我认为是一件简单的事情来说,这看起来不必要的复杂。

我在Debian和Ubuntu上使用NFS。

客户端端口是短暂的事实不是一个问题,但正如你所说的服务器端口的可变性是。

假设您已经成功地指示服务器仅将端口4000-4004用于nfsd,则存在三个问题:客户端必须能够与服务器上的RPC端口映射器,安装后台驻留程序和NFS服务对话。

对于NFS服务

假设你修改了NFS服务来监听4000-4004,客户端应该添加

 iptables -A INPUT -d se.rv.er.ip -p udp --dport 4000:4004 -j ACCEPT iptables -A OUTPUT -s se.rv.er.ip -p udp --sport 4000:4004 -j ACCEPT 

而服务器应该添加

 iptables -A INPUT -p udp --dport 4000:4004 -j ACCEPT iptables -A OUTPUT -p udp --sport 4000:4004 -j ACCEPT 

如果你想允许通过TCP的NFS,用-p tcp而不是-p udp来重复这些规则。

对于portmapper

客户应该添加

 iptables -A INPUT -d se.rv.er.ip -p udp --dport 111 -j ACCEPT iptables -A OUTPUT -s se.rv.er.ip -p udp --sport 111 -j ACCEPT 

而服务器应该添加

 iptables -A INPUT -p udp --dport 111 -j ACCEPT iptables -A OUTPUT -p udp --sport 111 -j ACCEPT 

您可能还需要为-p tcp添加一些规则,因为portmapper通常也支持TCP。 检查您的拒绝日志,看看是什么是DROP和相应调整。

对于挂载守护进程

你需要找出它在服务器上运行的端口, server% rpcinfo -p | grep mount server% rpcinfo -p | grep mount ; 在我的服务器上是UDP / 32775和TCP / 32769。 为了让这些,客户应该添加

 iptables -A INPUT -d se.rv.er.ip -p udp --dport 32775 -j ACCEPT iptables -A OUTPUT -s se.rv.er.ip -p udp --sport 32775 -j ACCEPT 

而服务器应该添加

 iptables -A INPUT -p udp --dport 32775 -j ACCEPT iptables -A OUTPUT -p udp --sport 32775 -j ACCEPT 

和两个类似的对与-p tcp --[ds]port 32769

您有责任将这些线路放在INPUTOUTPUT链的正确位置。 一开始可能是一个好主意。

编辑 :根据你的回答,我已经更新了上面的规则。

我发现这个页面显示了如何打开NFS端口的几个iptables规则。

此外, 此页面build议您在使用命令(NFS v4)装入NFS共享时可以select协议/端口:

 # mount -t nfs4 -o proto=tcp,port=2049 nfs-server:/data /mnt/data 

还有几个网页正在谈论开放这三个港口: 32771,111和2049

你可以尝试一下,如果它不适合你,你可以尝试打开你的客户端IP上的所有UDP端口,只要你信任它们,看看它是否能工作。