咨询一个 kvm 部署的防火墙规则问题

2017-02-27 16:03:38 +08:00
 webjin1
我用 iptables 清空了防火墙默认表里面的规则,并且保存了。
但是只要开启之前的那些默认规则又还原出现了配置的 NAT 表规则不会清空,排查了很久是 libvirtd 服务引起的 然后我又 iptables -F ,只要重启 libvirtd 服务那些默认规则又出现了。
于是我写开机脚本清空默认规则,重启还是复现。
主要是呀的 FORWARD 链第 2,3 条规则阻碍我的 NAT 网络的虚拟。
谷歌了一些只找到了这个相关 https://libvirt.org/firewall.html
但是他没说永久怎么去掉那些规则。
1727 次点击
所在节点    问与答
5 条回复
pekingzcc
2017-02-27 17:05:05 +08:00
libvirt 支持网络虚拟化功能 ,这些功能的实现就是基于 iptables 来做的,所以不管你有没有写开机脚本清空 iptables 规则,只要重启 libvirt ,就会增加这些规则。
比较纳闷为什么 实现 NAT 网络会跟 FORWARD 链第 2,3 条规则 冲突呢,我看第 2,3 条规则就是跟 libvirt 创建的 virbr0 网桥相关啊?楼主是用 virbr0 这个网桥实现 nat 吗?
webjin1
2017-02-27 17:31:56 +08:00
@pekingzcc 是的,实现 nat ,无法帮我转发数据包出去,去掉这 2 条规则,我内网的虚拟机就可以与外界通信。 那你知道怎么去修改那些默认的配置吗?或者清空他。
pekingzcc
2017-02-27 21:50:35 +08:00
我不知道怎么去修改这些默认的配置,但是可以提供给你一些思路:

1 ,你用 libvirt 创建的虚拟机如果没有特殊配置的话网络类型默认应该就是 nat ,这种情况,如果配置正确的话,虚拟机可以联通外界,但是外界无法主动联通你的虚拟机。
2 ,我猜测楼主如果是想实现外界直接联通虚拟机的功能。这种情况的话我暂时想到两种方法:一种是网络模式使用 bridge 模式,另一种方法是进行端口映射,将虚拟机的数据映射到宿主机的端口,但还是建议使用第一种方式,相对简单点。
webjin1
2017-02-28 09:04:40 +08:00
@pekingzcc 不是桥接配置公网 IP ,而是 NAT ,我 NAT 的规则做好了。 FORWARD 链第 2,3 条规则阻碍 NAT 下的虚拟机无法 ping 通外面。好像 icmp-port-unreachable 这个只是 ping 协议的过滤。我等下再看看可以上网浏览网页吗?
webjin1
2017-02-28 13:38:29 +08:00
@pekingzcc 我找到开机启动不让他还原的解决方案了。、
编辑文件 /etc/rc.local
sleep 1m ###重点在这里
iptables -F
iptables -X
iptables -t mangle -F
iptables -t raw -F
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o br0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 52003 -j DNAT --to-destination 192.168.0.3:22

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/343558

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX