我正在运行 Ubuntu 11.10 - 设置 NFS 以在许多其他服务器之间共享目录。防火墙上需要打开哪些端口?
答案1
$ rpcinfo -p | grep nfs
NFS 服务器的端口 111 (TCP 和 UDP) 和 2049 (TCP 和 UDP)。
还有用于集群和客户端状态的端口(前者为端口 1110 TCP,后者为端口 1110 UDP)以及用于 NFS 锁管理器的端口(端口 4045 TCP 和 UDP)。只有您可以根据跨网关所需的服务来确定需要允许哪些端口。
答案2
除了 portmapper 的 111 和 nfs 的 2049 之外,您还需要允许 mountd 端口以及可能的 rquotad、lockd 和 statd,所有这些都可以是动态的。这本优秀的 NFS 安全指南建议更改启动脚本和内核模块配置以强制它们使用静态端口。
答案3
我在这个页面上找到了解决我的问题的有用说明,但没有简单易行的食谱。所以这是我的食谱。
TL;DR - 修复后需要允许 nfs 端口(111、2049)和 mountd 端口。
指示:
为 mountd 设置固定端口
gksudo gedit /etc/default/nfs-kernel-server
- 注释掉这一行:
RPCMOUNTDOPTS=--manage-gids
- 添加这个:
RPCMOUNTDOPTS="--port 33333"
或任何其他端口号。
现在尝试使用以下命令重置 nfs:
sudo service nfs-kernel-server restart
并测试是否有帮助:
rpcinfo -p | grep "tcp.*mountd"
对我来说这还不够,但完全重启就可以解决问题。
(信用)
设置防火墙(ufw)
(1)删除旧规则,手动执行此操作,如果这是防火墙的唯一用途,则重置:
# WARNING: Don't copy & paste this if you don't understand what it does:
# sudo ufw reset
# sudo ufw enable
(2)添加 nfs 和 mountd 端口
sudo ufw allow in from 10.0.0.1/20 to any port 111
sudo ufw allow in from 10.0.0.1/20 to any port 2049
sudo ufw allow in from 10.0.0.1/20 to any port 33333
(更改为您的本地 IP 或any
将 更改为“ ” 10.0.0.1/20
)
就是这样了。
答案4
使用 FERM 可以使用反引号从 rpcinfo 获取端口,例如:
服务器:
proto tcp {saddr ($CLIENT) {
dport (`rpcinfo -p | perl -e 'while(<>){/\s+\d+\s+\d\s+(?:tcp)\s+(\d+)/ and $ports{$1}=1}; $, = " "; print sort(keys(%ports)),"\n"'`) ACCEPT; # NFS
}}
proto udp {saddr ($CLIENT) {
dport (`rpcinfo -p | perl -e 'while(<>){/\s+\d+\s+\d\s+(?:udp)\s+(\d+)/ and $ports{$1}=1}; $, = " "; print sort(keys(%ports)),"\n"'`) ACCEPT; # NFS
}}
客户:
proto udp {saddr ($SERVER) {ACCEPT;}} # NFS
(如果您只打算使用 TCP,那么您只需要部分proto tcp
)。