NFS服务器和防火墙


16

我还没有找到一个灌篮文件,所以让我们开始吧。

在CentOS 7.1主机上,我经历了linuxconfig HOW-TO,包括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

重新启动firewalld。服务器端:

[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服务器HOW-TOiptables命令 ...

[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服务器上的文件尚未修改。如果可能的话,我宁愿不必更改(和维护!)它们。

Answers:


40

这应该足够了:

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

就我而言还不够。我有两个NFS服务器,第一个正确广播并由其客户端订阅,第二个显然广播正确,但其客户端(第一个服务器)无法“ showmount”(rpc mount导出:RPC:无法接收; errno =主机无路由)。如果/解决此问题,我会回到这里。
Urhixidur

事实证明,SERVER需要将三个服务(nfs,mountd,rpc-bind)添加到其防火墙中(如果客户端也需要全部三个,则不知道;在我的情况下,这三个恰好都有)。在我的情况下,客户端(第一台NFS服务器)拥有它,但是服务器(第二台NFS服务器)缺少安装。
Urhixidur

@Urhixidur客户端不需要这些,因为firewalld允许传出连接。
T0xicCode

注意rpc-bind的拼写。尽管我用systemctl enable rpcbindand 启用了它systemctl start rpcbind,但是firewall-cmd告诉我Error: INVALID_SERVICE: rpcbind。很快我意识到在这种情况下需要破折号!他们真的是同一服务吗?
Qwertie

5

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

  1. nfs-server.service
  2. rpcbind.service
  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

4

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

setsebool -P use_nfs_home_dirs 1

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


0

我使用nfsv4并在这些行上正常工作,假设您的区域是“ public”,并且您使用的是默认端口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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.