nfs 的 iptables 规则

nfs 的 iptables 规则

showmount -e 192.168.56.2我在客户端机器上输入时出现以下错误

[root@client ~]# showmount -e 192.168.56.2
clnt_create:RPC:端口映射器故障 - 无法接收:errno 113(没有到主机的路由)

这是我的 nfs 服务器配置

nfs 服务器 ip 192.168.56.2

这是我的 nfs 共享

[root@www ~]# cat /etc/exports
/文件 192.168.56.7(rw,同步)

这是服务器上运行的两个服务

[root@www ~]# 服务 rpcbind 状态
rpcbind(pid 2626)正在运行...
[root@www ~]# 服务 nfs 状态
rpc.svcgssd 已停止
rpc.mountd (pid 2716) 正在运行...
nfsd (pid 2781 2780 2779 2778 2777 2776 2775 2774) 正在运行...
rpc.rquotad (pid 2712) 正在运行...

这是我的 iptables 规则

[root@www ~]# cat /etc/sysconfig/iptables
# 由 iptables-save v1.4.7 于 2013 年 10 月 31 日星期四 02:08:16 生成
*筛选
:输入接受 [0:0]
:转发接受 [0:0]
:输出接受 [5:388]
-A 输入-p tcp -m tcp --dport 111 -j 接受
-A 输入-p tcp -m tcp --dport 2049 -j 接受
-A 输入 -m 状态 --状态相关,已建立 -j 接受
-A 输入-p icmp -j 接受
-A 输入-i lo -j 接受
-A 输入 -p tcp -m 状态 --状态新 -m tcp --dport 22 -j 接受
-A 输入 -j 拒绝 --拒绝 icmp 主机禁止
-A 转发 -j 拒绝 --拒绝与 icmp 主机禁止
犯罪
# 于 2013 年 10 月 31 日星期四 02:08:16 完成

如果我刷新服务器中的 iptables 规则,那么我的客户端就能够看到 nfs 共享

[root@client ~]# showmount -e 192.168.56.2
192.168.56.2 的导出列表:
/文件 192.168.56.7

这意味着 iptables 规则存在问题,有人能告诉我我的 iptables 规则出了什么问题吗?我是否遗漏了其他端口?如何解决这些类型的问题?

我在客户端机器上尝试了这种方法来验证端口是否正在监听,这是该方法的输出

[root@client ~]# telnet 192.168.56.2 111
尝试 192.168.56.2...
已连接到 192.168.56.2。
转义字符是‘^]’。
[root@client ~]# telnet 192.168.56.2 2049
尝试 192.168.56.2...
已连接到 192.168.56.2。
转义字符是‘^]’。

答案1

NFS 的开放端口列表过于严格。首先,您必须向 UDP 开放相同的端口,然后需要添加另外 2 个端口。要开放的端口的完整列表如下:

 sunrpc     111/tcp    rpcbind  #SUN Remote Procedure Call
 sunrpc     111/udp    rpcbind  #SUN Remote Procedure Call
 nfsd-status    1110/tcp   #Cluster status info
 nfsd-keepalive 1110/udp   #Client status info
 nfsd       2049/tcp   nfs      # NFS server daemon
 nfsd       2049/udp   nfs      # NFS server daemon
 lockd      4045/udp   # NFS lock daemon/manager
 lockd      4045/tcp

答案2

NFS 服务器:

为 rquotd(875/udp; 875/tcp)、lockd(32803/tcp; 32769/udp)、mountd(892/udp; 892/tcp)、statd(10053/udp; 10053/tcp)、statd_outgoing(10054/udp; 10054/tcp) 配置端口

    vim /etc/sysconfig/nfs

如果需要,可以通过编辑 /etc/sysconfig/nfs 的第 5 行和第 6 行来禁用 NFS v3 和 NFS v2 支持

    MOUNTD_NFS_V2="no"
    MOUNTD_NFS_V3="no"

保存当前 Iptables 规则以供日后使用

    iptables-save > pre-nfs-firewall-rules-server

刷新并检查 Iptables 规则

    iptables -F
    iptables -L

按以下顺序停止并启动 NFS 及相关服务

   service rpcbind stop
   service nfslock stop
   service nfs stop
   service rpcbind start
   service nfslock start
   service nfs start

确保配置的 NFS 及其相关端口与之前设置一致,并记下端口号和 OSI 第 4 层协议。rpcbind(或 portmapper)的标准端口号为 111/udp、111/tcp,nfs 的标准端口号为 2049/udp、2049/tcp。

   rpcinfo -p | sort -k 3 

立即恢复 pre-nfs-firewall-rules

   iptables-restore < pre-nfs-firewall-rules-server

为 NFS 服务器编写 iptables 规则(注意:必须允许环回适配器,否则您将看到数据包被丢弃,并且当您重新启动 nfs 服务时,它将吐出错误{ 启动 NFS 配额:无法注册服务:RPC:超时 rpc.rquotad:无法注册(RQUOTAPROG、RQUOTAVERS、udp)。[失败] }用于 rquotad 守护进程。您可以通过在过滤表的 INPUT 或 OUTPUT 链底部添加带有 LOG 跳转目标的规则来检查这一点)

   iptables -P INPUT DROP
   iptables -P OUTPUT DROP 
   iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p udp -m multiport --dports 10053,111,2049,32769,875,892 -m state --state NEW,ESTABLISHED -j ACCEPT 
   iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m multiport --dports 10053,111,2049,32803,875,892 -m state --state NEW,ESTABLISHED -j ACCEPT 
   iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p udp -m multiport --sports 10053,111,2049,32769,875,892 -m state --state ESTABLISHED -j ACCEPT 
   iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m multiport --sports 10053,111,2049,32803,875,892 -m state --state ESTABLISHED -j ACCEPT 
   iptables -I INPUT  -i lo -d 127.0.0.1 -j ACCEPT
   iptables -I OUTPUT  -o lo -s 127.0.0.1 -j ACCEPT
   iptables -L -n --line-numbers

配置 NFS 导出目录

   vim /etc/exports 
   exportfs -av
   showmount -e
   rpcinfo -p

按以下顺序停止并启动 NFS 及相关服务

   service rpcbind stop
   service nfslock stop
   service nfs stop
   service rpcbind start
   service nfslock start
   service nfs start

NFS 客户端:

保存当前 Iptables 规则以供日后使用

   iptables-save > pre-nfs-firewall-rules-client

刷新并检查 Iptables 规则

   iptables -F
   iptables -L

从客户端机器获取防火墙的 NFS 服务器端口并记下端口号和 OSI 第 4 层协议。

   rpcinfo -p 'ip-addr-nfs-server' | sort -k 3

立即恢复 pre-nfs-firewall-rules

   iptables-restore < pre-nfs-firewall-rules-client

为 NFS 客户端编写 iptables 规则(注意:必须允许环回适配器,否则您将看到数据包被丢弃,并且当您重新启动 nfs 服务时,它将吐出错误{ 启动 NFS 配额:无法注册服务:RPC:超时 rpc.rquotad:无法注册(RQUOTAPROG、RQUOTAVERS、udp)。[失败] }用于 rquotad 守护进程。您可以通过在过滤表的 INPUT 或 OUTPUT 链底部添加带有 LOG 跳转目标的规则来检查这一点)

   iptables -P INPUT DROP
   iptables -P OUTPUT DROP
   iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p udp -m multiport --sports 10053,111,2049,32769,875,892 -m state --state ESTABLISHED -j ACCEPT 
   iptables -A INPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m multiport --sports 10053,111,2049,32803,875,892 -m state --state ESTABLISHED -j ACCEPT 
   iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p udp -m multiport --dports 10053,111,2049,32769,875,892 -m state --state NEW,ESTABLISHED -j ACCEPT 
   iptables -A OUTPUT -s 192.168.1.0/24 -d 192.168.1.0/24 -p tcp -m multiport --dports 10053,111,2049,32803,875,892 -m state --state NEW,ESTABLISHED -j ACCEPT 
   iptables -I INPUT  -i lo -d 127.0.0.1 -j ACCEPT
   iptables -I OUTPUT  -o lo -s 127.0.0.1 -j ACCEPT
   iptables -L -n --line-numbers

按以下顺序停止并启动 NFS 及相关服务

   service rpcbind stop
   service nfslock stop
   service nfs stop
   service rpcbind start
   service nfslock start
   service nfs start

列出 NFS 服务器导出

   showmount -e 'ip-addr-nfs-server'

手动挂载 NFS 导出(可以使用 /etc/fstab 配置持久挂载)

   mount -t nfs ip-addr-nfs-server:/exported-directory /mount-point -o rw,nfsvers=3
   mount -t nfs ip-addr-nfs-server:/exported-directory /mount-point -o rw  --> For NFS4 version

如果 nfs 导出和 ldap 用户主目录优先使用自动挂载,则配置 autofs(可以设置直接和间接映射)

   vim /etc/auto.master    -> specify the mount point and map-name (Eg: auto.nfs)
   vim /etc/map-name
   service autofs stop
   service autofs start

检查已挂载的 NFS 导出

   df -h -F nfs
   mount | grep nfs

列出所有伪根 NFS-V4 导出目录(NFS Lazy mount)

   ls /net/ip-addr-nfs-server

相关内容