SonicOS 7 一致オブジェクト
- SonicOS 7
- ゾーン
- アドレス
- サービス
- URI リスト
- 一致オブジェクト
- スケジュール
- 動的グループ
- 電子メール アドレス
- SonicWall サポート
正規表現について
アプリケーション ルール ポリシーで使用するため、特定の一致オブジェクト種別に正規表現を構成できます。「一致オブジェクトの設定」オプションでは、個別正規表現を構成したり、あらかじめ定義された正規表現から選択したりできます。SonicWall セキュリティ装置は、ネットワーク トラフィックに対して再組み立て不要の正規表現による照合をサポートしています。このため、入力ストリームのバッファリングが不要で、パターンはパケット境界をまたがって照合されます。
SonicOS には、以下の定義済み正規表現が用意されています。
VISA CC | VISA クレジット カード番号 |
US SSN | 米国の社会保障番号 |
CANADIAN SIN | カナダの社会保険番号 |
ABA ROUTING NUMBER | 米国銀行協会のルーティング番号 |
AMEX CC | American Express クレジット カード番号 |
MASTERCARD CC | Mastercard クレジット カード番号 |
DISCOVER CC | Discover クレジット カード番号 |
正規表現を使用するポリシーは、ネットワーク トラフィック内の該当するパターンのうち、最初に出現するものに一致します。そのため、一致に対して可能な限り速やかに動作できます。照合は、人間が読み取れるテキストだけではなくネットワーク トラフィックに対しても実行されるので、照合可能な英字には ASCII 文字セット全体 (全 256 文字) が含まれます。
'.'、(任意の文字ワイルドカード)、'*'、'?'、'+'、繰り返しカウント、代替、および否定などの一般的な正規表現の基本命令がサポートされています。構文とセマンティクスは Perl や vim などの一般的な正規表現の実装と似ていますが、わずかな違いがあります。例えば、行頭演算子 (^) と行末演算子 ($) はサポートされていません。また、'\z' は、PERL のように文字列の終わりを指すのではなく、0 以外の数字、すなわち [1-9] を指します。詳細については、「正規表現の構文」を参照してください。
Perl 正規表現エンジンとの大きな違いの 1 つは、後方参照と置換がサポートされていないことです。これらの機能は実際には正規表現に無関係で、調べているデータについて線形時間では実行できません。したがって、最高のパフォーマンスを維持するため、これらの機能はサポートされていません。置換または変換機能がサポートされていないのは、ネットワーク トラフィックを検査するだけで、変更はしないからです。
よく使用されるパターン (米国の社会保障番号や VISA のクレジットカード番号など) 向けにあらかじめ定義された正規表現は、一致オブジェクトの作成時に選択できます。ユーザは、同じ一致オブジェクト内に独自の表現を記述することもできます。ユーザが入力した表現は解析され、正しく解析されなかった表現があれば、「一致オブジェクトの設定」ウィンドウの下部に構文エラーが表示されます。解析が正しく完了した後、正規表現はコンパイラに渡され、ネットワーク トラフィックをリアルタイムでスキャンするのに必要なデータ構造が作成されます。
決定性有限オートマトン (DFA) というデータ構造を作成することによって、正規表現が効率的に照合されます。DFA のサイズはユーザが入力した正規表現によって決定され、デバイスのメモリ容量によって制約を受けます。複雑な正規表現のコンパイル処理には長い時間がかかり、装置のメモリを大量に消費することがあります。含まれる表現によっては、DFA の作成に最大 2 分かかることもあります。
装置管理の応答性に対する影響が大きすぎるだけでなく、悪用やサービス拒否攻撃を防ぐため、コンパイラは処理を中止し、データ構造がデバイスに対して大きくなりすぎる正規表現を拒否できます。ウィンドウの下部に、"悪用を検出しました" というエラー メッセージが表示されます。
長時間のコンパイル中、装置管理セッションが一時的に反応しなくなることがありますが、ネットワーク トラフィックは装置に送信され続けています。
大きなカウンタを含む表現の DFA を作成すると、多くの時間とメモリが消費されます。そのような表現は、'*' 演算子と '+' 演算子などの無制限のカウンタを使用する表現よりも拒否される可能性が高くなります。
同様に、拒否されるおそれがある表現としては、文字範囲や文字クラスよりも多数の文字を含む表現があります。つまり、‘(a|b|c|d|. . .|z)’ という表現は、同等の文字クラス ‘\l’ よりも拒否される可能性が高くなります。'[a-z]' という範囲を使用すると、内部的に '\l' に変換されます。ただし、
'[d-y]' または '[0-Z]' という範囲は、文字クラスに変換できず、長いので、この断片を含む表現は拒否される可能性があります。
表現が拒否されたときはいつでも上記のヒントを利用して、拒否されないように、より効率的な方法で書き直すことができます。構文の詳細については、「正規表現の構文」を参照してください。ユーザ定義正規表現の作成方法に関する例は、「ポリシー > アプリケーション ルール」の「一致オブジェクトにおける正規表現の作成」セクションを参照してください。
Was This Article Helpful?
Help us to improve our support portal