Iptables - Brücke und Vorwärtskette


14

Ich habe Ethernet Bridge eingerichtet br0, die zwei Schnittstellen eth0und enthälttap0

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 

Meine Standard- FORWARDKettenrichtlinie lautetDROP

iptables -P FORWARD DROP

Wenn ich folgende Regel nicht hinzufüge, passiert der Verkehr nicht die Brücke.

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

Soweit ich verstehe, iptablesist nur für die IP-Schicht verantwortlich.

ebtables sollte für das Filtern des Datenverkehrs auf der Ethernet-Brücke verantwortlich sein.

Warum muss ich die ACCEPT-Regel in die FORWARD-Kette von iptable aufnehmen?

Antworten:


12

Wegen des br-nf-Codes, der als Patch für Linux 2.4 verfügbar ist und in Linux 2.6 verwendet wird:

Der br-nf-Code bewirkt, dass überbrückte IP-Frames / -Pakete die iptables-Ketten durchlaufen. Ebtables filtert auf der Ethernet-Ebene, während iptables nur IP-Pakete filtert.

Da der Datenverkehr, an dem Sie arbeiten, IP-Adressen sind, iptablesgelten weiterhin Regeln, da br-nf die überbrückten Pakete an weiterleitet iptables.

Dies ist eine großartige Ressource, um mehr über die Interaktion zu erfahren. In dieser Ressource wird die Funktionalität von br-nf- Code detailliert beschrieben , einschließlich der Deaktivierung aller oder einiger Funktionen (dh keine Weitergabe des Bridge-Datenverkehrs an iptables).


Die Funktionalität funktioniert nicht auf 4.4.0-22-generic (Ubuntu 16.04), auch wenn ich es getan habe echo "1" > /sys/devices/virtual/net/br0/bridge/nf_call_arptables. Irgendwelche Ideen?
Arie Skliarouk

Beantworte mich selbst: # Lade br_netfilter modprobe br_netfilter # Füge der BROUTING-Kettenregel hinzu, um alle IPV4-Pakete an iptables ebtables -t broute -A BROUTING -p IPV4 -i br0 -j TROPFEN
Arie Skliarouk 15.06.17



0

Wenn Sie iptables nicht für die Bridge auf Ihrem System verwenden müssen, können Sie es dauerhaft deaktivieren, indem Sie eine der folgenden Methoden verwenden:

  1. Hinzufügen einer Iptables-Regel:

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

  1. Oder bearbeiten Sie /etc/sysctl.conf:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.