Linux-KVM / iptables:通过在桥上匹配ip + mac地址来防止客人欺骗?

我有一个标准的br0网桥设置我的KVM客人:

auto br0 iface br0 inet static address 192.168.1.117 netmask 255.255.255.0 network 192.168.1.1 broadcast 192.168.1.225 gateway 192.168.1.1 bridge_ports eth0 bridge_stp off bridge_fd 0 auto eth1 iface eth1 inet static address 10.0.0.117 netmask 255.255.255.0 gateway 10.0.0.1 broadcast 10.0.0.225 

eth1保留给其他stream量,但客人可以简单地改变它的IP连接到它。

我试图实现的是,一旦访客尝试更改其IP地址或MAC地址(尝试join另一个networking/欺骗另一个访客),则将所有stream量都丢弃到主机/外部/其他客户端,

我尝试了很多接口(eth0,br0,tap0,tap +),但我似乎无法得到我的规则:

 iptables -A INPUT -m physdev --physdev-in tap+ --physdev-out tap+ -s 192.168.1.205 -m mac ! --mac-source 52:54:5a:8d:77:8e -j DROP 

IP转发已启用 – iptables中没有其他规则。 我错过了什么 – 甚至应该考虑尝试以另一种方式实现这一目标?

据我所见,你不能做一些你需要做的iptables的事情。 您需要在网桥级别进行过滤。 你可能应该看看ebtables – 这就像桥梁的iptables。

手册: http : //ebtables.sourceforge.net/misc/ebtables-man.html

我试图为你的问题做一个简单的iptables规则集的模板,试试这个:

 iptables -t filter -A FORWARD -m physdev --physdev-in $LINK_FOR_THE_VM --physdev-is-bridged -j ${VMID}-out iptables -t filter -A ${VMID}-out -m mac ! --mac-source $MAC_ADDR_FOR_THE_VIRTUAL_NIC -j DROP iptables -t filter -A ${VMID}-out -s 0.0.0.0/32 -d 255.255.255.255/32 -p udp -m udp --sport 68 --dport 67 -j ACCEPT iptables -t filter -A ${VMID}-out ! -s $PERMITTED_IP_ADDR_FOR_THE_VM -j DROP iptables -t filter -A ${VMID}-out -j RETURN 

这里是一个例子:

 iptables -t filter -A FORWARD -m physdev --physdev-in vm10 --physdev-is-bridged -j 10-out iptables -t filter -A 10-out -m mac ! --mac-source 52:54:5a:8d:77:8e -j DROP iptables -t filter -A 10-out -s 0.0.0.0/32 -d 255.255.255.255/32 -p udp -m udp --sport 68 --dport 67 -j ACCEPT iptables -t filter -A 10-out ! -s 192.168.1.205 -j DROP iptables -t filter -A 10-out -j RETURN