iptableはLinuxブリッジとどのように機能しますか?

iptableはLinuxブリッジとどのように機能しますか?

設定:

VM1 --- ブリッジ -- VM2

VM1と2は同じサブネットにあります。ブリッジには、brctlブリッジに追加された2つのインターフェイスがあります。 uptables -A FORWARD -s(VM1 ip) -j DENY を使用して VM2 IP をブロックすると動作しません。パケットがネットワーク層に決して入らないことを知っているが、これ「IPパケットがブリッジコードにある場合、すべてのiptablesチェーンが通過します」と言います。 MACフィルタリングでさえ、iptablesでは機能しません。 ebtablesはうまく動作します。何が問題なの?

答え1

iptablesLinuxのブリッジフィルタフレームワークには、レイヤ2ブリッジングコードが(およびまたはarptables)へのアップストリーム呼び出しを作成し、ip6tablesレイヤ2(ブリッジフレーム)からレイヤ3(iptablesパケット使用)への転送をフィルタリングして、レベル2に戻ることができるメカニズムがあります。あります。これは、レイヤ2に滞在するか、レイヤ3で継続(フレーム転送/ローカル転送)BROUTINGする論理選択のみを提供するチェーンを使用する以上のものです。dnatbroute

たとえば、この階層化違反のためにそのconntrack施設が悪用され、レイヤ2で利用可能なステートフルファイアウォールが提供されます。

また、人々が予期しない問題が発生したり、デバッグしにくい問題が発生したり(ほとんどの場合)、不要な場合にパフォーマンスを妨げたりする可能性があります。したがって、カーネル3.18からbr_netfilter コードはブリッジコードから分離され、モジュール化されました。そして、もはや自動的にロードされません。

iptablesでこの機能を使用するにはしなければならないmodprobe br_netfiltersysconfパラメータを(と同じ)net.bridge.bridge-nf-call-iptablesに設定します。今これはOPリンクのすべての驚くべき複雑さを可能にします。1echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptablesLinuxベースのブリッジのebtables/iptables相互作用。 iptablesを使用するときに注意してくださいphysdevebtables)一致、およびを使用するときに注意しないと、ファイアウォール全体の動作を微妙に変更できますiptables

注:(nftablesおよびiptables-nft)も影響を受けます。現在の状況は(階層化された違反のさらなる複雑さのために)わずかに混乱していると見なされ、いくつかの再構成が直接行われました。つながるブリッジパスはサポートされていますが、廃止されました。 Linux では、カーネル 5.3 からそれを可能にするbr_netfilterカーネルモジュールを提供しています。nf_conntrack_bridgenftables到達せずにブリッジ層から直接接続トレースを処理します。アイピー(いいえIP6そしてイントラネット)家族:ブリッジの接続追跡をサポート

関連情報