Por que meu firewall (iptables) interfere na minha ponte (brctl)?

11

Eu montei uma ponte br0"anexada" a duas interfaces:

  • eth0, minha interface física conectada à LAN real,
  • vnet0, uma interface virtual KVM (conectada a uma VM do Windows).

E eu tenho essa regra de firewall única na cadeia de encaminhamento:

iptables -A FORWARD -j REJECT

Agora, o único ping que está funcionando é da VM para o host.

A br0interface possui o endereço IP da minha máquina host. eth0e vnet0não "possui" nenhum IP, do ponto de vista do host. A VM do Windows tem uma configuração de IP estático.

Se mudar minha iptablesregra para ACCEPT(ou até usar uma mais restritiva iptables -A FORWARD -o br0 -j ACCEPT), tudo está funcionando bem! (ou seja, eu posso executar ping em qualquer máquina LAN da VM e vice-versa).

Todas as opções do kernel de encaminhamento de IP estão desabilitadas (como net.ipv4.ip_forward = 0).

Então, como o firewall do netfilter pode bloquear algo que nem está ativado?

Além disso, o tráfego VM - LAN deve implicar apenas eth0e vnet0. No entanto, parece permitir o tráfego FORWARD com -o br0"obras" (embora não tenha verificado com muito cuidado).

Totor
fonte
Dê uma olhada no meu A para este U&L Q: Configurações ao usar uma ponte
slm
1
Qual é o resultado desysctl -a | grep bridge-nf
Stéphane Chazelas
@ StéphaneChazelas net.bridge.bridge-nf-call-arptables = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-filter-vlan-tagged = 0 net.bridge.bridge-nf-filter-pppoe-tagged = 0
Totor

Respostas:

10

O comentário de Stéphane Chazelas fornece a dica para a resposta.

De acordo com as perguntas freqüentes do Bridge-nf, o bridge-nf permite que iptables, ip6tables ou arptables vejam o tráfego em ponte.

A partir da versão 2.6.1 do kernel, existem cinco entradas sysctl para o controle comportamental bridge-nf:

  • bridge-nf-call-arptables - passar o tráfego ARP em ponte para a cadeia FORWARD dos arptables.
  • bridge-nf-call-iptables - passar tráfego IPv4 em ponte para as cadeias de iptables.
  • bridge-nf-call-ip6tables - passar tráfego IPv6 em ponte para as cadeias de ip6tables.
  • bridge-nf-filter-vlan-tagged - passe o tráfego ARP / IP com ponte em vlan com ponte para arptables / iptables.
  • net.bridge.bridge-nf-filter-pppoe-tagged - passa o tráfego de IP / IPv6 com a tag pppoe em ponte para as tabelas {ip, ip6}

Você pode desativar o bloqueio do firewall do netfilter com:

# sysctl -w net.bridge.bridge-nf-call-iptables=0
# sysctl -w net.bridge.bridge-nf-call-ip6tables=0
Mathias Weidner
fonte
4
Desde o Linux 3.18, a funcionalidade em que o iptables lida com pacotes da ponte pode ser desativada não carregando o br_netfiltermódulo. Não ter o módulo carregado também significa que não há /proc/sys/net/bridge/entrada.
Lekensteyn
E desde o kernel Linux 5.3, esse recurso se torna por namespace, em vez de global.
AB