¿Por qué mi firewall (iptables) interfiere en mi puente (brctl)?

11

Configuré un puente br0"conectado" a dos interfaces:

  • eth0, mi interfaz física conectada a la LAN real,
  • vnet0, una interfaz virtual KVM (conectada a una máquina virtual de Windows).

Y tengo esta única regla de firewall en la cadena de avance:

iptables -A FORWARD -j REJECT

Ahora, el único ping que funciona es desde la VM al host.

La br0interfaz posee la dirección IP de mi máquina host. eth0y vnet0no "posee" ninguna IP, desde el punto de vista del host. La VM de Windows tiene una configuración de IP estática.

Si cambio mi iptablesregla a ACCEPT(o incluso uso una más restrictiva iptables -A FORWARD -o br0 -j ACCEPT), ¡todo está funcionando bien! (es decir, puedo hacer ping a cualquier máquina LAN desde la VM, y al revés también).

Todas las opciones de kernel de reenvío de IP están deshabilitadas (como net.ipv4.ip_forward = 0).

Entonces, ¿cómo puede el firewall de netfilter bloquear algo que ni siquiera está habilitado?

Además, el tráfico VM - LAN solo debe implicar eth0y vnet0. Sin embargo, parece permitir el tráfico ADELANTE con -o br0"obras" (aunque no lo revisé con mucho cuidado).

Totor
fuente
Eche un vistazo a mi A a este U&L Q: Configuración cuando use un puente
slm
1
¿Cuál es el 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

Respuestas:

10

El comentario de Stéphane Chazelas proporciona la pista a la respuesta.

Según las preguntas frecuentes de Bridge-nf, bridge-nf permite que iptables, ip6tables o arptables puedan ver el tráfico en puente.

A partir de la versión 2.6.1 del kernel, hay cinco entradas sysctl para el control de comportamiento bridge-nf:

  • bridge-nf-call-arptables - Pase el tráfico ARP puenteado a la cadena FORWARD de arptables.
  • bridge-nf-call-iptables - Pase el tráfico IPv4 puenteado a las cadenas de iptables.
  • bridge-nf-call-ip6tables - Pase el tráfico IPv6 puenteado a las cadenas de ip6tables.
  • bridge-nf-filter-vlan-tagged - Pase el tráfico ARP / IP con etiqueta vlan en puente a arptables / iptables.
  • net.bridge.bridge-nf-filter-pppoe-tagged - Pase el tráfico IP / IPv6 con etiqueta pppoe en puente a las tablas {ip, ip6}

Puede deshabilitar el bloqueo del firewall de netfilter con:

# sysctl -w net.bridge.bridge-nf-call-iptables=0
# sysctl -w net.bridge.bridge-nf-call-ip6tables=0
Mathias Weidner
fuente
44
Desde Linux 3.18, la funcionalidad donde iptables maneja los paquetes desde el puente se puede deshabilitar al no cargar el br_netfiltermódulo. No tener el módulo cargado también significa que no hay /proc/sys/net/bridge/entrada.
Lekensteyn
Y desde Linux kernel 5.3 esta característica se convierte en espacio de nombres en lugar de global.
AB