nfs不用关闭防火墙可以正常使用的配置好像我还不会,这里帖一个网友的文章看看一下:
重新设置防火墙,包括iptables与TCP_Wrappers,因为激活了portmap,所以port 111必须提供出去.因此在iptables rules中,要增加:
iptables -A INPUT -p TCP --dport 111 -j ACCEPT
iptables -A INPUT -p UDP --dport 111 -j ACCEPT
如果还不行,那就是TCP_Wrappers的问题,检查/etc/hosts.deny,如果有一行是:
ALL: ALL: deny
那就必须在/etc/hosts.allow中增加:
portmap: ALL: allow
如果我们的NFS针对内部网络开发,对于外部网络只对学术网络开发(140.0.0.0/8),可以:
iptables -A INPUT -i eth0 -p TCP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 192.168.0.0/24 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p TCP -s 140.0.0.0/8 --dport 111 -j ACCEPT
iptables -A INPUT -i eth0 -p UDP -s 140.0.0.0/8 --dport 111 -j ACCEPT
还可以使用TCP_Wrappers,在/etc/hosts.allow里面规定连上 NFS 主机的主机 IP 与名称,例如
#vi /.etc/hosts.allow
portmap: 192.168.0.0/255.255.255.0 :allow
portmap: 140.113.23.23 :allow
portmap: .sdu.edu.cn :allow
配置一个NFS服务器和防火墙
版本:红帽企业Linux 4
现象:
NFS依赖portmap分配它监听的端口。这些端口是动态分配的,所以每次NFS重启后,端口都会改变。这使得在只允许访问系统指定端口的防火墙后运行一个NFS服务器变得困难。
解决:
第一步是分配一个永久端口号给每个NFS服务(rquotad, mountd, statd, and lockd)。因为它们能使用任何高于1024的没有被使用的端口,建议你首先查看/etc/services文件来找到一个有效的没有使用的端口范围。下面的例子使用10000-10005。
这些端口大部分在/etc/sysconfig/nfs文件里被配置。如果它不存在就创建它。它看起来像这样:
# NFS port numbers
STATD_PORT=10002
STATD_OUTGOING_PORT=10003
MOUNTD_PORT=10004
RQUOTAD_PORT=10005
lockd服务和其他服务配置不同,因为它是一个核心模块。要设置lockd使用的端口,在/etc/sysconfig/nfs文件里添加这些选项:
LOCKD_UDPPORT=30001
LOCKD_TCPPORT=30001
这里"30001"可以被替换成任何可用并且可以被分配使用的端口。
做完这些配置改变后,你可以用命令 rpcinfo -p 来查看端口分配情况:
# rpcinfo -p localhost
program vers proto port
100000 2 tcp 111 portmapper
100000 2 udp 111 portmapper
100021 1 udp 10001 nlockmgr
100021 3 udp 10001 nlockmgr
100021 4 udp 10001 nlockmgr
100021 1 tcp 10000 nlockmgr
100021 3 tcp 10000 nlockmgr
100021 4 tcp 10000 nlockmgr
100024 1 udp 10002 status
100024 1 tcp 10002 status
100011 1 udp 10005 rquotad
100011 2 udp 10005 rquotad
100011 1 tcp 10005 rquotad
100011 2 tcp 10005 rquotad
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100005 1 udp 10004 mountd
100005 1 tcp 10004 mountd
100005 2 udp 10004 mountd
100005 2 tcp 10004 mountd
100005 3 udp 10004 mountd
100005 3 tcp 10004 mountd
这样,当NFS重启后端口将会保留。下面是在防火墙上需要被打开的端口列表:
* 111: portmap (tcp/udp)
* 2049: nfs (tcp/udp)
* 10000: example lockd (tcp)
* 10001: example lockd (udp)
* 10002: example statd/status (tcp/udp)
* 10003: example statd/status outgoing (tcp/udp)
* 10004: example mountd (tcp/udp)
* 10005: example rquotad (tcp/udp)
你现在可以在防火墙上打开这些端口,来允许远方的客户端挂载服务器上的共享输出了。如果你使用iptables,可以用下面的命令来增加输入/输出规则,来允许访问这些端口。注意这只是一个例子,你的防火墙规则可能不一样:
# iptables -A INPUT -p tcp -m tcp --dport 111 -j ACCEPT
# iptables -A INPUT -p udp -m udp --dport 111 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT
# iptables -A INPUT -p udp -m udp --dport 2049 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT
# iptables -A INPUT -p udp -m udp --dport 10001 -j ACCEPT
# iptables -A INPUT -p tcp -m tcp --dport 10002:10005 -j ACCEPT
# iptables -A INPUT -p udp -m udp --dport 10002:10005 -j ACCEPT
# iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A INPUT -j REJECT --reject-with icmp-port-unreachable
# iptables -A OUTPUT -p tcp -m tcp --dport 111 -j ACCEPT
# iptables -A OUTPUT -p udp -m udp --dport 111 -j ACCEPT
# iptables -A OUTPUT -p tcp -m tcp --dport 2049 -j ACCEPT
# iptables -A OUTPUT -p udp -m udp --dport 2049 -j ACCEPT
# iptables -A OUTPUT -p tcp -m tcp --dport 10000 -j ACCEPT
# iptables -A OUTPUT -p udp -m udp --dport 10001 -j ACCEPT
# iptables -A OUTPUT -p tcp -m tcp --dport 10002:10005 -j ACCEPT
# iptables -A OUTPUT -p udp -m udp --dport 10002:10005 -j ACCEPT
# iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# iptables -A OUTPUT -j REJECT --reject-with icmp-port-unreachable
注意:没有指明用tcp选项的挂载请求会缺省使用udp。