イーサネットブリッジをセットアップしましたbr0
2つのインターフェースを含む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
は、イーサネットブリッジ上のトラフィックのフィルタリングを担当する必要があります。
なぜiptableのFORWARDチェーンにACCEPTルールを追加する必要があるのですか?
Linux 2.4へのパッチとして利用可能で、Linux 2.6で使用されるbr-nfコードのため:
Br-nfコードは、ブリッジされたIPフレーム/パケットがiptablesチェーンを通過するようにします。 Ebtablesはイーサネット層でフィルタリングしますが、iptablesはIPパケットのみをフィルタリングします。
作業しているトラフィックはipなので、br-nfブリッジドパケットをiptables
に渡すため、iptables
ルールは引き続き適用されます。
これ は、相互作用について読むのに最適なリソースであり、 これ は、br-nfコードの機能を詳しく説明しています。すべてまたは一部の機能を無効にする(つまり、ブリッジトラフィックをiptablesに渡さない)。
次のように入力して、この動作を無効にすることができます(ブリッジされたパケットを処理するiptablesを使用可能にする)。
echo "0" > /proc/sys/net/bridge/bridge-nf-call-iptables
( http://ebtables.sourceforge.net/documentation/bridge-nf.html を参照)
システムのブリッジでiptablesを使用する必要がない場合は、次のいずれかを使用して永続的に無効にすることができます。
iptables -I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0
Ebtablesチェーンは、非転送ブリッジポートに入るフレームを認識しません。これを見てみましょう: http://ebtables.sourceforge.net/br_fw_ia/br_fw_ia.html