ファイアウォールフィルターフレキシブル一致条件
標準のファイアウォールフィルターの一致条件は、一致させるトラフィックのプロトコルファミリーによって異なります。例えば、ブリッジプロトコルトラフィックに使用できる用語は、inetまたはinet6プロトコルファミリーで使用できる用語とは異なります。ただし、各プロトコルファミリー内でマッチングに使用できるフィールドは、固定または事前定義されています。つまり、フィルターは、これらの事前定義されたフィールド内のパターンでのみ一致できます。
柔軟な一致条件を使用して、レイヤー2、レイヤー3、レイヤー4、またはペイロードの場所から一致を開始するファイアウォールフィルターを構築できます。そこから、追加のオフセット基準を指定して、パケット内のユーザー定義のカスタム位置でのパターンマッチを有効にすることができます。
フレキシブル マッチ フィルターの用語は、他のファイアウォール フィルターの条件と同様に、入力フィルターまたは出力フィルターとして MPC または MIC インターフェイスに適用されます。柔軟な一致フィルター項目は、 [edit firewall]
階層レベルでテンプレートとして作成することもできます。これらのテンプレートは、柔軟な一致条件内で参照できます。
MX シリーズ ルーターでは、柔軟な一致条件は MPC または MIC でのみサポートされています。FPC、PIC、DPCがMPCまたはMICと一緒にインストールされる環境では、フレキシブルマッチファイアウォールフィルター条件をMPCまたはMICインターフェイスにのみ適用してください。
MPCを搭載したMXシリーズルーターでは、対応するSNMP MIBをウォークすることでMIBのTrio-only一致フィルターのフィルターカウンターを初期化する必要があります。例えば、Trio 専用フィルターに関して設定または変更されたフィルターについては、以下のようなコマンドを実行する必要があります。show snmp mib walk (ascii | decimal) object-id
. これにより、Junosはフィルター カウンターを学習し、フィルター統計が表示されていることを確認します(これは、統計をフィルターする最初のポールがすべてのカウンターを表示しない場合があるためです)。Trio のみの一致フィルターとは、Trio チップセットでのみサポートされている一致条件またはアクションを少なくとも 1 つ含むフィルターです。
このガイダンスは、すべての enhanced-mode
ファイアウォールフィルターに適用されます。また、IPv6トラフィックのオフセット範囲またはオフセットマスク、gre-key
、ファイアウォールフィルター一致条件について、次のいずれかの一致条件を持つ柔軟な一致フィルター条件を持つIPv4トラフィックのファイアウォールフィルター一致条件にも適用されます。payload-protocol
、 extension headers
、 is_fragment
。また、次のいずれかの ファイアウォールフィルター終了アクションのフィルターにも適用されます。encapsulate
または decapsulate
、あるいは次のいずれかの ファイアウォールフィルター非終了アクション。policy-map
、および clear-policy-map
。
ステートメント階層
柔軟な一致フィルター項目は、 表 1に示すように3つのバリエーションで利用できます。flexible-match
バリエーションは、[edit firewall]
階層レベルで構成されます。柔軟な一致テンプレートを定義するために使用されます。flexible-filter-match-mask
とflexible-match-range
は、[edit firewall family [inet|inet6|bridge|ethernet-switching|ccc|vpls] filter <filter-name> term <term-name> from]
階層で構成されます。EX9200スイッチの family ethernet-switching
フィルターを使用します。
柔軟なフィルター一致タイプ
柔軟なフィルター一致タイプ |
使用可能な属性 |
説明 |
---|---|---|
|
|
<name> 属性として という名前の柔軟な一致テンプレートを作成します。 |
|
一致させるデータの長さ(ビット単位)、文字列入力には不要(0..32) QFX5120およびEX4650スイッチの場合、有効なビット長は16および32のみです。 |
|
|
(match-start + バイト)オフセット(0..7)の後のビットオフセット |
|
|
一致開始ポイント後のバイトオフセット |
|
|
パケットで一致させる開始ポイント |
|
|
|
一致させるデータの長さ(ビット単位)、文字列入力には不要(0..128) |
|
(match-start + バイト)オフセット(0..7)の後のビットオフセット |
|
|
一致開始ポイント後のバイトオフセット |
|
|
定義済みテンプレート フィールドから柔軟な一致を選択します。 |
|
|
一致させるパケットデータ内のビットをマスクアウトします。 |
|
|
パケットで一致させる開始ポイント。 |
|
|
一致する値データ/文字列。 |
|
|
|
一致させるデータの長さ (ビット単位)。(0..32) |
|
(match-start + バイト)オフセットの後のビットオフセット。(0..7) |
|
|
一致開始ポイント後のバイトオフセット |
|
|
定義済みテンプレートから柔軟な一致を選択します。 |
|
|
パケットで一致させる開始ポイント。 |
|
|
一致させる値の範囲。 |
|
|
一致しない値の範囲。 |
flexible-match-range
EX2300、EX3400、EX4100、EX4400ではサポートされていません。
柔軟なフィルター一致開始場所
柔軟な一致フィルター項目は、パケット内の開始位置またはアンカー ポイントを指定することで構築されます。開始場所は次のいずれかです。レイヤー2、レイヤー3、レイヤー4、ペイロード(使用するプロトコルファミリーによって異なります)。 表 2 、使用可能な柔軟なフィルター一致の開始場所をプロトコル ファミリー別に示しています。これらの利用可能な開始場所は、柔軟な一致フィルター条件の match-start
場所として使用します。
これらの開始位置から、特定のバイトオフセットとビットオフセットを利用して、フィルターがパケット内の非常に特定の位置のパターンを一致させることができます。
プロトコルファミリー |
利用可能な開始場所 |
---|---|
|
QFX5120およびEX4650スイッチでは、Junosリリース20.1R1で、レイヤー2およびレイヤー3(のみ)の柔軟な一致フィルターのサポートが追加されました。 |
|
QFX5120およびEX4650スイッチでは、Junosリリース20.1R1で、レイヤー2およびレイヤー3(のみ)の柔軟な一致フィルターのサポートが追加されました。 |
|
|
|
|
|
|
|
|
|
(EX9200スイッチ) Junosリリース20.1R1で、QFX5120スイッチおよびEX4650スイッチで、レイヤー2およびレイヤー3(のみ)のフレキシブルマッチフィルターのサポートが追加されました。レイヤー 2 パケット オフセットと一致長の使用例を以下に示します。 |
柔軟なフィルター一致の例
次の例は、 flexible-match-mask
の使用方法とコンテキストを示しています。
from { flexible-match-mask { flexible-mask-name <mask-name>; mask-in-hex <mask>; prefix <pattern>; } }
この <mask-name> は flexible-mask-name フレキシブル一致条件に使用する定義済みテンプレートを指定します。テンプレートを定義して、パケット内のどの位置(位置)でフレキシブル一致条件を実行するかを指定できます。
mask-in-hex の<mask>は 16 進形式です。例えば、マスクを 0xf0fc
に設定すると、最初のバイトの 4 ビット( <mask-name> で参照)と、2 バイト目の最初の 6 ビットの一致が指定されます。パケットが IPv4 パケットで、 <mask-name> が L3 ヘッダーの最初の 2 バイトを参照している場合、検索は IP バージョン フィールドと DSCP フィールドです。別の例として、構成されたマスク 0xffc0
、最初のバイト全体と、2 番目のバイトからの 2 ビットの検索を指定します。<mask-name> が L3 ヘッダーの最初の 2 バイトを参照し、パケットが IPv6 パケットの場合、IP バージョン フィールドとトラフィック クラス フィールドの DSCP を指定します。
prefixに指定された<pattern>は、ASCII 文字列です。最初の 2 文字が 0x
場合、文字列は適切なビットをエンコードする 16 進数として処理されます。例えば、マスク0xf0fc
と組み合わせて、L3ヘッダーの最初の2バイトを参照する<mask-name>設定されたプレフィックス0x40c0
は、IPv4 DSCPフィールド(DSCPはcs6に等しい)の最初の4ビット(バージョンフィールドは4に等しい)および1100 00
で0100
を検索することを示します。または、設定されたプレフィックス 0x6c00
をマスク 0xffc0
と組み合わせて使用 <mask-name> L3ヘッダーの最初の2バイトを参照し、最初の4ビット(バージョンフィールドは6に等しい)で 0110
の検索を指定し、IPv6 DSCPフィールドで 1100 00
(DSCPはcs6に等しい)を指定します。
最初の例では、柔軟なマッチングのために L3 ヘッダーから最初の 2 バイト (16 ビット) を選択するマスク テンプレートを定義します。
firewall { flexible-match FM-FIRST-TWO-L3-BYTES { match-start layer-3; byte-offset 0; bit-offset 0; bit-length 16; } }
次の例では、柔軟なマッチングのために、パケット ペイロードの 3 番目から 6 番目のバイト (32 ビット) を選択するマスク テンプレートを定義します。
firewall { flexible-match FM-FOUR-PAYLOAD-BYTES { match-start payload; byte-offset 2; bit-offset 0; bit-length 32; } }
次の例は、文字列 JNPR と一致する ASCII 文字を示しています(ASCII 文字:0x4a
、 0x4e
、 0x50
、 0x52
)をパケットペイロードの3番目から6番目のバイトに入力します。フィルターは、前の例で定義した FM-FOUR-PAYLOAD-BYTES
マスク テンプレートを使用します。
firewall { family ccc filter FF-COUNT-JNPR-PACKETS { term JNPR-STRING { from { flexible-match-mask { mask-in-hex 0xffffffff; prefix JNPR; flexible-mask-name FM-FOUR-PAYLOAD-BYTES; } } then { count CNT-JNPR-YES accept; } } term DEAFULT { then { count CNT-JNPR-NO accept; } } } }
この例では、カプセル化されたパケットが IPv4 か IPv6 かに関係なく、DSCP が cs6
に等しく、DSCP ef
を探すファミリー ccc フィルタを示しています。最初の例で定義した FM-FIRST-TWO-L3-BYTES
マスク テンプレートを使用します。
firewall { family ccc filter FF-DSCP-CLASSIFY { term ROUTING-IPV4 { from { flexible-match-mask { mask-in-hex 0xf0fc; prefix 0x40c0; # DSCP=cs6 in IPv4 header flexible-mask-name FM-FIRST-TWO-L3-BYTES; } } then { count ROUTING-IPV4; accept; } } term ROUTING-IPV6 { from { flexible-match-mask { mask-in-hex 0xffc0; prefix 0x6c00; # DSCP=cs6 in IPv6 header flexible-mask-name FM-FIRST-TWO-L3-BYTES; } } then { count ROUTING-IPV6; accept; } } term VOICE-IPV4 { from { flexible-match-mask { mask-in-hex 0xf0fc; prefix 0x40b8; # DSCP=ef in IPv4 header flexible-mask-name FM-FIRST-TWO-L3-BYTES; } } then { count VOICE-IPV4; accept; } } term VOICE-IPV6 { from { flexible-match-mask { mask-in-hex 0xffc0; prefix 0x6b80; # DSCP=ef in IPv6 header flexible-mask-name FM-FIRST-TWO-L3-BYTES; } } then { count VOICE-IPV6; accept; } } term DEFAULT { then { accept; } } } }
この例では、Junos リリース 20.1R1 を実行する QFX5120-32C、QFX5120-48Y、または EX4650 デバイスのファイアウォール フィルターで、レイヤー 2 パケット オフセットから始まる一致長を使用する方法を示します。ここでは、32ビットのビット長と ethernet-switching
ファミリを使用します(レイヤー3オフセットを使用しているため、inet
と inet6
もサポートされています)。
user@device# show firewall family ethernet-switching filter udf_eth { term t1 { from { flexible-match-mask { match-start layer-2; byte-offset 8; bit-length 32; prefix 168430090; } } then count c1; } }
変更履歴
サポートされる機能は、使用しているプラットフォームとリリースによって決まります。 特定の機能がお使いのプラットフォームでサポートされているかどうかを確認するには、 Feature Explorer をご利用ください。