我正在研究一个论文研究项目,而且我很难弄清楚如何让iptables (在KVM主机上运行)阻止目标为BRIDGED KVM guest 虚拟机的stream量(或者说,操纵stream量)。 我无法获得iptables条目(粘贴在下面)来阻止进出虚拟机的stream量。
实际上,我希望我的主机系统充当这些访客虚拟机的防火墙,并且暂时我想通过简单地删除所有发往特定虚拟机的数据包来testing这个function。 在不久的将来,我也想实施更细化的控制,甚至有代理参与。 再次,这应该完全发生在主机层面,而不是在客户层面。
我正在运行CentOS 6,并基于我写的另一个问题: 使用一个网卡为Linux KVM创build多个接口 ,我configuration了以下接口:
eth0 br0 tap0
以下是我的每个接口的networking设置脚本:
eth0的configuration:
DEVICE="eth0" BOOTPROTO="none" NM_CONTROLLED="no" ONBOOT=yes TYPE="Ethernet" UUID="<<UUID-HERE>>" HWADDR=<<MAC-ADDR-HERE>> DEFROUTE=yes PEERDNS=yes PEERROUTES=yes IPV4_FAILURE_FATAL=yes IPV6INIT=no NAME="System eth0" BRIDGE="br0"
br0的configuration:
DEVICE="br0" TYPE="Bridge" ONBOOT="yes" BOOTPROTO="dhcp" DELAY=0
tap0的configuration:
DEVICE="tap0" TYPE="Tap" BRIDGE="br0" ONBOOT="yes"
我运行了一个CentOS 6虚拟机,并configuration为使用tap0桥接接口。 虚拟机上的networking连接正常。 主机系统没有其他变化。
下面是我添加到FORWARD链中的无法运行的iptables规则( 值得注意的是,我并不是iptables专家 )。
sudo iptables -I FORWARD -i any -o tap0 -j DROP sudo iptables -I FORWARD -i tap0 -o any -j DROP
运行这些命令后, FORWARD表看起来像这样:
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 0 0 DROP all -- tap0 any anywhere anywhere 0 0 DROP all -- any tap0 anywhere anywhere 0 0 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
不幸的是,这并没有阻止stream量。 我不明白为什么这不起作用。
更新:2014年11月25日:这是我上次更新之后的一段时间。 事实certificate, iptables有physdev插件,这实际上是我在研究中成功使用的,并且比ebtables更灵活。
确保您了解这里涉及的networking基础知识。 一个网桥是一个交换机,在第二层运行。你的iptables规则适用于第三层,不会在这个层次传递。
研究ebtables并在那里指定第二层规则 – 或者 – 完全禁止使用网桥,并转移到路由设置,其中所有stream量都通过第3层的主机。不知道使用Libvirt / KVM后面的选项是否可行。