Iptables - Bridge and Forward chain


14

Ho installato un bridge ethernet br0che contiene due interfacce eth0etap0

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 

La mia FORWARDpolitica a catena predefinita èDROP

iptables -P FORWARD DROP

Quando non aggiungo la seguente regola, il traffico non passa attraverso il bridge.

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

Per quanto ho capito iptablesè responsabile solo per il livello IP.

ebtables dovrebbe essere responsabile del filtraggio del traffico sul bridge ethernet.

Quindi, perché devo aggiungere la regola ACCEPT nella catena FORWARD di iptable?

Risposte:


12

A causa del codice br-nf che è disponibile come patch per Linux 2.4 e usato in Linux 2.6:

Il codice br-nf fa passare i frame / pacchetti IP a ponte attraverso le catene iptables. I filtri ebtables sullo strato Ethernet, mentre iptables filtra solo i pacchetti IP.

Poiché il traffico su cui stai lavorando è IP, le iptablesregole si applicano comunque a causa del passaggio di pacchetti a ponte da parte di br-nfiptables .

Questa è una grande risorsa da leggere sull'interazione e questa in dettaglio la funzionalità del codice br-nf , incluso come disabilitare tutte o alcune delle funzionalità (cioè non passare il traffico bridge su iptables).


La funzionalità non funziona su 4.4.0-22-generico (ubuntu 16.04), anche dopo che l'ho fatto echo "1" > /sys/devices/virtual/net/br0/bridge/nf_call_arptables. Qualche idea?
Arie Skliarouk,

Mi sto rispondendo: # Carica br_netfilter modprobe br_netfilter # Aggiungi a BROUTING regola catena per inoltrare tutti i pacchetti ipv4 a iptables ebtables -t broute -A BROUTING -p ipv4 -i br0 -j DROP
Arie Skliarouk



0

Se non hai la necessità di usare iptables con il bridge sul tuo sistema, puoi disabilitarlo permanentemente usando uno dei seguenti:

  1. Aggiunta di una regola iptables:

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

  1. O modificando /etc/sysctl.conf:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.