Iptables - Puente y cadena delantera

14

He configurado el puente de ethernet br0que contiene dos interfaces eth0ytap0

brctl addbr br0
brctl addif eth0
brctl addif tap0
ifconfig eth0 0.0.0.0 promisc up
ifconfig tap0 0.0.0.0 promisc up
ifconfig br0 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255 

Mi FORWARDpolítica de cadena predeterminada esDROP

iptables -P FORWARD DROP

Cuando no agrego la siguiente regla, el tráfico no pasa por el puente.

iptables -A FORWARD -p all -i br0 -j ACCEPT

Por lo que entiendo, iptablessolo es responsable de la capa IP.

ebtables debe ser responsable de filtrar el tráfico en el puente de ethernet.

Entonces, ¿por qué debo agregar la regla ACEPTAR en la cadena FORWARD de iptable?

Dariusz Bacinski
fuente

Respuestas:

12

Debido al código br-nf que está disponible como un parche para Linux 2.4 y se usa en Linux 2.6:

El código br-nf hace que las tramas / paquetes IP puenteados atraviesen las cadenas de iptables. Ebtables filtra en la capa de Ethernet, mientras que iptables solo filtra los paquetes IP.

Dado que el tráfico que está trabajando es ip, las iptablesreglas aún se aplican debido a que br-nf pasa los paquetes en puente a iptables.

Este es un gran recurso para leer sobre la interacción y este detalla la funcionalidad del código br-nf , incluida la forma de deshabilitar todas o algunas de las funcionalidades (es decir, no pasar el tráfico del puente a iptables).

volcado de memoria
fuente
La funcionalidad no funciona en 4.4.0-22-generic (ubuntu 16.04), incluso después de que lo hice echo "1" > /sys/devices/virtual/net/br0/bridge/nf_call_arptables. ¿Algunas ideas?
Arie Skliarouk
Respondiéndome a mí mismo: # Cargar br_netfilter modprobe br_netfilter # Agregar a la regla de cadena BROUTING para reenviar todos los paquetes ipv4 a iptables ebtables -t broute -A BROUTING -p ipv4 -i br0 -j DROP
Arie Skliarouk
0

Si no tiene la necesidad de usar iptables con el puente en su sistema, puede deshabilitarlo permanentemente usando cualquiera de los siguientes:

  1. Agregar una regla de iptables:

iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT

  1. O editando /etc/sysctl.conf:

net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0

chispas
fuente