我想与网络上的所有客户端(除了一个客户端)共享一个文件夹。这是我当前的/etc/exports
文件:
/opt/resources *(rw,async)
我应该添加什么来防止客户192.168.1.24
无需提及所有其他授权客户的地址?
答案1
我不知道有哪个 NFS 服务器接受exports
文件中的负模式。
如果您列出 IP 地址,则可以使用网络掩码同时覆盖多个客户端(不能对 IP 地址使用通配符模式)。例如,以下行匹配 192.168.1.*(192.168.1.24 除外)。是的,这很乏味。
/opt/resources 192.168.1.0/28(rw,async) 192.168.1.16/29(rw,async) 192.168.1.25(rw,async) 192.168.1.26/31(rw,async) 192.168.1.28/30(rw,async) 192.168.1.32/27(rw,async) 192.168.1.64/26(rw,async) 192.168.1.128/25(rw,async)
您可以exports
使用以下命令来避免文件混乱和可能的重复NIS网络组。但是,在网络组文件中,您将需要列出所有列表中的所有主机。
如果您找不到令人满意的方法来描述每个导出树的访问列表,您可能需要自动生成hosts
或netgroup
文件。
答案2
据我所知,NFS
没有任何选项可以拒绝指定的客户端(因为如果客户端未在exports
条目中列出,则它无法访问共享资源)。
就您而言,我认为您可以用来host.deny
拒绝客户端访问NFS
共享。添加一行/etc/host.deny
:
portmap:192.168.1.24
当然,这不是一个完美的解决方案,因为列出的客户端/etc/host.deny
无法访问NFS
服务器中任何其他共享资源。
答案3
另一种方法是使用IP集与 iptables。 ipset 在大多数 Linux 基础存储库中都可用。
您可以使用以下命令创建 IP 地址的 ipset:
ipset create serverblacklist hash:net
ipset -A serverblacklist 192.168.1.24
...并添加这样的规则来阻止 ipset 表“serverblacklist”IP-
iptables -A INPUT -p tcp -m set --match-set serverblacklist src -j DROP
同样,您还可以创建一个允许的 IP 白名单和一个 IPtables 条目来明确允许它们,具体取决于什么是最方便的。