使 NFS 服务器仅监听特定接口

使 NFS 服务器仅监听特定接口

我正在尝试在 Ubuntu 20.04 机器上运行 NFS 服务器(nfs-kernel-server包),并希望使其只能通过 VPN 访问。

/etc/exports我在文件和防火墙中设置了适当的 IP 地址。尽管如此,rpc.mountd守护进程仍在监听所有接口(0.0.0.0::)。作为纵深防御措施,我想进一步限制它仅监听 VPN 网络设备上的连接。

我该如何配置它?

答案1

Ubuntu 和 Debian 的配置如下

/etc/default/nfs-kernel-server

您可以使用来限制它

RPCNFSDOPTS="-H 10.0.40.72"

答案2

引用nfsd(8)

OPTIONS
       -d  or  --debug
              enable logging of debugging messages

       -H  or  --host hostname
              specify a particular hostname (or address) that NFS requests will be accepted on. By default, rpc.nfsd will accept NFS requests on all known network addresses.  Note that lockd (which performs file locking services for NFS) may still accept request on all known network addresses.  This may change
              in future releases of the Linux Kernel. This option can be used multiple time to listen to more than one interface.

       -p  or  --port port
              specify a different port to listen on for NFS requests. By default, rpc.nfsd will listen on port 2049.

答案3

在 Ubuntu 22.04(可能更早版本)中,执行此操作的方法是放入一个配置文件/etc/nfs.conf.d/

# /etc/nfs.conf.d/interfaces.conf
[nfsd]
host=hostname-or-ip-to-listen-on

手册nfs.conf(5)页记录了这一点。

答案4

/etc/nfs.conf/中的配置/etc/nfs.conf.d/*RPCNFSDOPTS中的指定都不会/etc/default/nfs-kernel-server影响将要监听的接口rpc.mountd。因此,这里的其他答案实际上都没有回答最初的问题,即限制对rpc.mountd特定接口的访问。

的手册页rpc.mountd没有列出执行所需限制的选项。相反,它建议使用tcp_wrapper库或内核防火墙iptables来实现此目的。

但是,由于大多数系统已经迁移到 NFS 协议版本 4,因此有一个更简单的解决方案:NFSv4 不再需要rpc.mountd。有关如何执行此操作的说明可在本页底部找到:https://wiki.debian.org/NFSServerSetup

因此,要限制本地接口上 NFS 对 NFSv4 的访问,请在最新的 Ubuntu / Debian 服务器上执行以下操作:

systemctl stop nfs-kernel-server.service
systemctl stop rpcbind.service
systemctl mask rpcbind.service
systemctl mask rpcbind.socket

vi /etc/default/nfs-common
    NEED_STATD="no"
    NEED_IDMAPD="yes"

vi /etc/default/nfs-kernel-server
    RPCNFSDOPTS="-H YOUR-LOCAL-IP-YOU-WANT-TO-BIND-TO -N 2 -N 3"
    RPCMOUNTDOPTS="--manage-gids -N 2 -N 3"

systemctl start nfs-kernel-server.service 

在此处列出的四个配置选项(NEED_STATDNEED_IDMAPD和)中RPCNFSDOPTSRPCMOUNTDOPTS您会发现只有最后一个已在 Debian 或 Ubuntu 附带的这些文件的默认版本中定义。请确保RPCMOUNTDOPTS正确编辑并添加其他三个。当然,您可以自由选择其他编辑器来代替vi

rpcbind.service在使用屏蔽之前systemctl(假装它已经启动,但实际上并没有启动),请确保您的机器上没有其他服务需要它。

相关内容