nwfilter: Regras de firewall geradas não fazem sentido

1

Estou tentando configurar o nwfilter para o KVM, mas até agora não consegui para descobrir uma configuração de trabalho.

Configuração de rede: O dom0 (Debian 7.1, kernel 3.2.46-1, libvirt 0.9.12) é conectado via eth0, parte da sub-rede externa 192.168.17.0/24, e tem uma sub-rede adicional 192.168.128.160/28 roteada para seu endereço principal 192.168.17.125.

A sub-rede do host está configurada como bridge em virsh:

<network>
  <name>foo</name>
  <forward dev='eth0' mode='route'>
    <interface dev='eth0'/>
  </forward>
  <bridge name='foo-br0' stp='off' delay='0' />
  <ip address='192.168.128.161' netmask='255.255.255.240'>
  </ip>
</network>

O domU está configurado para usar essa ponte (IP estático configurado no DomU):

<interface type='network'>
  <source network='foo'/>
  <target dev='vnet0'/>
  <model type='virtio'/>
  <filterref filter='test-eth0'>
    <parameter name='CTRL_IP_LEARNING' value='none'/>
    <parameter name='IP' value='192.168.128.162'/>
  </filterref>
  <alias name='net0'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>

Com um filtro vazio, a conectividade está funcionando bem. Agora, se eu adicionar o exemplo de conjunto de regras sugerido na documentação ( link ), entrada O ICMP funciona (mas não de saída) e o tráfego SSH de entrada é bloqueado, junto com o DNS de saída.

As regras vinculadas produzem as seguintes cadeias de iptables:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
libvirt-host-in  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
libvirt-in  all  --  0.0.0.0/0            0.0.0.0/0           
libvirt-out  all  --  0.0.0.0/0            0.0.0.0/0           
libvirt-in-post  all  --  0.0.0.0/0            0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            192.168.128.160/28  
ACCEPT     all  --  192.168.128.160/28   0.0.0.0/0           
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain FI-vnet0 (1 references)
target     prot opt source               destination         
RETURN     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:22 state ESTABLISHED ctdir ORIGINAL
RETURN     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:80 state ESTABLISHED ctdir ORIGINAL
RETURN     icmp --  0.0.0.0/0            0.0.0.0/0            state NEW,ESTABLISHED ctdir REPLY
RETURN     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53 state NEW,ESTABLISHED ctdir REPLY
DROP       all  --  0.0.0.0/0            0.0.0.0/0           

Chain FO-vnet0 (1 references)
target     prot opt source               destination         
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22 state NEW,ESTABLISHED ctdir REPLY
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 state NEW,ESTABLISHED ctdir REPLY
ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0            state ESTABLISHED ctdir ORIGINAL
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp spt:53 state ESTABLISHED ctdir ORIGINAL
DROP       all  --  0.0.0.0/0            0.0.0.0/0           

Chain HI-vnet0 (1 references)
target     prot opt source               destination         
RETURN     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:22 state ESTABLISHED ctdir ORIGINAL
RETURN     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp spt:80 state ESTABLISHED ctdir ORIGINAL
RETURN     icmp --  0.0.0.0/0            0.0.0.0/0            state NEW,ESTABLISHED ctdir REPLY
RETURN     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53 state NEW,ESTABLISHED ctdir REPLY
DROP       all  --  0.0.0.0/0            0.0.0.0/0           

Chain libvirt-host-in (1 references)
target     prot opt source               destination         
HI-vnet0   all  --  0.0.0.0/0            0.0.0.0/0           [goto]  PHYSDEV match --physdev-in vnet0

Chain libvirt-in (1 references)
target     prot opt source               destination         
FI-vnet0   all  --  0.0.0.0/0            0.0.0.0/0           [goto]  PHYSDEV match --physdev-in vnet0

Chain libvirt-in-post (1 references)
target     prot opt source               destination         
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            PHYSDEV match --physdev-in vnet0

Chain libvirt-out (1 references)
target     prot opt source               destination         
FO-vnet0   all  --  0.0.0.0/0            0.0.0.0/0           [goto]  PHYSDEV match --physdev-out vnet0

Se eu tentar o segundo conjunto de filtros do segundo exemplo a partir do documentação ( link ), as regras de firewall resultantes fazem ainda menos sentido.

Para citar, o que deve fazer:

  • opens only TCP ports 22 and 80 of a VM's interface
  • allows the VM to send ping traffic from an interface but not let the VM be pinged on the interface
  • allows the VM to do DNS lookups (UDP towards port 53)
  • enable an ftp server (in active mode) to be run inside the VM

O que faz:

  • Abre todas as portas de entrada
  • Permite que a VM seja pingada
  • Bloqueia todo o tráfego de saída (exceto ICMP, mas suspeito que seja apenas porque a filtragem de ICMP não funciona, consulte acima)
  • Impede que um servidor ftp seja executado no modo ativo

Eu não modifiquei nenhum dos conjuntos de regras nwfilter incluídos nem qualquer outra parte da pilha de rede. Como obtenho o nwfilter para funcionar corretamente?

    
por Creshal 11.07.2013 / 11:26

0 respostas