Iptables - Corrente Bridge e Forward

14

Eu tenho ponte Ethernet de configuração br0que contém duas interfaces eth0etap0

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 

Minha FORWARDpolítica de cadeia padrão éDROP

iptables -P FORWARD DROP

Quando eu não adiciono a regra a seguir, o tráfego não está passando pela ponte.

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

Tanto quanto eu entendo iptablesé apenas responsável pela camada IP.

ebtables deve ser responsável por filtrar o tráfego na ponte ethernet.

Então, por que preciso adicionar a regra ACEITAR na cadeia FORWARD do iptable?

Dariusz Bacinski
fonte

Respostas:

12

Por causa do código br-nf que está disponível como um patch para o linux 2.4 e usado no linux 2.6:

O código br-nf faz pacotes / quadros IP em ponte passarem pelas cadeias de iptables. O Ebtables filtra na camada Ethernet, enquanto o iptables filtra apenas pacotes IP.

Como o tráfego no qual você está trabalhando é IP, as iptablesregras ainda se aplicam por causa do br-nf passando os pacotes em ponte para iptables.

Este é um ótimo recurso para ler sobre a interação e este detalha a funcionalidade do código br-nf , incluindo como desativar todas ou algumas das funcionalidades (por exemplo, não passar o tráfego de ponte para o iptables).

coredump
fonte
A funcionalidade não está funcionando no 4.4.0-22-generic (ubuntu 16.04), mesmo depois que eu fiz echo "1" > /sys/devices/virtual/net/br0/bridge/nf_call_arptables. Alguma ideia?
Arie Skliarouk
Respondendo a mim mesmo: # carga br_netfilter modprobe br_netfilter # Add a regra da cadeia BROUTING de transmitir todos os pacotes IPv4 para iptables -t ebtables Brouté -A BROUTING -p ipv4 -i br0 -j DROP
Arie Skliarouk
11

Você pode desativar esse comportamento (permitindo que o iptables lide com pacotes em ponte) digitando:

echo "0" > /proc/sys/net/bridge/bridge-nf-call-iptables

(consulte http://ebtables.sourceforge.net/documentation/bridge-nf.html )

Arnout
fonte
3
Além disso, / proc / sys / net / bridge / bridge-nf-call-ip6tables
MV.
0

Se você não precisar usar o iptables com a ponte em seu sistema, poderá desativá-lo permanentemente usando um dos seguintes procedimentos:

  1. Adicionando uma regra iptables:

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

  1. Ou 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

faíscas
fonte