将 NFS 客户端限制为特定 IP 地址会阻止所有地址

将 NFS 客户端限制为特定 IP 地址会阻止所有地址

我无法让 Solaris 11.0 服务器将对 NFS 共享的访问限制为单个客户端系统。

share我对 ZFS 文件系统的属性大致有以下值tank/mail

name=mail,path=/tank/mail,prot=nfs,none=*,[email protected],sec=sys

我无法在 10.0.23.43 的客户端(运行 Solaris 11.3)上安装共享。我尝试这样:

mount -F nfs keisha:/tank/mail /tmp/mnt

并得到以下错误:

nfs mount: mount: /tmp/mnt: Permission denied

如果我删除,none=*那么客户端安装得很好。然而,据我了解,这样做将允许访问客户任何地址,我想阻止(是的,我知道可能会欺骗该地址,但更愿意添加我可以添加的任何限制。)

none我尝试颠倒和的顺序rw,但这没有任何改变。我已经尝试过了[email protected]/32,但这也行不通。

我尝试过将其开放给整个子网,[email protected]/16甚至不起作用。我还仔细检查了客户的地址是否正确。客户端无法使用 IPv6 访问服务器,因为服务器的 DNS 条目仅为 IPv4,而我通过名称访问它。

为什么限制客户端地址甚至会阻止某个客户端的访问明确允许地址?我该如何解决?

答案1

Ridgy的评论暗示了答案。需要的是删除none,留下:

name=mail,path=/tank/mail,prot=nfs,[email protected],sec=sys

(也许可以省略,@但文档要求它,所以我认为最好保留它,以防将来解释变得更加严格。)

这是一个文档不完善的情况。手册页指出(强调我的):

none
禁止所有客户端访问。 ro或选项rw可以覆盖none.

none=access_list
不允许任何与访问列表匹配的客户端进行访问。 例外情况是当访问列表是星号 ( *) 时,在这种情况下rorw可以覆盖none

这不仅非常明确地表明我的客户端在 10.0.23.43 应该获得访问权限,即使none(它没有),它还意味着您实际上需要 none为了避免未列出的客户端rw获得至少某种访问权限,否则,为什么none=*甚至(据说)会实现覆盖异常? 这将是多余的!

我没有任何其他 NFS 客户端可供测试,因此我更改了客户端的 IP 号并确认确实none不是为了拒绝未以其他方式列出的客户端的访问,这是必需的。为了确定起见,我添加了ro一个测试,然后我位于不同地址的客户端可以读取但不能写入。

虽然这似乎是解决方案,但我对此并不满意,因为文档暗示我正在做的事情是开放的,事实上我可能会在未来的版本中这样做,以纠正自身以遵守文档暗示的意图。 (至少我有外部防火墙。)

答案2

看起来 Ridgy 回答了你的问题,如果它只共享给一台主机。如果有多个,可以使用分号或创建网络组。

如果您需要/想要额外的阻止,您可以考虑使用 ipfilters 或源自 OpenBSD PF (pkg:/network/firewall) 的 Solaris 防火墙。

相关内容