設定:
VM1 --- ブリッジ -- VM2
VM1と2は同じサブネットにあります。ブリッジには、brctlブリッジに追加された2つのインターフェイスがあります。 uptables -A FORWARD -s(VM1 ip) -j DENY を使用して VM2 IP をブロックすると動作しません。パケットがネットワーク層に決して入らないことを知っているが、これ「IPパケットがブリッジコードにある場合、すべてのiptablesチェーンが通過します」と言います。 MACフィルタリングでさえ、iptablesでは機能しません。 ebtablesはうまく動作します。何が問題なの?
答え1
iptables
Linuxのブリッジフィルタフレームワークには、レイヤ2ブリッジングコードが(およびまたはarptables
)へのアップストリーム呼び出しを作成し、ip6tables
レイヤ2(ブリッジフレーム)からレイヤ3(iptables
パケット使用)への転送をフィルタリングして、レベル2に戻ることができるメカニズムがあります。あります。これは、レイヤ2に滞在するか、レイヤ3で継続(フレーム転送/ローカル転送)BROUTING
する論理選択のみを提供するチェーンを使用する以上のものです。dnat
broute
たとえば、この階層化違反のためにそのconntrack
施設が悪用され、レイヤ2で利用可能なステートフルファイアウォールが提供されます。
また、人々が予期しない問題が発生したり、デバッグしにくい問題が発生したり(ほとんどの場合)、不要な場合にパフォーマンスを妨げたりする可能性があります。したがって、カーネル3.18からbr_netfilter コードはブリッジコードから分離され、モジュール化されました。そして、もはや自動的にロードされません。
iptablesでこの機能を使用するにはしなければならないmodprobe br_netfilter
sysconfパラメータを(と同じ)net.bridge.bridge-nf-call-iptables
に設定します。今これはOPリンクのすべての驚くべき複雑さを可能にします。1
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
Linuxベースのブリッジのebtables/iptables相互作用。 iptablesを使用するときに注意してくださいphysdev
ebtables
)一致、およびを使用するときに注意しないと、ファイアウォール全体の動作を微妙に変更できますiptables
。
注:(nftables
およびiptables-nft
)も影響を受けます。現在の状況は(階層化された違反のさらなる複雑さのために)わずかに混乱していると見なされ、いくつかの再構成が直接行われました。つながるブリッジパスはサポートされていますが、廃止されました。 Linux では、カーネル 5.3 からそれを可能にするbr_netfilter
カーネルモジュールを提供しています。nf_conntrack_bridge
nftables到達せずにブリッジ層から直接接続トレースを処理します。アイピー(いいえIP6そしてイントラネット)家族:ブリッジの接続追跡をサポート。