Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

18.12.4. フィルターにおける変数の使用

ネットワークトラフィックフィルターサブシステム (MAC と IP) で使用するために予約されている変数には、次の 2 つがあります。
MAC は、ネットワークインターフェイスの MAC アドレスに指定されます。この変数を参照するフィルターリングルールは、自動的にインターフェイスの MAC アドレスに置き換えられます。これは、MAC パラメーターを明示的に指定する必要なく機能します。上記の IP パラメーターに似た MAC パラメーターを指定できる場合でも、libvirt は、インターフェイスが使用する MAC アドレスを認識しているため、推奨できません。
パラメーターIP は、仮想マシン内のオペレーティングシステムが、指定のインターフェイスで使用する IP アドレスを表します。パラメーターが明示的に指定されずに参照されている場合に、インターフェイスで使用されている IP アドレス (つまり IP パラメーターの値) を libvirt デーモンが判断しようとする限り、IP パラメーターは特別なものとなります。現在の IP アドレス検出の制限は、この機能の使用方法と、その使用時に想定される制限に関する「制限事項」を参照してください。「チェーンのフィルター」 に示す XML ファイルには、フィルター no-arp-spoofing が含まれています。これは、ネットワークフィルター XML を使用して MAC 変数および IP 変数を参照する例です。
参照変数の前には、常に $ という文字が付くことに注意してください。変数の値の形式は、XML で識別されるフィルター属性で期待されるタイプである必要があります。上記の例では、IP パラメーターは、標準形式の正しい IP アドレスを保持する必要があります。正しい構造を指定しないと、フィルター変数が値に置き換わりません。また、ホットプラグの使用時に、仮想マシンの起動が妨げられたり、インターフェイスの接続が妨げられたりします。各 XML 属性で期待されるタイプの一部を、サンプル例18.4「サンプルの変数の種類」に示します。

例18.4 サンプルの変数の種類

変数には要素の一覧が含まれる場合があります (変数 IP には、特定のインターフェイスで有効な 複数 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'/>
        <parameter name='IP' value='10.0.0.2'/>
        <parameter name='IP' value='10.0.0.3'/>
      </filterref>
    </interface>
  </devices>
この XML ファイルは、インターフェイスごとに複数の IP アドレスを有効にするフィルターを作成します。各 IP アドレスは、個別のフィルターリングルールになります。そのため、上記の XML および以下のルールを使用して、3 つの個別のフィルターリングルール (各 IP アドレスに 1 つ) が作成されます。
  <rule action='accept' direction='in' priority='500'>
    <tcp srpipaddr='$IP'/>
  </rule>
要素の一覧を含む変数の個々の要素にアクセスできるように、以下のようなフィルターリングルールは、変数DSTPORTS の 2 番目の要素にアクセスします。
  <rule action='accept' direction='in' priority='500'>
    <udp dstportstart='$DSTPORTS[1]'/>
  </rule>

例18.5 さまざまな変数の使用

$VARIABLE[@<iterator id="x">] 表記を使用して、異なるリストから可能なルールの組み合わせをすべて表示するフィルターリングルールを作成できます。以下の規則では、仮想マシンが、DSTPORTS で指定された一連のポートで、SRCIPADDRESSES で指定された送信元 IP アドレスのセットからトラフィックを受信できるようにします。この規則では、2 つの独立したイテレーターを使用して、変数 DSTPORTS の要素と SRCIPADDRESSES の要素の組み合わせをすべて生成します。
  <rule action='accept' direction='in' priority='500'>
    <ip srcipaddr='$SRCIPADDRESSES[@1]' dstportstart='$DSTPORTS[@2]'/>
  </rule>
以下のように、SRCIPADDRESSES および DSTPORTS に具体的な値を割り当てます。
  SRCIPADDRESSES = [ 10.0.0.1, 11.1.2.3 ]
  DSTPORTS = [ 80, 8080 ]
$SRCIPADDRESSES[@1] および $DSTPORTS[@2] を使用して変数に値を割り当てると、次に示すように、アドレスおよびポートの組み合わせがすべて作成されます。
  • 10.0.0.1, 80
  • 10.0.0.1, 8080
  • 11.1.2.3, 80
  • 11.1.2.3, 8080
表記法 $SRCIPADDRESSES[@1]$DSTPORTS[@1] を使用するなど、1 つのイテレーターを使用して同じ変数にアクセスすると、両方のリストにパラレルアクセスが行われ、結果が以下のようになります。
  • 10.0.0.1, 80
  • 11.1.2.3, 8080
注記
$VARIABLE は、$VARIABLE[@0] の省略形です。以前の表記法は、このセクションの上部にある最初の段落に示されているように、iterator id="0" が追加されたイテレーターのロールを常に想定しています。