Como configurar o IPTables no host KVM - iptables-persistent está sendo ignorado

3

Estou tentando configurar algumas regras específicas do IPTables em um host do Ubuntu 14.04.1 que executa alguns convidados do KVM.

A caixa tem vários NICs com vários endereços IP e os convidados usam endereços diferentes com base em suas funções.

Eu normalmente uso o iptables-persistent para conseguir isso, mas por alguma razão, as regras em /etc/iptables/rules.v4 não estão sendo carregadas no momento da inicialização. O iptables-persistent funciona corretamente quando o libvirt não está instalado.

Se eu executar o '/etc/init.d/iptables-persistent start', as regras serão carregadas e a configuração será a esperada. Mas na inicialização eles não são. Eu tentei criar um arquivo rules.v4 muito simples para depurar isso, mas ainda não está carregado.

A ligação simbólica do init para iptables-persistent existe em /etc/rc2.d/S37iptables-persistent

Confirmei que o ufw está desativado. Eu também removi as regras do nwfilter do / etc / libvirt / nwfilter e o virsh nwfilter-list não exibe nenhuma entrada.

Alguma ideia do que mais poderia estar definindo essas regras e como eu as personalizo da maneira que eu quero?

saída de status do ufw

# ufw status
Status: inactive

saída da lista nshfilter do virsh

# virsh nwfilter-list
 UUID                                  Name                 
------------------------------------------------------------------

conteúdo de /etc/iptables/rules.v4

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:LOG_AND_DROP - [0:0]
-A INPUT -s 192.168.10.0/24 -i br0 -j ACCEPT
-A INPUT -s 192.168.11.0/24 -i br0 -j ACCEPT
-A LOG_AND_DROP -j LOG --log-prefix "iptables deny: " --log-level 7
-A LOG_AND_DROP -j DROP
COMMIT

saída de iptables -L -n depois da inicialização (resultado indesejado)

# iptables -L -n -v
Chain INPUT (policy ACCEPT 12 packets, 912 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
    0     0 ACCEPT     udp  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
    0     0 ACCEPT     udp  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:53
    0     0 ACCEPT     tcp  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:53
    0     0 ACCEPT     udp  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            udp dpt:67
    0     0 ACCEPT     tcp  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            tcp dpt:67
  193 17300 ACCEPT     all  --  br0    *       192.168.10.0/24      0.0.0.0/0           
    0     0 ACCEPT     all  --  br0    *       192.168.11.0/24      0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      virbr0  0.0.0.0/0            192.168.122.0/24     ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     all  --  virbr0 *       192.168.122.0/24     0.0.0.0/0           
    0     0 ACCEPT     all  --  virbr0 virbr0  0.0.0.0/0            0.0.0.0/0           
    0     0 REJECT     all  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  virbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 ACCEPT     all  --  tunnelbr0 tunnelbr0  0.0.0.0/0            0.0.0.0/0           
    0     0 REJECT     all  --  *      tunnelbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  tunnelbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 ACCEPT     all  --  mgmtbr0 mgmtbr0  0.0.0.0/0            0.0.0.0/0           
    0     0 REJECT     all  --  *      mgmtbr0  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
    0     0 REJECT     all  --  mgmtbr0 *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 132 packets, 17456 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     udp  --  *      virbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68
    0     0 ACCEPT     udp  --  *      tunnelbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68
    0     0 ACCEPT     udp  --  *      mgmtbr0  0.0.0.0/0            0.0.0.0/0            udp dpt:68

Chain LOG_AND_DROP (0 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 7 prefix "iptables deny: "
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0 

Saída de iptables -L -n -v depois de executar /etc/init.d/iptables-persistent start (resultado esperado)

# iptables -L -n -v
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
   13   920 ACCEPT     all  --  br0    *       192.168.10.0/24      0.0.0.0/0           
    0     0 ACCEPT     all  --  br0    *       192.168.11.0/24      0.0.0.0/0           

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 8 packets, 1104 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain LOG_AND_DROP (0 references)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 LOG        all  --  *      *       0.0.0.0/0            0.0.0.0/0            LOG flags 0 level 7 prefix "iptables deny: "
    0     0 DROP       all  --  *      *       0.0.0.0/0            0.0.0.0/0           
    
por Anonymouslemming 16.08.2014 / 19:30

2 respostas

2

Todas as regras "extras" que você está vendo foram adicionadas pelo daemon libvirt para suportar (e proteger) a rede virtual para os convidados de sua máquina virtual. Você geralmente não precisa se preocupar com essas regras (e não deve tentar persisti-las, pois elas seriam duplicadas na próxima inicialização).

Também está claro que todas as suas regras de firewall persistentes foram adicionadas ao firewall.

Era difícil e difícil discernir qualquer um desses fatos sem essa opção -v crítica para o comando iptables.

    
por 17.08.2014 / 14:14
0

Você fez o check-in de / etc / network / interfaces para a diretiva "pré-up", que pode ser algo como:

pre-up iptables-restore < /etc/iptables.rules

Outra possibilidade no Ubuntu / Debian é que os scripts estão localizados no diretório /etc/network/if-pre-up.d/, então você deve listar o conteúdo desse diretório:

# ls -al /etc/network/if-pre-up.d/

Outra possibilidade é que o NetworkManager carregue as regras, e você pode verificar isso procurando por firewall / iptables no seguinte diretório:

/etc/NetworkManager/dispatcher.d/

Além disso, verifique todos os scripts em / etc / init e /etc/init.d para "iptables" e "iptables-restore".

    
por 17.08.2014 / 02:13