web-dev-qa-db-ja.com

ファイアウォール(iptables)がブリッジ(brctl)に干渉するのはなぜですか?

2つのインターフェースにbr0を "接続"するブリッジを設定しました。

  • eth0、実際のLANに接続されている私の物理インターフェイス、
  • vnet0、a KVM仮想インターフェイス(Windows VMに接続されています)。

そして、私はフォワードチェーンにこの単一のファイアウォールルールを持っています:

iptables -A FORWARD -j REJECT

今、機能している唯一のpingは、VMからホストへです。

br0インターフェイスは、ホストマシンのIPアドレスを所有しています。 eth0およびvnet0は、ホストの観点からは、どのIPも「所有」していません。 Windows VMには静的IP構成があります。

iptablesルールをACCEPTに変更した場合(または、より制限の厳しいiptables -A FORWARD -o br0 -j ACCEPTを使用した場合も)、すべて正常に機能します! (つまり、VMから任意のLANマシンにpingを実行でき、その逆も可能です)。

すべてのIP転送カーネルオプションが無効になります(net.ipv4.ip_forward = 0など)。

つまり、netfilterファイアウォールは、有効になっていないものをどのようにブロックできますか?

さらに、VM-LANトラフィックはeth0およびvnet0のみを意味する必要があります。それでも-o br0でFORWARDトラフィックを許可するように見えますただし、注意深くチェックしないでください)。

11
Totor

StéphaneChazelasの comment が答えのヒントになります。

Bridge-nfのよくある質問 によれば、bridge-nfはiptables、ip6tables、arptablesがブリッジされたトラフィックを確認できるようにします。

カーネルバージョン2.6.1以降、bridge-nf動作制御用に5つの sysctlエントリ があります。

  • bridge-nf-call-arptables-ブリッジされたARPトラフィックをarptablesのFORWARDチェーンに渡します。
  • bridge-nf-call-iptables-ブリッジングされたIPv4トラフィックをiptablesのチェーンに渡します。
  • bridge-nf-call-ip6tables-ブリッジされたIPv6トラフィックをip6tablesのチェーンに渡します。
  • bridge-nf-filter-vlan-tagged-ブリッジされたvlanタグ付きARP/IPトラフィックをarptables/iptablesに渡します。
  • net.bridge.bridge-nf-filter-pppoe-tagged-ブリッジされたpppoeタグ付きIP/IPv6トラフィックを{ip、ip6}テーブルに渡します

Netfilterファイアウォールブロッキングを無効にするには、次のようにします。

# sysctl -w net.bridge.bridge-nf-call-iptables=0
# sysctl -w net.bridge.bridge-nf-call-ip6tables=0
10
Mathias Weidner