У меня есть гости 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 нет. Я что-то упускаю - или мне стоит подумать о том, чтобы попытаться добиться этого другим способом?
Я попытался создать шаблон для простого набора правил 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
Насколько я понимаю, вы просто не можете делать некоторые из вещей, которые вам нужно делать с iptables. Вам нужна фильтрация на уровне моста. Вам, наверное, стоит взглянуть на ebtables - это как iptables для мостов.
Руководство: http://ebtables.sourceforge.net/misc/ebtables-man.html