19.12. ネットワークのフィルター機能を適用する

このセクションでは libvirt のネットワークフィルター、フィルターの目的、その概要と XML 形式などについて紹介しています。

19.12.1. はじめに

ネットワークフィルター機能の目的は、仮想化システムの管理者がネットワークトラフィックのフィルタールールを仮想マシンに設定し、実施することができるようにする、また仮想マシンによる送受信を許可するネットワークトラフィックのパラメーターーを管理できるようにすることです。ネットワークトラフィックのフィルタールールは、仮想マシンの起動時にホスト物理マシンで適用されます。フィルタールールは仮想マシン内からは避けることができないため、仮想マシンのユーザーにとっては強制的となります。
ゲスト仮想マシンから見ると、ネットワークフィルターのシステムにより、インターフェースごと個別に各仮想マシンのネットワークトラフィックフィルタールールを設定することができるようになります。これらのルールは仮想マシンの起動時にホスト物理マシンで適用され、仮想マシンの実行中に変更することができます。ルールの変更を行なう場合は、ネットワークフィルターの XML 記述を編集します。
複数の仮想マシンに同じ汎用ネットワークフィルターを利用させることができます。 このようなフィルターを変更すると、 このフィルターを参照している実行中の全仮想マシンのネットワークトラフィックフィルターのルールが更新されます。 実行していないマシンは起動時に更新されます。
前述の通り、 適用しているネットワークトラフィックフィルターのルールは、特定タイプのネットワーク構成に設定されたネットワークインターフェースに個別に適用することができます。対応しているネットワークタイプは次の通りです。
  • ネットワーク
  • イーサネット -- ブリッジモードで使用してください
  • bridge

例19.1 ネットワークフィルターの例

トップレベルのフィルターの参照にはインターフェース XML が使用されます。次の例では、 インターフェースの記述で clean-traffic フィルターを参照しています。
   <devices>
    <interface type='bridge'>
      <mac address='00:16:3e:5d:c7:9e'/>
      <filterref filter='clean-traffic'/>
    </interface>
  </devices>
ネットワークフィルターは XMLで記述します。他のフィルターへの参照またはトラフィックフィルターのルールのいずれかを含ませる、または両方を組み合わせて含ませることもできます。上記の参照フィルター clean-traffic は、他のフィルターへの参照のみを含み実際のフィルタールールは含んでいません。 他のフィルターへの参照を使用することができるため、フィルターのツリーを構成することが可能です。 clean-traffic フィルターは # virsh nwfilter-dumpxml clean-traffic コマンドを使用すると表示させることができます。
前述した通り、1 つのネットワークフィルターを複数の仮想マシンに参照させることができます。一般的にはインターフェースにはトラフィックフィルタールールに関連付けられた個別のパラメーターがあるため、フィルターの XML に記述されているルールは変数を使って法則化することができます。この場合、変数の名前をフィルターの XML で使用し、フィルターが参照される場所にその名前と値を入力します。

例19.2 記述の拡張

次の例では、インターフェースの記述にパラメーターの名前「IP」と値「ドット表記の IP アドレス」を加えて拡張しています。
  <devices>
    <interface type='bridge'>
      <mac address='00:16:3e:5d:c7:9e'/>
      <filterref filter='clean-traffic'>
        <parameter name='IP' value='10.0.0.1'/>
      </filterref>
    </interface>
  </devices>
この例では、clean-traffic ネットワークトラフィックフィルターは IP アドレスパラメーター 10.0.0.1 で表され、ルールの指示によりこのインターフェースからのトラフィックはすべて必ず 10.0.0.1 をソースの IP アドレスとして使用するようになります。これがこのフィルターの目的です。