Warum stört meine Firewall (iptables) meine Bridge (brctl)?

11

Ich habe eine Brücke eingerichtet, die br0an zwei Schnittstellen "angeschlossen" ist:

  • eth0, meine physische Schnittstelle mit dem realen LAN verbunden,
  • vnet0, eine virtuelle KVM-Schnittstelle (verbunden mit einer Windows-VM).

Und ich habe diese einzige Firewall-Regel in der Vorwärtskette:

iptables -A FORWARD -j REJECT

Jetzt funktioniert nur noch der Ping von der VM zum Host.

Die br0Schnittstelle besitzt die IP-Adresse meines Host-Computers. eth0und vnet0aus Sicht des Hosts keine IP "besitzen". Die Windows-VM verfügt über eine statische IP-Konfiguration.

Wenn Sie meine iptablesRegel in ändern ACCEPT(oder sogar eine restriktivere verwenden iptables -A FORWARD -o br0 -j ACCEPT), funktioniert alles einwandfrei! (dh ich kann jeden LAN-Computer von der VM aus anpingen und umgekehrt auch).

Alle IP-Weiterleitungskerneloptionen sind deaktiviert (wie net.ipv4.ip_forward = 0).

Wie kann die Netfilter-Firewall etwas blockieren, das nicht einmal aktiviert ist?

Darüber hinaus sollte der VM-LAN-Verkehr nur implizieren eth0und vnet0. Es sieht jedoch so aus, als würde FORWARD-Verkehr mit -o br0"Works" zugelassen (ich habe dies jedoch nicht sehr sorgfältig überprüft).

Totor
quelle
Werfen
1
Was ist die Ausgabe vonsysctl -a | grep bridge-nf
Stéphane Chazelas
@ StéphaneChazelas net.bridge.bridge-nf-call-arptables = 1 net.bridge.bridge-nf-call-iptables = 1 net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-filter-vlan-tagged = 0 net.bridge.bridge-nf-filter-pppoe-tagged = 0
Totor

Antworten:

10

Der Kommentar von Stéphane Chazelas gibt den Hinweis auf die Antwort.

Laut Bridge-nf Häufig gestellte Fragen ermöglicht bridge-nf iptables, ip6tables oder arptables, überbrückten Datenverkehr zu sehen.

Ab Kernel-Version 2.6.1 gibt es fünf sysctl-Einträge für die Verhaltenskontrolle von bridge-nf:

  • bridge-nf-call-arptables - Überbrückten ARP-Verkehr an die FORWARD-Kette von arptables weiterleiten.
  • bridge-nf-call-iptables - Überbrückten IPv4-Verkehr an die Ketten von iptables weiterleiten.
  • bridge-nf-call-ip6tables - Überbrückten IPv6-Verkehr an die Ketten von ip6tables weiterleiten.
  • bridge-nf-filter-vlan-tagged - Überbrückten ARP / IP-Verkehr mit VLAN-Tags an Arptables / Iptables weiterleiten.
  • net.bridge.bridge-nf-filter-pppoe-tagged - Überbrückten IP / IPv6-Verkehr mit pppoe-Tags an {ip, ip6} -Tabellen weiterleiten

Sie können die Blockierung der Netfilter-Firewall deaktivieren mit:

# sysctl -w net.bridge.bridge-nf-call-iptables=0
# sysctl -w net.bridge.bridge-nf-call-ip6tables=0
Mathias Weidner
quelle
4
Seit Linux 3.18 kann die Funktionalität, mit der iptables Pakete von der Bridge verarbeitet, deaktiviert werden, indem das br_netfilterModul nicht geladen wird. Wenn das Modul nicht geladen ist, bedeutet dies auch, dass kein /proc/sys/net/bridge/Eintrag vorhanden ist.
Lekensteyn
Und seit Linux-Kernel 5.3 wird diese Funktion pro Namespace anstatt global.
AB