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