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/ifconfigou 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