firewalld 和 iptables 开放 NFS 端口配置

一、NFS 需要开放的端口

服务端口协议说明
nfs2049TCP/UDPNFS 主服务
portmapper111TCP/UDPRPC 端口映射
mountd892TCP/UDP挂载守护进程(需固定)
lockd32803TCPNFS 锁管理(TCP)
lockd32769UDPNFS 锁管理(UDP)
statd662TCP/UDP状态监控
rquotad875TCP/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

六、注意事项

  1. 先固定 NFS 端口,再开放防火墙
  2. 重启 NFS 服务后检查端口是否生效
  3. 生产环境建议限制来源 IP,不要开放给所有人
  4. 客户端也要检查自身防火墙是否阻挡

七、一句话总结

firewalld 用 firewall-cmd --add-port=端口/协议,iptables 用 iptables -A INPUT -p 协议 --dport 端口 -j ACCEPT,需要开放 111、2049 及已固定的 mountd、lockd 等端口。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注