我的 KVM 客户机采用标准 br0 桥接设置:
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 是为其他流量保留的,但客人可以简单地更改其 IP 来连接它。
我想要实现的是放弃全部一旦访客尝试更改,流量就会流向主机/外部/其他访客任何一个它的 IP 地址或 MAC 地址(试图加入其他网络/欺骗另一个访客)
我尝试了许多接口(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 中没有其他规则。我是否遗漏了什么 - 或者我是否应该考虑尝试以其他方式实现这一点?
答案1
我尝试为您的问题制作一组简单的 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
答案2
据我所知,你无法使用 iptables 完成一些需要做的事情。你需要在网桥级别进行过滤。你应该看看ebtables- 它就像桥梁的 iptables。