iptables的nfs配置 (绝对原创)

发布于 2022-07-21 14:59:10 字数 1508 浏览 9 评论 0

nfs(准确地讲,应该是rpc)使用动态端口,事先无法确定,所以传统上都是把需要连接NFS server的网段加到iptables的信任网络里面。但是,如果我们有办法控制iptables的NFS规则,为什么不用呢?

这里,关键是rcpinfo -p命令。这个命令会提取出sunrpc所需的端口信息。接下来,用awk把端口和协议信息剥下来,然后临时生成iptables的命令就可以了。

这个作法是完全可以的,但是它的缺点是当你重新启动了nfs服务之后,整个端口配置全部乱了,而重新运行脚本固然可以打开防火墙的端口,但是原来的端口还占着位置。如果你需要频繁地开关nfs服务的话,最后iptables会打开一大堆垃圾端口。因此,我们得创建一个chain,在chain里面开启端口,启动端口的时候,定义一条rule,叫filter执行nfs的chain,关闭端口的时候,把这个chain清空。

最后,怎样进到/etc/init.d/nfs脚本里面。这里,我采用拦截exit的办法处理。exit是脚本的退出点,无论何时系统执行exit命令,脚本都退出了,因此该开的端口也开了,该关的端口也关了。所以我定义一个函数, tixe (咱们也尊重Unix的传统,仿照esac, fi搞一个),让它运行定制端口的命令,然后执行exit。

好,具体的脚本如下。

-------------------------------------------------------------------
## filename: /root/firewall/nfs.sh

iptables -L NFS &>/dev/null || iptables -N NFS
iptables -F NFS
rpcinfo -p | sed '1d' | awk '{system("iptables -I NFS -p " $3 " --dport " $4 " -j ACCEPT")}'
iptables -L INPUT | grep '^NFS' || iptables -I INPUT -d localhost -j NFS
-------------------------------------------------------------------

接着,修改/etc/init.d/nfs

先把所有的exit改成tixe。然后,定义一个tixe函数。

----------------------------------
function tixe() {
      . /root/firewall/nfs.sh
      exit $1
}
----------------------------------

以上配置在RHEL 4上实验成功。希望能对大家有所帮助。

[ 本帖最后由 shhgs 于 2006-5-14 20:55 编辑 ]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文