一、NFS 需要开放的端口
| 服务 | 端口 | 协议 | 说明 |
|---|---|---|---|
| nfs | 2049 | TCP/UDP | NFS 主服务 |
| portmapper | 111 | TCP/UDP | RPC 端口映射 |
| mountd | 892 | TCP/UDP | 挂载守护进程(需固定) |
| lockd | 32803 | TCP | NFS 锁管理(TCP) |
| lockd | 32769 | UDP | NFS 锁管理(UDP) |
| statd | 662 | TCP/UDP | 状态监控 |
| rquotad | 875 | TCP/UDP | 磁盘配额 |
注意:mountd、lockd、statd 需要先在 NFS 配置中固定端口(参考上一节)
二、firewalld 配置(推荐)
方法1:直接开放端口(最常用)
# 开放 NFS 相关端口
firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --permanent --add-port=111/udp
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --permanent --add-port=2049/udp
firewall-cmd --permanent --add-port=892/tcp
firewall-cmd --permanent --add-port=892/udp
firewall-cmd --permanent --add-port=662/tcp
firewall-cmd --permanent --add-port=662/udp
firewall-cmd --permanent --add-port=875/tcp
firewall-cmd --permanent --add-port=875/udp
firewall-cmd --permanent --add-port=32803/tcp
firewall-cmd --permanent --add-port=32769/udp
# 重新加载
firewall-cmd --reload
# 查看已开放端口
firewall-cmd --list-ports
方法2:使用服务模板(如果存在)
# 查看是否有 nfs 服务模板
firewall-cmd --get-services | grep nfs
# 如果有,直接添加服务
firewall-cmd --permanent --add-service=nfs
firewall-cmd --permanent --add-service=rpc-bind
firewall-cmd --permanent --add-service=mountd
firewall-cmd --reload
方法3:限制特定来源 IP(更安全)
# 只允许特定网段访问 NFS
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="2049" accept'
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="udp" port="2049" accept'
# ... 其他端口同理
firewall-cmd --reload
三、iptables 配置
方法1:命令行添加规则
# 开放 NFS 端口
iptables -A INPUT -p tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp --dport 2049 -j ACCEPT
iptables -A INPUT -p udp --dport 2049 -j ACCEPT
iptables -A INPUT -p tcp --dport 892 -j ACCEPT
iptables -A INPUT -p udp --dport 892 -j ACCEPT
iptables -A INPUT -p tcp --dport 662 -j ACCEPT
iptables -A INPUT -p udp --dport 662 -j ACCEPT
iptables -A INPUT -p tcp --dport 875 -j ACCEPT
iptables -A INPUT -p udp --dport 875 -j ACCEPT
iptables -A INPUT -p tcp --dport 32803 -j ACCEPT
iptables -A INPUT -p udp --dport 32769 -j ACCEPT
# 保存规则
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables
方法2:限制来源 IP
# 只允许 192.168.1.0/24 网段访问
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 2049 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p udp --dport 2049 -j ACCEPT
# 其他端口同理...
# 拒绝其他来源
iptables -A INPUT -p tcp --dport 2049 -j DROP
方法3:写入配置文件
编辑 /etc/sysconfig/iptables:
# 在合适位置添加
-A INPUT -p tcp -m tcp --dport 111 -j ACCEPT
-A INPUT -p udp -m udp --dport 111 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT
-A INPUT -p udp -m udp --dport 2049 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 892 -j ACCEPT
-A INPUT -p udp -m udp --dport 892 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 662 -j ACCEPT
-A INPUT -p udp -m udp --dport 662 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 875 -j ACCEPT
-A INPUT -p udp -m udp --dport 875 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 32803 -j ACCEPT
-A INPUT -p udp -m udp --dport 32769 -j ACCEPT
四、快速脚本(一键配置)
firewalld 脚本
#!/bin/bash
# open_nfs_firewalld.sh
ports=(111/tcp 111/udp 2049/tcp 2049/udp 892/tcp 892/udp 662/tcp 662/udp 875/tcp 875/udp 32803/tcp 32769/udp)
for port in "${ports[@]}"; do
firewall-cmd --permanent --add-port=$port
done
firewall-cmd --reload
echo "NFS 端口已开放:"
firewall-cmd --list-ports
iptables 脚本
#!/bin/bash
# open_nfs_iptables.sh
ports=(111 2049 892 662 875 32803 32769)
for port in "${ports[@]}"; do
iptables -A INPUT -p tcp --dport $port -j ACCEPT
iptables -A INPUT -p udp --dport $port -j ACCEPT
done
service iptables save
iptables -L -n | grep -E "111|2049|892|662|875|32803|32769"
五、验证端口是否开放
# 查看监听端口
netstat -tulnp | grep -E "111|2049|892|662|875|32803|32769"
# 远程测试(从客户端)
telnet 服务器IP 2049
nc -v 服务器IP 2049
# 查看防火墙规则
firewall-cmd --list-ports # firewalld
iptables -L -n | grep ACCEPT | grep -E "111|2049" # iptables
六、注意事项
- 先固定 NFS 端口,再开放防火墙
- 重启 NFS 服务后检查端口是否生效
- 生产环境建议限制来源 IP,不要开放给所有人
- 客户端也要检查自身防火墙是否阻挡
七、一句话总结
firewalld 用 firewall-cmd --add-port=端口/协议,iptables 用 iptables -A INPUT -p 协议 --dport 端口 -j ACCEPT,需要开放 111、2049 及已固定的 mountd、lockd 等端口。
发表回复