Estoy intentando escribir reglas de firewall para evitar que una máquina invitada acceda a Internet. El servidor (servidor Ubuntu 22.0, que usa KVM) tiene una conexión física (enp34s0), que está conectada al enrutador, una interfaz puente (br0) y el invitado está usando un dispositivo tap (vnet0) que está conectado a la misma red con hermano0. Cualquier regla que intenté aplicar en vnet0 no funcionó.
Por ejemplo, intenté evitar el ping con los siguientes comandos:
iptables -I FORWARD -i vnet0 -o br0 -p icmp -j DROP
iptables -I FORWARD -o vnet0 -i br0 -p icmp -j DROP
iptables -I FORWARD -i vnet0 -o enp34s0 -p icmp -j DROP
iptables -I FORWARD -o enp34s0 -i br0 -p icmp -j DROP
todavía puedo enviar pings desde/hacia el invitado. (También probé con -p tcp --dport 443 para evitar https) ¿Estoy haciendo algo mal? No puedo determinar si está relacionado con el hecho de que es un dispositivo TAP y no encontré nada relacionado en la web.
Respuesta1
Si agrega una regla de registro a su FORWARD
tabla para capturar cualquier tráfico ICMP...
iptables -I FORWARD -p icmp -j LOG --log-prefix 'FORWARD_ICMP '
...verás que la interfaz de entrada es el puente, no el dispositivo TAP:
Sep 09 19:19:20 fizzgig kernel: FORWARD_ICMP IN=virbr0 OUT=wlp0s20f3
PHYSIN=vnet1 MAC=52:54:00:f7:70:2a:52:54:00:18:f8:12:08:00 SRC=192.168.122.210
DST=8.8.8.8 LEN=84 TOS=0x00 PREC=0x00 TTL=63 ID=59668 DF PROTO=ICMP TYPE=8
CODE=0 ID=5 SEQ=1
Esto significa que tus reglas -i vnet0
nunca coincidirán.
Puedes ver el dispositivo TAP en el PHYSIN
atributo. Podemos hacer coincidir esto usando el physdev
módulo, así:
iptables -A FORWARD -m physdev --physdev-in vnet1 -j DROP
(También existe una coincidencia --physdev-out si necesita hacer coincidir el tráfico en la otra dirección).