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トラフィックを許可するように見えますただし、注意深くチェックしないでください)。
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