【问题标题】:Iptables Rules for NFS Server and NFS ClientNFS 服务器和 NFS 客户端的 iptables 规则
【发布时间】:2014-11-29 00:11:07
【问题描述】:

没有iptables 规则我可以​​挂载我的NFSSERVER:/PATH,但启用它(firewall/iptables) 我无法挂载。

[.e.g., after iptables --flush/ firewaalld stop ; mount NFSSERVER:/Path works ]

我不应该禁用/清除firewall/iptables,但我可以打开一个端口。我需要添加什么规则才能打开端口/挂载?

当前默认策略是DROP all INCOMING/OUTGOING/FORWARD,并且有一些规则允许从外部 80 端口等进行 wget,

添加 NFS 服务器端口没有帮助。

iptables -A OUTPUT -p tcp --dport 2049 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --sport 2049 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p udp --dport 2049 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp --sport 2049 -m state --state ESTABLISHED -j ACCEPT

谢谢。

PS:这是nfs客户端而不是NFS服务器机器。

【问题讨论】:

  • 这不起作用,因为nfsd 不是唯一需要网络访问的守护进程。 NFS 中涉及的其他守护进程是 portmapstatdmountdlockdrquotad。例如,请参阅 thisthis

标签: iptables nfsclient


【解决方案1】:

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,你可以试试 iptables -S filename )

    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 规则(注意:必须允许 Loopback 适配器,否则您会看到丢包,并且当您重新启动 nfs 服务时,它会吐出 ERROR {Starting NFS quotas: Cannot register service: RPC: Timed out rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp). [FAILED]} 用于 rquotad 守护进程。您可以通过在过滤表的 INPUT 或 OUTPUT 链的底部)

   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,你可以试试 iptables -S filename )

   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 服务时,它会吐出 ERROR {Starting NFS quotas: Cannot register service: RPC: Timed out rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp). [FAILED]} 用于 rquotad 守护进程。您可以通过在过滤表的 INPUT 或 OUTPUT 链的底部)

   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

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

   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 延迟挂载)

   ls /net/ip-addr-nfs-server

【讨论】:

  • 如果服务器禁用了 NFSv3,ls /net/ip-addr-nfs-server 命令可能不起作用。自动挂载程序使用showmount 来确定服务器是否正在导出 NFS 文件夹,并且无法通过这种方式访问​​纯 NFSv4 服务器,因为 showmount 将报告 RPC: Program not registered,从而阻止 autofs 显示虚拟 /net 目录下的任何内容。
【解决方案2】:

如果您只需要 NFS 版本 4(已经有 10 多年的历史了),那么您不需要付出@Sathish 的回答中描述的所有努力。只需确保 TCP 端口 2049 已打开服务器的防火墙,并且客户端的防火墙允许出站流量到服务器上的端口 2049。

CentOS 5(也很旧)有一个很好的 explanation 说明为什么 NFSv4 比 v3 和 v2 更适合防火墙。

【讨论】:

  • 这就是我要找的!谢谢!
猜你喜欢
  • 1970-01-01
  • 2017-07-21
  • 2011-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
相关资源
最近更新 更多