Iptables - Мост и Форвард

14

У меня есть настройка Ethernet-мост, br0который содержит два интерфейса eth0иtap0

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 

Моя FORWARDполитика цепочки по умолчаниюDROP

iptables -P FORWARD DROP

Когда я не добавляю следующее правило, трафик не проходит через мост.

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

Насколько я понимаю, iptablesэто только ответственность за уровень IP.

ebtables должен отвечать за фильтрацию трафика по мосту Ethernet.

Так почему я должен добавить правило ACCEPT в цепочку FORWARD iptable?

Дариуш Бачински
источник

Ответы:

12

Из-за кода br-nf, который доступен как патч для Linux 2.4 и используется в Linux 2.6:

Код br-nf заставляет соединенные IP-кадры / пакеты проходить через цепочки iptables. Ebtables фильтрует на уровне Ethernet, в то время как iptables фильтрует только IP-пакеты.

Поскольку трафик, с которым вы работаете, является ip, iptablesправила по-прежнему применяются из-за того, что br-nf передает мостовые пакеты iptables.

Это большой ресурс , чтобы прочитать о взаимодействии и это одна детализирует функциональность BR-Н.Ф. кода, в том числе , как отключить все или некоторые из функциональных возможностей (т.е. не проходящее мост трафика IPTables).

CoreDump
источник
Функциональность не работает на 4.4.0-22-generic (Ubuntu 16.04), даже после того, как я сделал echo "1" > /sys/devices/virtual/net/br0/bridge/nf_call_arptables. Есть идеи?
Арье Склярук
Отвечаю сам себе: # Загрузить br_netfilter modprobe br_netfilter # Добавить в правило цепочки BROUTING для пересылки всех пакетов ipv4 в iptables ebtables -t cerete -A BROUTING -p ipv4 -i br0 -j DROP
Арье Склярук
11

Вы можете отключить это поведение (позволяя iptables обрабатывать мостовые пакеты), набрав:

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

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

Arnout
источник
3
Также, / proc / sys / net / bridge / bridge-nf-call-ip6tables
MV.
1

Если у вас нет необходимости использовать iptables с мостом в вашей системе, вы можете навсегда отключить его, выполнив одно из следующих действий:

  1. Добавление правила iptables:

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

  1. Или отредактируйте /etc/sysctl.conf:

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

искры
источник