正規表現の作成
正規表現は、ストリングそのものとしてテキスト ストリングと文字どおりに照合することも、 メタ文字 を使用してテキスト ストリングの複数のバリアントと照合することもできます。正規表現を使用して特定のアプリケーション トラフィックの内容と照合できます。たとえば、HTTP パケット内部の URL 文字列と照合できます。
はじめる前に
正規表現をパケットと照合する場合のパフォーマンスへの影響については、コマンド リファレンスの regex コマンドを参照してください。一般的に、長い入力文字列と照合したり、多くの正規表現と照合しようとすると、システム パフォーマンスが低下します。
(注) 最適化のために、ASA では、難読化解除された URL が検索されます。難読化解除では、複数のスラッシュ(/)が単一のスラッシュに圧縮されます。通常、「http://」のようなダブル スラッシュが使用される文字列では、代わりに「http:/」を検索してください。
次の表に、特別な意味を持つメタ文字を示します。
表 8-3 正規表現のメタ文字
|
|
|
. |
ドット |
任意の単一文字と一致します。たとえば、 d.g は、dog、dag、dtg、およびこれらの文字を含む任意の単語(doggonnit など)に一致します。 |
( exp ) |
サブ表現 |
サブ表現は、文字を周囲の文字から分離して、サブ表現に他のメタ文字を使用できるようにします。たとえば、 d(o|a)g は dog および dag に一致しますが、 do|ag は do および ag に一致します。また、サブ表現を繰り返し限定作用素とともに使用して、繰り返す文字を区別できます。たとえば、 ab(xy){3}z は、abxyxyxyz に一致します。 |
| |
代替 |
このメタ文字によって区切られている複数の表現のいずれかと一致します。たとえば、 dog|cat は、dog または cat に一致します。 |
? |
疑問符 |
直前の表現が 0 または 1 個存在することを示す修飾子。たとえば、 lo?se は、lse または lose に一致します。 |
* |
アスタリスク |
直前の表現が 0、1、または任意の個数存在することを示す修飾子。たとえば、 lo*se は、lse、lose、loose などに一致します。 |
+ |
プラス |
直前の表現が少なくとも 1 個存在することを示す修飾子。たとえば、 lo+se は、lose および loose に一致しますが、lse には一致しません。 |
{ x } または { x ,} |
最小繰り返し限定作用素 |
少なくとも x 回繰り返します。たとえば、 ab(xy){2,}z は、abxyxyz や abxyxyxyz などに一致します。 |
[ abc ] |
文字クラス |
カッコ内の任意の文字と一致します。たとえば、 [abc] は、a、b、または c に一致します。 |
[^ abc ] |
否定文字クラス |
角カッコに含まれていない単一文字と一致します。たとえば、 [^abc] は、a、b、c 以外の任意の文字に一致します。 [^A-Z] は、大文字のアルファベット文字以外の任意の単一の文字に一致します。 |
[ a - c ] |
文字範囲クラス |
範囲内の任意の文字と一致します。 [a-z] は、任意の小文字のアルファベット文字に一致します。文字と範囲を組み合わせて使用することもできます。 [abcq-z] および [a-cq-z] は、a、b、c、q、r、s、t、u、v、w、x、y、z に一致します。 ダッシュ(-)文字は、角カッコ内の最初の文字または最後の文字である場合にのみリテラルとなります( [abc-] や [-abc] )。 |
「」 |
引用符 |
文字列の末尾または先頭のスペースを保持します。たとえば、 " test" は、一致を検索する場合に先頭のスペースを保持します。 |
^ |
キャレット |
行の先頭を指定します。 |
\ |
エスケープ文字 |
メタ文字とともに使用すると、リテラル文字と一致します。たとえば、 \[ は左角カッコに一致します。 |
char |
文字 |
文字がメタ文字でない場合は、リテラル文字と一致します。 |
\r |
復帰 |
復帰 0x0d と一致します。 |
\n |
改行 |
改行 0x0a と一致します。 |
\t |
タブ |
タブ 0x09 と一致します。 |
\f |
改ページ |
フォーム フィード 0x0c と一致します。 |
\x NN |
エスケープされた 16 進数 |
16 進数(厳密に 2 桁)を使用した ASCII 文字と一致します。 |
\ NNN |
エスケープされた 8 進数 |
8 進数(厳密に 3 桁)としての ASCII 文字と一致します。たとえば、文字 040 はスペースを表します。 |
手順
ステップ 1 [Configuration] > [Firewall] > [Objects] > [Regular Expressions] を選択します。
ステップ 2 [Regular Expressions] 領域で、次のいずれかを実行します。
• [Add] を選択し、新しいオブジェクトを追加します。名前を入力し、任意で説明を入力します。
• 既存のオブジェクトを選択し、[Edit] をクリックします。
ステップ 3 [Value] フィールドに正規表現を入力するか、[Build] をクリックしてヘルプを利用しながら表現を作成します。
正規表現の長さは 100 文字までに制限されています。
[Build] をクリックした場合、次のプロセスを使用して表現を作成します。
a. [Build Snippet] 領域で、次のオプションを使用して表現のコンポーネントを作成します。作成中の表現を表示するには、この項の終わりにある [Snippet Preview] 領域を確認してください。
• [Starts at the beginning of the line (^)]:部分式は行頭から開始し、開始場所はメタ文字のカレット(^)で示します。このオプションを使用して作成した部分式は、正規表現の先頭に挿入してください。
• [Specify Character String]:単語やフレーズなどの特定の文字列を照合しようとしている場合、その文字列を入力します。
テキスト文字列の中に文字どおりに使用したいメタ文字がある場合、[Escape Special Characters] を選択し、そのメタ文字の前にエスケープ文字のバックスラッシュ(\)を追加します。たとえば、「example.com」と入力すると、このオプションによって「example\.com」に変換されます。
大文字および小文字を照合したい場合は、[Ignore Case] を選択します。たとえば、「cats」は「[cC][aA][tT][sS]」に変換されます。
• [Specify Character]:特定のフレーズではなく、特定タイプの文字や文字の組み合わせを照合しようとしている場合は、このオプションを選択し、次のオプションを使用して文字を特定します。
[Negate the character]:識別した文字を照合の対象外に指定します。
[Any character (.)]:すべての文字と一致させる、メタ文字のピリオド(.)を挿入します。たとえば、 d.g は、dog、dag、dtg、およびこれらの文字を含む任意の単語(doggonnit など)に一致します。
[Character set]:文字セットを挿入します。テキストをこのセットに含まれるすべての文字と照合します。たとえば、[0-9A-Za-z] の場合、部分式は 0 ~ 9 の数字と A ~ Z の大文字および小文字と照合します。[\n\f\r\t] セットは、改行、改ページ、復帰、タブと一致します。
[Special character]:エスケープが必要な文字(\、?、*、+、|、.、[、(、^ など)を挿入します。エスケープ文字はバックスラッシュ(\)で、このオプションを選択すると自動的に入力されます。
[Whitespace character]:空白スペースには \n(改行)、\f(改ページ)、\r(復帰)、\t(タブ)があります。
[Three digit octal number]:8 進数を使用する ASCII 文字(3 桁まで)と一致します。たとえば、\040 はスペースを意味します。バックスラッシュ(\)は自動的に入力されます。
[Two digit hexadecimal number]:16 進数を使用する ASCII 文字(厳密に 2 桁)と一致します。バックスラッシュ(\)は自動的に入力されます。
[Specified character]:任意の 1 文字を入力します。
b. 次のいずれかのボタンを使用して、正規表現ボックスに部分式を追加します。正規表現ボックスに直接入力できることにも注意してください。
• [Append Snippet]:部分式を正規表現の最後に追加します。
• [Append Snippet as Alternate]:部分式をパイプ記号(|)で区切って、正規表現の最後に追加します。区切られた表現の一方と照合します。たとえば、 dog|cat は、dog または cat に一致します。
• [Insert Snippet at Cursor]:部分式をカーソル位置に挿入します。
c. 表現が完了するまで、部分式を追加するプロセスを繰り返します。
d. (オプション)[Selection Occurrences] では、表現またはその一部を、一致すると考えられるテキストとどれくらいの頻度で照合する必要があるかを選択します。[Regular Expression] フィールドでテキストを選択し、次のいずれかのオプションをクリックしてから [Apply to Selection] をクリックします。たとえば、正規表現が「test me」であり、「me」を選択して [One or more times] を適用する場合、正規表現は「test (me)+」に変更されます。
• [Zero or one times (?)]:直前の表現が 0 または 1 個存在します。たとえば、 lo?se は、lse または lose に一致します。
• [One or more times (+)]:直前の表現が少なくとも 1 個存在します。たとえば、 lo+se は、lose および loose に一致しますが、lse には一致しません。
• [Any number of times (*)]:直前の表現が 0、1、または任意の個数あります。たとえば、 lo*se は、lse、lose、loose などに一致します。
• [At least]:少なくとも x 回繰り返します。たとえば、 ab(xy){2,}z は、abxyxyz や abxyxyxyz などに一致します。
• [Exactly]: x 回だけ繰り返します。たとえば、 ab(xy){3}z は、abxyxyxyz に一致します。
e. 表現が意図したテキストに一致することを検証するには、[Test] をクリックします。テストが失敗した場合は、[Test] ダイアログボックスで編集を試みるか、表現ビルダーに戻ることができます。テキスト ダイアログの表現を編集し、[OK] をクリックすると、編集内容が保存され、表現ビルダーに反映されます。
f. [OK] をクリックします。