ファイアウォールフィルターフレキシブル一致条件
標準のファイアウォールフィルターの一致条件は、一致させるトラフィックのプロトコルファミリーによって異なります。例えば、ブリッジプロトコルトラフィックに使用できる用語は、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 をご利用ください。