NFS客户端挂载在防火墙后面失败

NFS客户端挂载在防火墙后面失败,第1张

概述我有一个带iptables防火墙的Ubuntu 11.10系统.固定mountd,lockd和statd的端口,然后在iptables中打开它,我能够通过防火墙公开NFS共享,没有任何问题. 我遇到的问题是从另一台我无法控制的NFS服务器上安装共享.如果我禁用防火墙,我可以挂载共享.我也可以在不禁用防火墙的情况下挂载其他NFS共享. 所以这引出了两个问题: >为什么防火墙会阻止NFS客户端安装某些 我有一个带iptables防火墙的Ubuntu 11.10系统.固定mountd,lockd和statd的端口,然后在iptables中打开它,我能够通过防火墙公开NFS共享,没有任何问题.

我遇到的问题是从另一台我无法控制的NFS服务器上安装共享.如果我禁用防火墙,我可以挂载共享.我也可以在不禁用防火墙的情况下挂载其他NFS共享.

所以这引出了两个问题:

>为什么防火墙会阻止NFS客户端安装某些服务器而不安装其他服务器?
>客户端可以指定用于NFS挂载的端口吗?

完整配置和错误信息:

根据nfsstat,服务器是NFSv3.我做山时:

# mount -t nfs -v 192.168.80.48:/location /mnt/tmpmount.nfs: timeout set for Fri Mar 23 09:13:00 2012mount.nfs: trying text-based options 'vers=4,addr=192.168.80.48,clIEntaddr=192.168.40.173'mount.nfs: mount(2): No such file or directorymount.nfs: trying text-based options 'addr=192.168.80.48'mount.nfs: prog 100003,trying vers=3,prot=6mount.nfs: trying 192.168.80.48 prog 100003 vers 3 prot TCP port 2049mount.nfs: prog 100005,prot=17mount.nfs: trying 192.168.80.48 prog 100005 vers 3 prot UDP port 678mount.nfs: portmap query retrying: RPC: Timed outmount.nfs: prog 100005,prot=6mount.nfs: trying 192.168.80.48 prog 100005 vers 3 prot TCP port 681mount.nfs: portmap query Failed: RPC: Remote system error - Connection timed out

我看到丢弃的数据包:

Rejected packets: SRC=192.168.80.48 DST=192.168.40.173 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=681 DPT=40325 WINDOW=5792 RES=0x00 ACK SYN URGP=0Rejected packets: SRC=192.168.80.48 DST=192.168.40.173 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=681 DPT=47419 WINDOW=5792 RES=0x00 ACK SYN URGP=0Rejected packets: SRC=192.168.80.48 DST=192.168.40.173 LEN=60 TOS=0x00 PREC=0x00 TTL=63 ID=0 DF PROTO=TCP SPT=681 DPT=41238 WINDOW=5792 RES=0x00 ACK SYN URGP=0

showmount以同样的方式失败.从详细的挂载打印,看起来像portmap是问题,但我确实打开了.

# rpcinfo -p   program vers proto   port  service    100000    4   tcp    111  portmapper    100000    3   tcp    111  portmapper    100000    2   tcp    111  portmapper    100000    4   udp    111  portmapper    100000    3   udp    111  portmapper    100000    2   udp    111  portmapper    100024    1   udp  32765  status    100024    1   tcp  32765  status    100003    2   tcp   2049  nfs    100003    3   tcp   2049  nfs    100003    4   tcp   2049  nfs    100227    2   tcp   2049    100227    3   tcp   2049    100003    2   udp   2049  nfs    100003    3   udp   2049  nfs    100003    4   udp   2049  nfs    100227    2   udp   2049    100227    3   udp   2049    100021    1   udp   4002  nlockmgr    100021    3   udp   4002  nlockmgr    100021    4   udp   4002  nlockmgr    100021    1   tcp   4001  nlockmgr    100021    3   tcp   4001  nlockmgr    100021    4   tcp   4001  nlockmgr    100005    1   udp  32767  mountd    100005    1   tcp  32767  mountd    100005    2   udp  32767  mountd    100005    2   tcp  32767  mountd    100005    3   udp  32767  mountd    100005    3   tcp  32767  mountd# cat /etc/servicessunrpc          111/tcp         portmapper      # RPC 4.0 portmappersunrpc          111/udp         portmappernfs             2049/tcp                        # Network file Systemnfs             2049/udp                        # Network file System# iptables -LChain input (policy ACCEPT)target     prot opt source               destinationACCEPT     all  --  anywhere             anywhereACCEPT     tcp  --  anywhere             anywhere            tcp dpt:sshACCEPT     tcp  --  anywhere             anywhere            tcp dpt:smtpACCEPT     tcp  --  anywhere             anywhere            tcp dpt:domainACCEPT     tcp  --  anywhere             anywhere            tcp dpt:sunrpcACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ntpACCEPT     tcp  --  anywhere             anywhere            tcp dpt:netbios-nsACCEPT     tcp  --  anywhere             anywhere            tcp dpt:netbios-dgmACCEPT     tcp  --  anywhere             anywhere            tcp dpt:netbios-ssnACCEPT     tcp  --  anywhere             anywhere            tcp dpt:httpsACCEPT     tcp  --  anywhere             anywhere            tcp dpt:microsoft-dsACCEPT     tcp  --  anywhere             anywhere            tcp dpt:nfsACCEPT     tcp  --  anywhere             anywhere            tcp dpt:sunrpcACCEPT     tcp  --  anywhere             anywhere            tcp dpt:3260ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:32765ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:32766ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:32767ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:4001ACCEPT     udp  --  anywhere             anywhere            udp dpt:domainACCEPT     udp  --  anywhere             anywhere            udp dpt:sunrpcACCEPT     udp  --  anywhere             anywhere            udp dpt:ntpACCEPT     udp  --  anywhere             anywhere            udp dpt:netbios-nsACCEPT     udp  --  anywhere             anywhere            udp dpt:netbios-dgmACCEPT     udp  --  anywhere             anywhere            udp dpt:netbios-ssnACCEPT     udp  --  anywhere             anywhere            udp dpt:httpsACCEPT     udp  --  anywhere             anywhere            udp dpt:microsoft-dsACCEPT     udp  --  anywhere             anywhere            udp dpt:nfsACCEPT     udp  --  anywhere             anywhere            udp dpt:4002ACCEPT     udp  --  anywhere             anywhere            udp dpt:32765ACCEPT     udp  --  anywhere             anywhere            udp dpt:32766ACCEPT     udp  --  anywhere             anywhere            udp dpt:32767ACCEPT     tcp  --  anywhere             anywhere            tcp spt:domainACCEPT     udp  --  anywhere             anywhere            udp spt:domainACCEPT     tcp  --  anywhere             anywhere            tcp spt:sunrpcACCEPT     udp  --  anywhere             anywhere            udp spt:sunrpcACCEPT     tcp  --  anywhere             anywhere            tcp spt:netbios-ssnACCEPT     udp  --  anywhere             anywhere            udp spt:netbios-ssnACCEPT     tcp  --  anywhere             anywhere            tcp spt:httpsACCEPT     udp  --  anywhere             anywhere            udp spt:httpsACCEPT     tcp  --  anywhere             anywhere            tcp spt:microsoft-dsACCEPT     udp  --  anywhere             anywhere            udp spt:microsoft-dsACCEPT     tcp  --  anywhere             anywhere            tcp spt:submissionACCEPT     udp  --  anywhere             anywhere            udp spt:submissionACCEPT     tcp  --  anywhere             anywhere            tcp spt:nfsACCEPT     udp  --  anywhere             anywhere            udp spt:nfs
解决方法 sysctl中有一些设置,用于定义可用于连接的NFS端口范围.

sunrpc.max_resvport = 1023

sunrpc.min_resvport = 650

这些设置定义用于建立RPC连接的最高和最低端口(NFS)

您可以打开这些端口或根据您的系统定义不同的范围.如果它尝试使用被防火墙或使用该端口的其他服务阻止的端口,您将会拒绝.

编辑:

您也可以增加/减少此范围.我有一台服务器,在fstab中定义了460个NFS挂载,并且在372左右后它将失败.当我手动安装其中一个失败的安装时,它会安装它但卸下其中一个工作安装座.我将这个范围增加了150并且它们全都安装了.这不是最好的方法.我想到了自动挂载程序,但它确实有效.

要进行修改,您将编辑/etc/sysctl.conf,添加如下行:

sunrpc.min_resvport = 900

如果您需要更改,请将更改永久化.请记住,如果你超过1024那些是“非特权”端口,普通系统用户可以访问它们 – 1024.

编辑2:

在NFS mount命令中,您可以添加以下内容.

proto = tcp – 强制mount使用TCP / IP

public – 完全绕过portmapper并在端口2049上联系NFS服务器,除非另有说明

所以,mount nfs.test.com:/export / test

mount -o proto = tcp,public nfs.test.com:/export / test

编辑3

好的 – 我们走吧! root @ pressyrluck#./ NowhammIEs>的/ dev /请

这个信息被解除了从Sourceforge NFS借来的复制

通过nfs共享数据所涉及的一些守护进程已经绑定到一个端口. portmap始终在端口111 tcp和udp上. nfsd总是在端口2049 TCP和UDP上(但是,从内核2.4.17开始,NFS over TCP被认为是实验性的,不能在生产机器上使用).

其他守护进程,statd,mountd,lockd和rquotad通常会移动到portmapper通知的第一个可用端口.

要强制statd绑定到特定端口,请使用-p portnum选项.要强制statd响应特定端口,请在启动时使用-o portnum选项.

要强制mountd绑定到特定端口,请使用-p portnum选项.

例如,要在端口32765上进行statd广播并在端口32766上进行侦听,并在端口32767上进行mountd侦听,则应键入:

# statd -p 32765 -o 32766# mountd -p 3276

lockd在需要时由内核启动.因此,您需要传递模块选项(如果您将其构建为模块)或内核选项,以强制锁定以侦听并仅响应某些端口.

如果您正在使用可加载模块,并且您想在/etc/modules.conf文件中指定这些选项,请在文件中添加如下所示的行:

options lockd nlm_udpport=32768 nlm_tcpport=32768

为了便于讨论,我们描述一个网络并设置防火墙以保护我们的nfs服务器.我们的nfs服务器是192.168.0.42我们的客户端只有192.168.0.45.如上例所示,statd已经启动,因此它仅绑定到端口32765以获取传入请求,并且必须在端口32766上应答.mountd被强制绑定到端口32767.lockd的模块参数已设置为绑定到32768. nfsd当然是在端口2049上,端口映射器在端口111上.

我们没有使用配额.

iptables -A input -f -j ACCEPT -s 192.168.0.45iptables -A input -s 192.168.0.45 -d 0/0 32765:32768 -p 6 -j ACCEPTiptables -A input -s 192.168.0.45 -d 0/0 32765:32768 -p 17 -j ACCEPTiptables -A input -s 192.168.0.45 -d 0/0 2049 -p 17 -j ACCEPTiptables -A input -s 192.168.0.45 -d 0/0 2049 -p 6 -j ACCEPTiptables -A input -s 192.168.0.45 -d 0/0 111 -p 6 -j ACCEPTiptables -A input -s 192.168.0.45 -d 0/0 111 -p 17 -j ACCEPTiptables -A input -s 0/0 -d 0/0 -p 6 -j DENY --syn --log-level 5iptables -A input -s 0/0 -d 0/0 -p 17 -j DENY --log-level 5

第一行表示接受所有数据包片段(第一个数据包片段除外,它将被视为普通数据包).理论上,在重新组装之前,数据包不会通过,除非传递第一个数据包片段,否则不会重新组装.当然,可以通过使用数据包片段重载机器来生成攻击.但是除非你让片段通过,否则NFS将无法正常工作.有关详细信息,请参见第7节“故障排除”.

其他行允许从客户端主机上的任何端口到我们在服务器上提供的特定端口之间的特定连接.这意味着,如果192.158.0.46尝试联系NFS服务器,它将无法安装或查看可用的安装.

使用新的端口固定功能,显然可以更轻松地控制允许挂载NFS共享的主机.值得一提的是,NFS不是加密协议,同一物理网络上的任何人都可以嗅探流量并重新组合来回传递的信息.

总结

以上是内存溢出为你收集整理的NFS客户端挂载在防火墙后面失败全部内容,希望文章能够帮你解决NFS客户端挂载在防火墙后面失败所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1035170.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存