在 KVM 主机上配置 IPTables 以阻止来宾桥接流量

在 KVM 主机上配置 IPTables 以阻止来宾桥接流量

我正在做一个论文研究项目,在弄清楚如何iptables(在 KVM 主机上运行)阻止发往桥接KVM 客户机。我无法获取iptables条目(粘贴在下面)来阻止往返于 VM 的流量。

实际上,我希望我的主机系统充当这些客户虚拟机的防火墙,目前,我想通过简单地丢弃发往特定虚拟机的所有数据包来测试此功能。在不久的将来,我还想实现更精细的控制,甚至使用代理。同样,这应该完全在主机级别发生,并且不是在宾客 (GUEST) 层面。

我正在运行 CentOS 6,并且根据我写的另一个问题:使用一个网卡为 Linux KVM 创建多个接口,我配置了以下接口:

eth0
br0
tap0

以下是每个接口的网络设置脚本:

eth0的配置:

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的配置:

DEVICE="br0"
TYPE="Bridge"
ONBOOT="yes"
BOOTPROTO="dhcp"
DELAY=0

tap0的配置:

DEVICE="tap0"
TYPE="Tap"
BRIDGE="br0"
ONBOOT="yes"

我正在运行 CentOS 6 VM,并将其配置为使用tap0桥接接口。VM 上的网络运行正常。未对主机系统进行任何其他更改。

iptables以下是我添加到链中的不起作用的规则FORWARD值得注意的是,我还不是一个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 

不幸的是,这并不能阻止流量。我不明白为什么这不起作用。

更新:2014年11月25日:距离我上次更新已经有一段时间了。事实证明,iptablesphysdev插件,这实际上是我在研究中成功使用的,并且比更灵活ebtables

答案1

确保您了解此处涉及的网络基础知识。网桥是一种交换机,在第 2 层运行。您的iptables规则适用于第 3 层,不会在此级别传递。

查看ebtables并指定第 2 层规则 - 或者 - 完全禁用网桥的使用并转到路由设置,其中所有流量都通过第 3 层的主机。不确定后一种选项是否可以使用 Libvirt/KVM。

答案2

如果你这样做:

echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables

它将在网桥上启用 netfilter,然后您可以在 FORWARD 链上设置 iptables 规则来影响通过网桥接口往返于虚拟机的数据包。

为了使其在重启时永久生效:

编辑/etc/sysctl.conf并设置net.bridge.bridge-nf-call-iptables = 1

https://wiki.libvirt.org/page/Net.bridge.bridge-nf-call_and_sysctl.conf

尽管 wiki 上说这样做不可取,但我已经这样做了很多年。它允许我在 FORWARD 链上设置黑名单和其他 iptables/ipset 规则,这些规则对所有虚拟机都有效。它在中等负载的服务器上运行良好。

相关内容