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?

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).


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


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


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.