Estou trabalhando em um projeto de pesquisa de tese, e estou tendo alguma dificuldade em descobrir como obter iptables
(executando no host KVM) para bloquear o tráfego (ou melhor, manipular o tráfego) destinado a um BRIDGED Convidado do KVM. Não consigo obter as entradas iptables
(coladas abaixo) para bloquear o tráfego de e para as VMs.
Efetivamente, gostaria que meu sistema host atuasse como um firewall para essas VMs convidadas e, por enquanto, gostaria de testar esse recurso simplesmente descartando todos os pacotes destinados a uma VM específica. Em um futuro não tão distante, eu também gostaria de implementar controles mais granulares, e até mesmo ter um proxy envolvido. Novamente, isso deve acontecer inteiramente no nível do HOST e não no nível do CONVIDADO.
Estou executando o CentOS 6 e, com base em outra pergunta que escrevi: Use um NIC para criar várias interfaces para o Linux KVM , eu tenho as seguintes interfaces configuradas:
eth0
br0
tap0
Abaixo estão os meus scripts de configuração de rede para cada interface:
Configuração de eth0
:
DEVICE="eth0"
BOOTPROTO="none"
NM_CONTROLLED="no"
ONBOOT=yes
TYPE="Ethernet"
UUID="<<UUID-HERE>>"
HWADDR=<<MAC-ADDR-HERE>>
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="System eth0"
BRIDGE="br0"
Configuração de br0
:
DEVICE="br0"
TYPE="Bridge"
ONBOOT="yes"
BOOTPROTO="dhcp"
DELAY=0
Configuração de tap0
:
DEVICE="tap0"
TYPE="Tap"
BRIDGE="br0"
ONBOOT="yes"
Eu tenho uma VM do CentOS 6 em execução e ela está configurada para utilizar a interface tap0
em ponte. Rede na VM está funcionando corretamente. Nenhuma outra alteração no sistema host foi feita.
Abaixo estão as regras iptables
não funcionais que adicionei à corrente FORWARD
( vale a pena notar que não sou um grande especialista em iptables
yet ).
sudo iptables -I FORWARD -i any -o tap0 -j DROP
sudo iptables -I FORWARD -i tap0 -o any -j DROP
Depois de executar os comandos, a tabela FORWARD
tem esta aparência:
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 DROP all -- tap0 any anywhere anywhere
0 0 DROP all -- any tap0 anywhere anywhere
0 0 REJECT all -- any any anywhere anywhere reject-with icmp-host-prohibited
Infelizmente, isso não bloqueia o tráfego. Eu não entendo porque isso não funcionaria.
ATUALIZAÇÃO: 25/11/2014: Já faz um tempo desde a última atualização. Acontece que iptables
tem o physdev
plugin, que é realmente o que eu uso com sucesso na minha pesquisa e é mais flexível que ebtables
.