date: 2020-10-17title: 搭建nfs服务并配置防火墙规则 #标题
tags: nfs,firewalld #标签
categories: 工作大杂烩 # 分类

公司业务进行安全整改,扫描到nfs的showmount -e信息泄露问题(漏洞代码:CVE-1999-0554),要求整改。
由于nfs服务没有固定端口,需要配置固定端口,我采用这种方式找文档做了一下,没有成功,也就没有深入研究,所以换个姿势,针对服务名来放行相关流量。

需求描述

192.168.20.2 作为nfs服务器,192.168.20.3/192.168.20.4作为clinet挂载nfs共享目录,要求除这两个client端外,其他节点无法通过showmount -e 查看到192.168.20.2共享的目录。

配置nfs共享服务器

  1. # 安装服务
  2. [root@nfs ~]# yum -y install nfs-utils rpcbind
  3. # 设置开机自启
  4. [root@nfs ~]# systemctl enable nfs
  5. [root@nfs ~]# systemctl enable rpcbind
  6. # 配置共享目录
  7. [root@nfs ~]# mkdir /data
  8. [root@nfs ~]# cat /etc/exports
  9. /data 192.168.20.0/24(rw,sync,no_root_squash)
  10. # 启动相关服务
  11. [root@nfs ~]# systemctl start rpcbind
  12. [root@nfs ~]# systemctl start nfs

nfs可选参数

参数 作用
ro 只读
rw 读写
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
sync 同时将数据写入到内存与硬盘中,保证不丢失数据
async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据

配置防火墙富规则

  1. [root@nfs ~]# cat /etc/firewalld/zones/public.xml # 以下是完整的public区域配置文件
  2. <?xml version="1.0" encoding="utf-8"?>
  3. <zone>
  4. <short>Public</short>
  5. <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  6. <service name="ssh"/>
  7. <service name="dhcpv6-client"/>
  8. <!--从这里开始,是给主机192.168.20.3放行相关流量-->
  9. <rule family="ipv4">
  10. <source address="192.168.20.3"/>
  11. <service name="nfs"/>
  12. <accept/>
  13. </rule>
  14. <rule family="ipv4">
  15. <source address="192.168.20.3"/>
  16. <service name="mountd"/>
  17. <accept/>
  18. </rule>
  19. <rule family="ipv4">
  20. <source address="192.168.20.3"/>
  21. <service name="rpc-bind"/>
  22. <accept/>
  23. </rule>
  24. <!--192.168.20.3放行nfs相关流量至此结束 -->
  25. <!--以下是给192.168.20.4主机放行相关流量,以后有哪个主机要使用此nfs共享目录,则放行nfsmountdrpc-bind这三个服务即可-->
  26. <rule family="ipv4">
  27. <source address="192.168.20.4"/>
  28. <service name="nfs"/>
  29. <accept/>
  30. </rule>
  31. <rule family="ipv4">
  32. <source address="192.168.20.4"/>
  33. <service name="mountd"/>
  34. <accept/>
  35. </rule>
  36. <rule family="ipv4">
  37. <source address="192.168.20.4"/>
  38. <service name="rpc-bind"/>
  39. <accept/>
  40. </rule>
  41. </zone>
  42. [root@nfs ~]# systemctl start firewalld # 如果防火墙没有启动,则需要启动
  43. [root@nfs ~]# firewall-cmd --reload # 重新加载防火墙配置

客户端挂载使用

  1. $ yum -y install nfs-utils
  2. $ mount -t nfs 192.168.20.2:/data/ /data # 挂载到本地/data目录
  3. $ df -hT /data/ # 确认已挂载
  4. 文件系统 类型 容量 已用 可用 已用% 挂载点
  5. 192.168.20.2:/data nfs4 50G 4.5G 46G 9% /data
  6. [root@localhost ~]# tail -n1 /etc/fstab # 配置开机自动挂载
  7. 192.168.20.2:/data /data nfs4 defaults 0 0

安全整改至此结束,至于开机自动挂载等,自行验证即可。

如果客户端挂载时报错如下:

  1. $ mount -t nfs 192.168.20.4:/data /data
  2. mount: 文件系统类型错误、选项错误、192.168.20.4:/data 上有坏超级块、
  3. 缺少代码页或助手程序,或其他错误
  4. (对某些文件系统(如 nfscifs) 您可能需要
  5. 一款 /sbin/mount.<类型> 助手程序)
  6. 有些情况下在 syslog 中可以找到一些有用信息- 请尝试
  7. dmesg | tail 这样的命令看看。

解决办法

  1. yum -y install nfs-utils