Iptables - Mostek i łańcuch do przodu

14

Mam skonfigurowany most Ethernet, br0który zawiera dwa interfejsy eth0itap0

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 

Moja domyślna FORWARDpolityka łańcucha toDROP

iptables -P FORWARD DROP

Kiedy nie dodam następującej reguły, ruch nie przechodzi przez most.

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

O ile rozumiem, iptablesodpowiada tylko za warstwę IP.

ebtables powinien być odpowiedzialny za filtrowanie ruchu na moście Ethernet.

Dlaczego więc muszę dodać regułę ACCEPT do łańcucha FORTARD firmy iptable?

Dariusz Baciński
źródło

Odpowiedzi:

12

Z powodu kodu br-nf, który jest dostępny jako łatka do systemu Linux 2.4 i używany w systemie Linux 2.6:

Kod br-nf sprawia, że ​​zmostkowane ramki / pakiety IP przechodzą przez łańcuchy iptables. Ebtables filtruje na warstwie Ethernet, podczas gdy iptables filtruje tylko pakiety IP.

Ponieważ ruch, na który pracujesz, to ip, iptablesnadal obowiązują reguły, ponieważ br-nf przekazuje zmostkowane pakiety iptables.

Jest to świetny zasób do przeczytania o interakcji, a ten szczegółowo opisuje funkcjonalność kodu br-nf , w tym sposób wyłączania wszystkich lub niektórych funkcjonalności (tj. Nieprzekazywania ruchu mostkowego do iptables).

rdzeń rdzeniowy
źródło
Ta funkcjonalność nie działa na 4.4.0-22-generic (ubuntu 16.04), nawet po tym jak to zrobiłem echo "1" > /sys/devices/virtual/net/br0/bridge/nf_call_arptables. Jakieś pomysły?
Arie Skliarouk
Odpowiadając sobie: # Załaduj br_netfilter modprobe br_netfilter # Dodaj do BROUTING reguły łańcuchowej, aby przekazać wszystkie pakiety ipv4 do iptables ebtables -t broute -A BROUTING -p ipv4 -i br0 -j DROP
Arie Skliarouk
11

Możesz wyłączyć to zachowanie (pozwalając iptables na obsługę zmostkowanych pakietów), wpisując:

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

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

Arnout
źródło
3
Ponadto, / proc / sys / net / bridge / bridge-nf-call-ip6tables
MV.
1

Jeśli nie musisz używać iptables z mostem w swoim systemie, możesz go trwale wyłączyć, korzystając z jednego z poniższych:

  1. Dodanie reguły iptables:

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

  1. Lub edytuj /etc/sysctl.conf:

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

iskry
źródło