NFS4、不安全、端口号、rdma 矛盾帮助

NFS4、不安全、端口号、rdma 矛盾帮助
  • 目前,对于 RHEL 8.8 和 RHEL 9.x,最新的 NFS 版本是 4.2。
  • 当 NFS 4 推出时,它取消了 NFS3 中的一些内容,其中之一是多个端口号:
    • 网络文件系统4授权现在所有流量都是 TCP使用单个众所周知的端口 2049
    • https://www.snia.org/sites/default/files/SNIA_An_Overview_of_NFSv4-3_0.pdf
    • 您可以找到更多陈述相同内容的知名文章。
    • 我通过在 RHEL 7.9 中的 NFS 4.1 的防火墙中仅打开 TCP 2049 来确认这一点;它不使用端口 111 或任何其他端口,除非您更改/etc/nfs.conf或的默认配置/etc/sysconfig/nfs。事实上,当我确实让 rdma 工作(通过端口 20049)时,rdma 协议专门绕过了firewalld,我认为这是 rdma 节省 cpy 周期并且速度更快的固有原因。

国家森林服务局不安全感选项/etc/exports 设置服务器侦听来自客户端上任何端口的请求。将其更改为“安全”(默认)可确保服务器仅侦听来自客户端端口 1-1024 的请求。因此,客户端上未经授权的用户将无法启动 NFS 对话。以供参考 :https://security.stackexchange.com/questions/246527/what-is-insecure-about-the-insecure-option-of-nfs-exports

默认为安全的不安全感当进行 NFS4 导出时,如果/etc/exports.

安全规则人们经常说 NFS 服务器不得启用不安全文件锁定选项。

首先使用/etc/exports secure选项,默认情况下,*仅在小于 1024 的安全端口上运行似乎完全不正确,因为 NFS4 在端口 2049 上运行。数字 2049 大于 1024...我错过了什么?

关于RDMA按照惯例在港口发生的情况,20049似乎有一个被忽视的事实,即人们需要明确地陈述不安全感/etc/exports如果要使用 a中的选项mount -o rdma,否则安装总是发生 asproto=tcp和 notproto=rdma且没有任何指示。

我确实验证了这一点,使用MLNX_OFED_LINUX-23.04-1.1.3.0-rhel8.8-x86_64.iso安装的 RedhatInfiniBand Support软件包代替了 amount -o rdma,port=1023确实可以mount在客户端显示proto=rdma.

然而还必须执行(仅使用 MLNX?)echo rdma 20049 > /proc/sys/nfsd/portlist.或者在安全导出的情况下回显 RDMA 1023。有谁知道这些值如何/为什么不存在/proc/sys/nfsd/portlist以及为什么我必须手动执行它们? 那么将这些数字放在那里的正确方法是什么,以便在启动后我的/etc/fstab数据文件夹作为 rdma 的 nfs 挂载成功发生? MLNX 教学 pdf 存在不足。

我一直在用头撞墙让 RDMA 工作,总体而言 NFS 似乎有很多缺点,我有一个付费的集群管理器软件,它具有用于配置的 RDMA 占位符,但所有挂载始终都是 proto=tcp 。因此,如果任何人都可以提供有关所描述内容的任何信息,将会有所帮助,我将+任何答案。

还:我最终将/etc/exports选择secure一些端口号 1023 及以下以满足安全规则。如何在该范围内选择合适的数字?作为 ron 没人,我的理解是我永远不应该使用低于 1000 或 1024 的端口号来设置我的东西?

更新:看来/etc/exports参数安全的或者不安全感是无关紧要的。重要的是rdma 20049/proc/fs/nfsd/portlistnfsserver 上。有了这个或任何数字,它似乎可以与安全的导出文件。

答案1

您对 NFS(网络文件系统)版本 4、其安全选项、端口号以及 RDMA(远程直接内存访问)的使用有几个问题和疑虑。

NFS 版本 4 消除了 NFS 版本 3 中使用的多个端口号的需要。因此,对于 NFSv4,所有流量都通过端口 2049 上的 TCP 进行处理。

安全和 NFS

insecure中的选项不是/etc/exports指端口号。它确定 NFS 服务器是否接受来自客户端上任何端口(不安全)的请求,还是仅接受来自端口 1-1024(安全)的请求。此选项与 NFSv4 使用的众所周知的端口 2049 无关。

NFS导出的“不安全”选项有什么不安全之处?

服务器将“仅在小于 1024 的安全端口上运行" 在 NFSv4 上下文中不正确,因为它在端口 2049 上运行,该端口大于 1024。

将 RDMA 与 NFS 结合使用时,您需要指定选项insecure/etc/exports允许 RDMA 挂载。如果没有此选项,NFS 将默认使用 TCP(proto=tcp)而不是 RDMA(proto=rdma)

要选择低于 1024 的端口号,请选择 1-1023 范围内尚未分配给知名服务的端口。

您可以参考 IANA(互联网号码分配机构)服务名称和端口号注册表,以确保您没有选择已在使用的端口。

服务名称和传输协议端口号注册表

检查您的/etc/services包含服务名称到端口号的映射:

cat /etc/services

如果您需要大量已使用号码的列表,请安装 nmap 软件包。

答案2

/proc/fs/nfsd/portlist这很大程度上是问题所在

https://patchwork.kernel.org/project/linux-nfs/patch/[电子邮件受保护]/

/etc/nfs.conf文件在 RHEL 8 中解释为模板#rdma=n里面 有。因此,从逻辑上讲,人们会认为只是取消注释并执行rdma=y...其中y等于是。这并不完全有效。

你必须做rdma=nfsrdma而不是rdma=y.然后rdma 20049就会出现在/proc/fs/nfsd/portlist.或者我假设rdma-port中指定的内容/etc/nfs.conf。然后NFS RDMA就可以工作了;这是安装了 MLNX 的情况。做完后需要一分钟service nfs-server restart才能观察到proc的变化。

答案3

在现代 Linux 系统上,有两个问题需要解决:

  • 服务端和客户端都必须加载rpcrdma内核模块
  • 与某个端口(无论是哪一个)关联的 rdma 必须出现在/proc/fs/nfsd/portlist

要完成其中第一个,只需rpcrdma添加/etc/modules-load.d/modules.conf

要完成第二个任务,该参数需要位于/usr/sbin/rpc.nfsd命令行上:--rdma=2049。在 Ubuntu 上,通过将以下行添加到以下内容可以最轻松地完成此操作/etc/default/nfs-kernel-server

RPCNFSDOPTS="--rdma=2049"

(我只是使用普通的 NFSv4 端口而不是 20049,以避免将来出现潜在的防火墙问题。)

为了完整起见,我应该补充一点,所有剩余的配置只是设置 NFS 服务器的标准配置。

相关内容