Como desabilitar o acesso do convidado QEMU às portas do host

0

Estou usando o seguinte comando para executar uma VM do QEMU:

qemu-system-x86_64 -enable-kvm -m 1024 -smp 2 -hda disk.qcow2

Por padrão, o sistema operacional convidado tem acesso à Internet, mas também pode acessar portas abertas no sistema operacional host. Como posso impedir que o sistema operacional convidado acesse as portas do host (mas sem limitar seu acesso à Internet)?

    
por Tim McLean 27.12.2015 / 04:13

1 resposta

1

Isso parece um pouco problemático se você não tiver experiência com manipulação avançada de iptables e uma visão geral de como o Linux filtra o tráfego para processos locais.

No seu modo, o qemu executa um NAT emulado: todas as chamadas para o NIC do guest serão traduzidas como chamadas socket / connect / send / recv pelo próprio processo qemu. Isso significa que as conexões são feitas pela própria máquina, a partir de 127.0.0.1. Neste ponto, você pode executar o qemu como outro usuário e filtrar esse usuário adicionando uma correspondência owner :

iptables -I OUTPUT -o lo -m owner --uid-owner username -m multiport --dports ports -j DROP

em que username é o nome do usuário que você deseja filtrar e ports é uma lista de portas separadas por vírgulas que você deseja desativar para essa máquina. Para executar o qemu como outro usuário, você precisa executá-lo por meio de ferramentas como sudo ou efetuando login como o usuário com su ou login .

Sem isso, você acaba se filtrando, por isso, se você adicionar uma regra geral para filtrar portas, também será impedido de acessar essas portas.

Outra maneira é mudar a maneira como o qemu faz a rede. Uma boa maneira de filtrar o tráfego é vincular o qemu ao dispositivo de ethernet virtual:

  • Ativar o encaminhamento de pacotes.

  • Instale tunctl , adicione interface de rede virtual cujo proprietário é você:

tunctl -u yourname -t qemu

(lembre-se de adicionar este comando a algo como rc.local para torná-lo permanente)

  • Configure a interface qemu (use ip / ifconfig ou outra ferramenta fornecida pelo SO) para atribuir uma sub-rede livre / 24 a ela. Essa sub-rede também precisa ser definida no sistema operacional convidado. Em seguida, execute o qemu com -net tap,ifname=qemu,script=off . Configure a rede do sistema operacional convidado novamente.

Em seguida, você pode filtrar facilmente o tráfego do sistema operacional convidado, que é representado pela interface virtual qemu :

iptables -I FORWARD -i qemu -m multiport --dports ports -j DROP

deve funcionar.

Mas o NAT parou de funcionar. Se você precisar fazer o NAT funcionar novamente, você deve adicionar uma regra que corrigirá os endereços IP da sua máquina. Se você tem eth0 interface para onde vai todo o seu tráfego, você ativa o NAT para ele:

iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
    
por 27.12.2015 / 07:11