QEMU: Como desativar o acesso de convidados à Internet pública, mas preservar seu acesso à unidade de rede local (samba)?

1

Estou usando QEMU/KVM para virtualização de várias máquinas. Para compartilhar arquivos entre os sistemas guest e o host, executo um Samba -server no host que fornece uma unidade de rede para as máquinas convidadas.

Todos os convidados recebem sua rede via ponte padrão QEMU virbr0 .

A minha pergunta agora é:

Como posso desativar o acesso à Internet pública para todos os convidados sem bloquear o acesso deles à unidade de rede Samba ?

    
por Dave 22.01.2018 / 15:25

1 resposta

1

Recentemente, precisei bloquear o acesso à Internet em uma máquina virtual (kvm-qemu + virt-manager).

Ao iniciar a máquina virtual, você se encontrará com as seguintes regras de iptables em seu host (se ainda não tiver algumas):

$ iptables -S -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT -A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT -A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT -A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT -A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT -A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT -A FORWARD -i virbr0 -o virbr0 -j ACCEPT -A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable -A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable -A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT

Esta configuração permite que a máquina virtual acesse a internet (regras FORWARD). Então o que você quer fazer é deletar as regras do FORWARD:

$ iptables -L --list-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
2    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
3    ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
4    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     all  --  anywhere             192.168.122.0/24     ctstate RELATED,ESTABLISHED
2    ACCEPT     all  --  192.168.122.0/24     anywhere            
3    ACCEPT     all  --  anywhere             anywhere            
4    REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
5    REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootpc

$ iptables -D FORWARD 1
$ iptables -D FORWARD 2
$ iptables -D FORWARD 3
$ iptables -P FORWARD DROP

Isso deve ser suficiente para bloquear o acesso à Internet na máquina virtual. Se você é paranóico, pode bloquear a porta samba diretamente do roteador (com a interface do roteador, ou se você tiver um acesso shell a ela com o firewall da linha de comando).

Espero que isso ajude.

    
por 12.02.2018 / 19:27