如何在KVM主机上设置IPTables – iptables-persistent被忽略

我试图在运行一些KVM guest虚拟机的ubuntu 14.04.1主机上设置一些特定的IPTables规则。

该框具有多个具有多个IP地址的NIC,并且来宾根据其function使用不同的地址。

我通常使用iptables-persistent来达到这个目的,但由于某些原因,/etc/iptables/rules.v4下的规则在启动的时候并没有被加载。 当libvirt未安装时,iptables-persistent可以正常工作。

如果我运行“/etc/init.d/iptables-persistent start”,那么规则被加载,设置如我所料。 但在启动时,他们不是。 我已经尝试创build一个非常简单的rules.v4文件来debugging,但它仍然没有加载。

iptables-persistent的init符号链接存在于/etc/rc2.d/S37iptables-persistent

我已经确认ufw被禁用。 我也从/ etc / libvirt / nwfilter中删除了nwfilter规则,并且virsh nwfilter-list不显示任何条目。

任何想法还有什么可以设置这些规则,以及如何根据我的需要定制它们?

ufw状态输出

# ufw status Status: inactive 

virsh nwfilter-list输出

 # virsh nwfilter-list UUID Name ------------------------------------------------------------------ 

/etc/iptables/rules.v4的内容

 *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :LOG_AND_DROP - [0:0] -A INPUT -s 192.168.10.0/24 -i br0 -j ACCEPT -A INPUT -s 192.168.11.0/24 -i br0 -j ACCEPT -A LOG_AND_DROP -j LOG --log-prefix "iptables deny: " --log-level 7 -A LOG_AND_DROP -j DROP COMMIT 

在启动后输出iptables -L -n(不需要的结果)

 # iptables -L -n -v Chain INPUT (policy ACCEPT 12 packets, 912 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 0 0 ACCEPT udp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 0 0 ACCEPT tcp -- virbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 0 0 ACCEPT udp -- tunnelbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 0 0 ACCEPT tcp -- tunnelbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 0 0 ACCEPT udp -- tunnelbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 0 0 ACCEPT tcp -- tunnelbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 0 0 ACCEPT udp -- mgmtbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53 0 0 ACCEPT tcp -- mgmtbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53 0 0 ACCEPT udp -- mgmtbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67 0 0 ACCEPT tcp -- mgmtbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67 193 17300 ACCEPT all -- br0 * 192.168.10.0/24 0.0.0.0/0 0 0 ACCEPT all -- br0 * 192.168.11.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- * virbr0 0.0.0.0/0 192.168.122.0/24 ctstate RELATED,ESTABLISHED 0 0 ACCEPT all -- virbr0 * 192.168.122.0/24 0.0.0.0/0 0 0 ACCEPT all -- virbr0 virbr0 0.0.0.0/0 0.0.0.0/0 0 0 REJECT all -- * virbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 0 0 REJECT all -- virbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 0 0 ACCEPT all -- tunnelbr0 tunnelbr0 0.0.0.0/0 0.0.0.0/0 0 0 REJECT all -- * tunnelbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 0 0 REJECT all -- tunnelbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 0 0 ACCEPT all -- mgmtbr0 mgmtbr0 0.0.0.0/0 0.0.0.0/0 0 0 REJECT all -- * mgmtbr0 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable 0 0 REJECT all -- mgmtbr0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable Chain OUTPUT (policy ACCEPT 132 packets, 17456 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT udp -- * virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68 0 0 ACCEPT udp -- * tunnelbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68 0 0 ACCEPT udp -- * mgmtbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68 Chain LOG_AND_DROP (0 references) pkts bytes target prot opt in out source destination 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 7 prefix "iptables deny: " 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 

输出iptables -L -n -v后运行/etc/init.d/iptables-persistent start(预期结果)

 # iptables -L -n -v Chain INPUT (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 13 920 ACCEPT all -- br0 * 192.168.10.0/24 0.0.0.0/0 0 0 ACCEPT all -- br0 * 192.168.11.0/24 0.0.0.0/0 Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 8 packets, 1104 bytes) pkts bytes target prot opt in out source destination Chain LOG_AND_DROP (0 references) pkts bytes target prot opt in out source destination 0 0 LOG all -- * * 0.0.0.0/0 0.0.0.0/0 LOG flags 0 level 7 prefix "iptables deny: " 0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 

您看到的所有“额外”规则都是由libvirt守护进程添加的,以支持(并保护)虚拟机guest虚拟机的虚拟networking。 您通常不需要担心这些规则(不应该试图坚持这些规则,因为在下次启动时它们会被复制)。

同样清楚的是,所有持久性防火墙规则都已添加到防火墙中。

如果没有这个关键的`iptables'命令的“““““切换,那么在这两个事实中,

你是否在/ etc / network / interfaces中检查了“pre-up”指令,该指令可能如下所示:

 pre-up iptables-restore < /etc/iptables.rules 

Ubuntu / Debian上的另一种可能性是脚本位于/etc/network/if-pre-up.d/目录中,因此您应该列出该目录的内容:

 # ls -al /etc/network/if-pre-up.d/ 

另一种可能性是NetworkManager加载规则,您可以通过在以下目录中search防火墙/ iptables来检查:

 /etc/NetworkManager/dispatcher.d/ 

此外,请检查/ etc / init和/etc/init.d中的所有脚本以查找“iptables”和“iptables-restore”。