Filtre pacotes com iptables em uma interface tap

Filtre pacotes com iptables em uma interface tap

Estou tentando escrever regras de firewall para impedir que uma máquina convidada acesse a Internet. O servidor (servidor Ubuntu 22.0, usando KVM) possui uma conexão física (enp34s0), que está conectada ao roteador, uma interface bridge (br0) e o convidado está usando um dispositivo tap (vnet0) que está conectado à mesma rede com br0. Qualquer regra que tentei aplicar no vnet0 não funcionou.

Por exemplo, tentei impedir o ping com os seguintes 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

ainda consigo enviar pings de/para o convidado. (também tentei com -p tcp --dport 443 para evitar https) Estou fazendo algo errado? Não consigo descobrir se está relacionado ao fato de ser um dispositivo TAP e não encontrei nada relacionado na web.

Responder1

Se você adicionar uma regra de registro à sua FORWARDtabela para capturar qualquer tráfego ICMP...

iptables -I FORWARD -p icmp -j LOG --log-prefix 'FORWARD_ICMP '

...você verá que a interface de entrada é a ponte, não o 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 

Isso significa que suas regras -i vnet0nunca serão iguais.

Você pode ver o dispositivo TAP no PHYSINatributo. Podemos combinar isso usando o physdevmódulo, assim:

iptables -A FORWARD -m physdev --physdev-in vnet1 -j DROP

(Há também uma correspondência --physdev-out se você precisar combinar o tráfego na outra direção.)

informação relacionada