Iptables - Pont et chaîne avant

14

J'ai configuré un pont Ethernet br0qui contient deux interfaces eth0ettap0

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 

Ma FORWARDstratégie de chaîne par défaut estDROP

iptables -P FORWARD DROP

Quand je n'ajoute pas la règle suivante, le trafic ne passe pas par le pont.

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

Pour autant que je comprends, iptablesest uniquement responsable de la couche IP.

ebtables devrait être responsable du filtrage du trafic sur le pont Ethernet.

Alors pourquoi dois-je ajouter la règle ACCEPT dans la chaîne FORWARD d'iptable?

Dariusz Bacinski
la source

Réponses:

12

En raison du code br-nf qui est disponible en tant que patch pour linux 2.4 et utilisé dans linux 2.6:

Le code br-nf fait passer les trames / paquets IP pontés à travers les chaînes iptables. Ebtables filtre sur la couche Ethernet, tandis que iptables ne filtre que les paquets IP.

Étant donné que le trafic sur lequel vous travaillez est IP, des iptablesrègles s'appliquent toujours car br-nf transmet les paquets pontés à iptables.

Ceci est une excellente ressource pour lire sur l'interaction et celui-ci détaille les fonctionnalités du code br-nf , y compris comment désactiver tout ou partie des fonctionnalités (c'est-à-dire ne pas transmettre le trafic de pont à iptables).

coredump
la source
La fonctionnalité ne fonctionne pas sur 4.4.0-22-generic (ubuntu 16.04), même après moi echo "1" > /sys/devices/virtual/net/br0/bridge/nf_call_arptables. Des idées?
Arie Skliarouk
Me répondre: # Charger br_netfilter modprobe br_netfilter # Ajouter à la règle de chaîne BROUTING pour transférer tous les paquets ipv4 vers iptables ebtables -t broute -A BROUTING -p ipv4 -i br0 -j DROP
Arie Skliarouk
11

Vous pouvez désactiver ce comportement (laisser iptables gérer les paquets pontés) en tapant:

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

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

Arnout
la source
3
En outre, / proc / sys / net / bridge / bridge-nf-call-ip6tables
MV.
1

Si vous n'avez pas besoin d'utiliser iptables avec le pont de votre système, vous pouvez le désactiver définitivement en utilisant l'une des méthodes suivantes:

  1. Ajout d'une règle iptables:

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

  1. Ou éditez /etc/sysctl.conf:

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

des étincelles
la source