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?

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


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



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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.