Iptables - Jembatan dan rantai Maju

14

Saya memiliki setup ethernet bridge br0yang berisi dua antarmuka eth0dantap0

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 

FORWARDKebijakan rantai default saya adalahDROP

iptables -P FORWARD DROP

Ketika saya tidak menambahkan aturan berikut, lalu lintas tidak melewati jembatan.

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

Sejauh yang saya mengerti iptableshanya bertanggung jawab untuk lapisan IP.

ebtables harus bertanggung jawab untuk menyaring lalu lintas di jembatan ethernet.

Jadi mengapa saya harus menambahkan aturan ACCEPT di rantai FORWARD iptable?

Dariusz Bacinski
sumber

Jawaban:

12

Karena kode br-nf yang tersedia sebagai patch ke linux 2.4 dan digunakan di linux 2.6:

Kode br-nf membuat frame / paket IP bridged melewati rantai iptables. Filter Ebtables pada lapisan Ethernet, sementara iptables hanya memfilter paket IP.

Karena traffic yang Anda gunakan adalah ip, iptablesaturan masih berlaku karena br-nf meneruskan paket bridged ke iptables.

Ini adalah sumber yang bagus untuk membaca tentang interaksi dan yang satu ini merinci fungsionalitas kode br-nf , termasuk cara menonaktifkan semua atau beberapa fungsi (yaitu tidak meneruskan lalu lintas jembatan ke iptables).

coredump
sumber
Fungsionalitasnya tidak bekerja pada 4.4.0-22-generik (ubuntu 16.04), bahkan setelah saya melakukannya echo "1" > /sys/devices/virtual/net/br0/bridge/nf_call_arptables. Ada ide?
Arie Skliarouk
Menjawab diri saya sendiri: # Muat br_netfilter modprobe br_netfilter # Tambahkan ke BROUTING aturan rantai untuk meneruskan semua paket ipv4 ke iptables ebtables -t broute -A BROUTING -p ipv4 -i br0 -j DROP
Arie Skliarouk
11

Anda dapat menonaktifkan perilaku ini (membiarkan iptables menangani paket yang di-bridged) dengan mengetik:

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

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

Arnout
sumber
3
Juga, / proc / sys / net / bridge / bridge-nf-call-ip6tables
MV.
0

Jika Anda tidak perlu menggunakan iptables dengan bridge di sistem Anda, Anda dapat menonaktifkannya secara permanen dengan menggunakan salah satu dari berikut ini:

  1. Menambahkan aturan iptables:

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

  1. Atau mengedit /etc/sysctl.conf:

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

bunga api
sumber