NFS 服务器和防火墙

NFS 服务器和防火墙

我还没有找到关于此的灌篮文档,所以让我们开始一个。

在 CentOS 7.1 主机上,我经历过linuxconfig 操作方法,包括firewall-cmd条目,并且我有一个可导出的文件系统。

[root@<server> ~]# firewall-cmd --list-all
internal (default, active)
  interfaces: enp5s0
  sources: 192.168.10.0/24
  services: dhcpv6-client ipp-client mdns ssh
  ports: 2049/tcp
  masquerade: no
  forward-ports: 
  rich rules: 

[root@<server> ~]# showmount -e localhost
Export list for localhost:
/export/home/<user> *.localdomain

但是,如果我showmount来自客户端,我仍然有问题。

[root@<client> ~]# showmount -e <server>.localdomain
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

现在,我如何确定这是防火墙问题?简单的。关闭防火墙。服务器端:

[root@<server> ~]# systemctl stop firewalld

和客户端:

[root@<client> ~]# showmount -e <server>.localdomain
Export list for <server>.localdomain:
/export/home/<server> *.localdomain

重新启动防火墙。服务器端:

[root@<server> ~]# systemctl start firewalld

和客户端:

[root@<client> ~]# showmount -e <server>.localdomain
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

那么,让我们进城吧,通过调整来自 RHEL 6 NFS 服务器的 iptables 命令操作方法...

[root@ ~]# firewall-cmd \
>  --add-port=111/tcp \
>  --add-port=111/udp \
>  --add-port=892/tcp \
>  --add-port=892/udp \
>  --add-port=875/tcp \
>  --add-port=875/udp \
>  --add-port=662/tcp \
>  --add-port=662/udp \
>  --add-port=32769/udp \
>  --add-port=32803/tcp
success

[root@<server> ~]# firewall-cmd \
>  --add-port=111/tcp \
>  --add-port=111/udp \
>  --add-port=892/tcp \
>  --add-port=892/udp \
>  --add-port=875/tcp \
>  --add-port=875/udp \
>  --add-port=662/tcp \
>  --add-port=662/udp \
>  --add-port=32769/udp \
>  --add-port=32803/tcp \
>  --permanent
success

[root@<server> ~]# firewall-cmd --list-all
internal (default, active)
  interfaces: enp5s0
  sources: 192.168.0.0/24
  services: dhcpv6-client ipp-client mdns ssh
  ports: 32803/tcp 662/udp 662/tcp 111/udp 875/udp 32769/udp 875/tcp 892/udp 2049/tcp 892/tcp 111/tcp
  masquerade: no
  forward-ports: 
  rich rules: 

这次,我从客户端收到了略有不同的错误消息:

[root@<client> ~]# showmount -e <server>.localdomain
rpc mount export: RPC: Unable to receive; errno = No route to host

所以,我知道我走在正确的道路上。话虽如此,为什么我在任何地方都找不到这方面的权威教程呢?我不可能是第一个必须弄清楚这一点的人!

firewall-cmd我缺少哪些条目?

哦,还有一个注释。/etc/sysconfig/nfs到目前为止,我在CentOS 6客户端和CentOS 7服务器上的文件没有被修改。如果可能的话,我宁愿不必更改(和维护!)它们。

答案1

这应该足够了:

firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=mountd
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --reload

答案2

配置 NFS 服务器后,我们应该启用并启动三个服务:

  1. nfs-服务器.service
  2. rpcbind服务
  3. nfs-mountd.service(只需启动)

并且还允许服务器防火墙上的这些服务:

# firewall-cmd --permanent --add-service=nfs
# firewall-cmd --permanent --add-service=rpcbind
# firewall-cmd --permanent --add-service=mountd
# firewall-cmd --reload

答案3

刚刚发现这个 - 当问题是 SELinux 在登录期间阻止读取 ~/.ssh/authorized_keys 时它就可以工作了!首先,请确保您的 ~/.ssh/authorized_keys 文件已正确填充,并且其权限及其文件夹的权限已正确设置。如果您随后在 SSH 目标主机上运行“setenforce 0”并且能够在不输入密码的情况下登录该主机,但在同一目标主机上输入“setenforce 1”后无法登录,则以下操作可能会解决您的问题:

setebool -P use_nfs_home_dirs 1

参考:https://cassjohnston.wordpress.com/2015/06/12/selinux-nfs-home-directories/

答案4

我使用 nfsv4 并且可以很好地处理这些线路,假设您的区域是“公共”并且您使用默认端口 2049 和 4001

firewall-cmd --permanent --add-service=nfs --zone=public
firewall-cmd --permanent --add-service=mountd --zone=public
firewall-cmd --permanent --add-service=rpc-bind --zone=public
firewall-cmd --permanent --add-port=4001/udp --zone=public
firewall-cmd --permanent --add-port=4001/tcp --zone=public
firewall-cmd --permanent --add-port=2049/tcp --zone=public
firewall-cmd --permanent --add-port=2049/udp --zone=public
firewall-cmd --reload

我忘记了一件重要的事情:为 mountd 设置静态端口很有用,这样您就可以用来showmount -e查看共享。我个人使用34777

root      1873     1  0 21:11 ?        00:00:00 /usr/sbin/rpc.mountd -p 34777

所以你将在防火墙上打开端口

  firewall-cmd --permanent --add-port=34777/udp --zone=public
  firewall-cmd --permanent --add-port=34777/tcp --zone=public

挂载端口的配置与发行版不同,有些使用 /etc/sysconfig,有些使用 /etc/default,有些需要编辑脚本。检查您的发行版的文档。

相关内容