Contents [show]
このセクションには、現在のWAFルールセットに使用可能なすべての設定が3つのタブで整理されて表示されます。 グローバル, 規則、 and 農場。 このセクションの変更は、をクリックして適用する必要があります。 SUBMIT ボタン。
グローバル設定WAFルールセット
この設定は、セットに含まれているすべてのルールの動作を管理します。
お名前: 簡単に見つけて認識できるようにするには、自己説明する必要があります。 このフィールドの値は、セットが作成されたときに設定され、変更することはできません。
リクエストボディの確認 HTTPリクエストの本文を分析するかどうかを設定するフラグです。 このフラグが無効の場合、本文はスキップされ、リクエスト本文のパラメータに対するルールの一致は処理されません。
ボディリミットをリクエスト: ボディリクエストを検査するために保存されたリクエストボディの最大バイト数です。 このパラメータの値が0の場合、WAFはコンテンツ長のサイズを完全に保存します。 制限値を設定することをお勧めします。
リクエストボディの確認 HTTPレスポンスの本文を分析するかどうかを設定するフラグです。 このフラグが無効の場合、本文はスキップされ、レスポンス本文のパラメータに対するルールの一致は処理されません。 524288(512KB)を超える応答は無視されます。
デフォルトの動作: この選択ボックスは、ルールで解像度が指定されておらず、ルールのすべての一致が成功した場合にデフォルトの解像度として使用されます。 考えられる処置は次のとおりです。
- 次を許可します。。 このアクションを持つルールが一致すると、(現在のHTTPトランザクションに対して)これ以上ルールは評価されません。
- 合格。 WAFは、HTTPトランザクションを中断することなく、次のルールの評価を続けます。
- 否定する。 現在のHTTPトランザクションを終了します。 これ以上ルールを評価しません。 ルールがフェーズ1または2(要求の分析)で一致すると、要求はバックエンドに配信されません。 ルールがフェーズ3または4(応答の分析)で一致すると、応答はクライアントに配信されません。
- リダイレクト。 HTTPトランザクションは停止され、HTTPリダイレクトがクライアントに送信されます。
リダイレクトURL: これは、ルールが一致し、リダイレクト解決が設定されているときにクライアントに送信されるURLです。
デフォルトフェーズ: この選択ボックスは、ルールにフェーズが指定されていない場合のデフォルトのフェーズとして使用されます。 フェーズは、WAFルールをフックすることが可能なHTTPステップです。 定義されているフェーズは以下のとおりです。
- リクエストヘッダを受信。 クライアントからのすべてのリクエストヘッダがロードバランサによって読み込まれると、ルールが実行されます。
- リクエストボディを受け取る。 クライアントからの完全なリクエストボディがロードバランサにバッファリングされると、ルールが実行されます。
- レスポンスリーダーが届く。 サーバーからのすべての応答ヘッダーがロードバランサーによって読み取られると、ルールが実行されます。
- レスポンスボディを受け取る。 サーバーからの完全な応答本文がロードバランサによって読み取られると、ルールが実行されます。
- ロギング前より。 WAFプロセスがロギングタスクを終了すると、ルールが実行されます。
デフォルトログ: これはログのデフォルトのアクションです。 この値は、ルール設定でログに関するアクションが指定されていない場合に使用されます。
ロギングのみ このチェックボックスが有効になっていると、セット内のルールの解決パラメータは実行されません。 この作業モードは、セットが実行されているときにのみ利用可能です。
ルールを無効にする
それらのテーブルはそれらを修正することなくセットのルールを無効にすることを可能にします。
ルールを有効にする。 セットで現在有効になっているルールのリストです。 規則は、 ルールID とその 説明 パラメーター。
ルールを有効にする。 セット内で現在無効になっているルールのリストです。
WAF規則のリスト
キャンペーンのルール セクションでは、HTTP攻撃を検出して防御するWAFルールの作成と変更を許可しています。
これらの規則は、この画面に表示されているのと同じ順序で順次評価される指令です。 ルールをソートする必要がある場合は、ボタンを有効にしてください。 並び替え 要求された位置にドラッグアンドドロップします。
規則の可能なパラメータは次のとおりです。
ID: ルールセット内のルールを識別するための識別子です。 この識別子は、セット内のルール位置と対応しています。
ルールID: これはルールの一意の識別子です。 同じルールIDを持つ2つのルールが含まれているwafセットにファームをリンクすることはできません。
説明: ルールを識別するための説明メッセージです。 このメッセージは、正常に一致した場合に記録されます。
ログ: このパラメータを有効にすると、最初の一致条件が満たされたときにルールがログに記録されます。
フェーズ: フェーズは、ルールが実行されるHTTPリクエストのステップを表します。 考えられるフェーズは次のとおりです。
- リクエストヘッダを受信。 クライアントからのすべてのリクエストヘッダがロードバランサによって読み込まれると、ルールが実行されます。
- リクエストボディを受け取る。 クライアントからの完全なリクエストボディがロードバランサにバッファリングされると、ルールが実行されます。
- レスポンスリーダーが届く。 サーバーからのすべての応答ヘッダーがロードバランサーによって読み取られると、ルールが実行されます。
- レスポンスボディを受け取る。 サーバーからの完全な応答本文がロードバランサによって読み取られると、ルールが実行されます。
- ロギング前より。 WAFプロセスがロギングタスクを終了すると、ルールが実行されます。
リダイレクトURL: ルールがリダイレクトを実行する場合にクライアントがリダイレクトされるURLです。 このパラメータは、解決フィールドでリダイレクトが選択されたときに表示されます。
解像度: この選択ボックスは、すべての一致条件が満たされた場合に実行するように選択されたアクションです。
- 次を許可します。。 このアクションを持つルールが一致すると、(現在のHTTPトランザクションに対して)これ以上ルールは評価されません。
- 合格。 WAFは、HTTPトランザクションを中断することなく、次のルールの評価を続けます。
- 否定する。 現在のHTTPトランザクションを終了します。 これ以上ルールを評価しません。 ルールがフェーズ1または2(要求の分析)で一致すると、要求はバックエンドに配信されません。 ルールがフェーズ3または4(応答の分析)で一致すると、応答はクライアントに配信されません。
- リダイレクト。 HTTPトランザクションは停止され、HTTPリダイレクトがクライアントに送信されます。
スキップ: すべての一致が達成された場合、ルールはこのフィールドで指定された数のルールをスキップします。
後にスキップ: すべての一致が達成されると、ルールは別のファイアウォール位置にジャンプします。 ルールは「マーク」または別のルールIDにジャンプできます。 ルールIDはジャンプ後に実行され、現在のルールと同じフェーズになります。
実行: これはLUAスクリプトへのパスです。 スクリプトは事前にロードバランサにアップロードされている必要があります。 最初の一致条件が成立したときに実行されます。
rawでWAFルールを編集する
ルールフォームがde WAFルールをパラメータ化するのに十分ではなく、管理者がSecLang構文に精通している場合は、編集オプションを使用してルールまたはルールのバッチを作成できます。 ディレクティブとパラメータがSecLang構文でサポートされている場合、このフィールドは任意のディレクティブを受け入れます。 の SecLang 形式で表現されていないパラメータは、その形式では表示されませんが、編集形式で表示され、実行時に処理されます。
WAFルールを作成する
新しい規則が追加されると、それはセットの他の規則の追加に追加されます。 新しいルールを作成するには、新しいルールを作成する3つの方法があります。
マーク: ファイアウォールマークを設定します。 これらのマークは、一致条件が満たされるとジャンプするのに役立ちます。 expectedパラメータはマークを識別するための名前です。
アクション: フォームを使って基本的なルールを作成します。 フォームのパラメータは、で説明されているものと同じです。 WAF規則のリスト セクション。 ルールの実行が条件付きである必要がある場合は、 条件を追加 実行条件を設定します。
カスタム: このフォームはSecLang構文の規則(そして規則の集合)を受け付けます。 SecLangの構文の詳細については、次のWebサイトをご覧ください。 libmodsecurityプロジェクトのドキュメント.
条件リスト
この表は、HTTP解析済みパケットがルールに一致しなければならない条件のリストを示しています。 これらの一致はすべて、ルールで定義されているフェーズで実行されます。 一致したものは順番にチェックされ、すべてが正常に実行された場合はルールが適用されます。
一致を評価するために、WAFは変数リストに対して操作(パラメーター演算子と操作)を実行します。 リストの一部の変数が操作に準拠している場合、一致は成功したと見なされます。 たとえば、次の画像では、クライアントから送信されたリクエストヘッダーのリストでヘッダーIMAGESが検索されます。 まず、各ヘッダーを64ベースでデコードし、次にヘッダーを小文字に変換します。 変数に関する変換が完了すると、正規表現が適用され、変換された変数のリストで文字列「images」が検索されます。 ザ・ マルチマッハ optionは各変換操作(基本64デコード後および小文字変換後)に対して一致を試みます。
条件を作成する
一致により、WAFルールを実行するために達成する必要がある条件が構築されます。 一致を評価するために、WAFは変数リストに対して操作(パラメータ演算子と操作)を実行します。 操作とリストの変数の間に何らかの一致が存在する場合、その一致は成功と見なされます。 たとえば、 ローカルホスト(127.0.0.1) リクエストヘッダーリストと仮想ホストのHTTPフィールドでは、次の設定で評価できます。
条件に設定する構成パラメーターは次のとおりです。
変数: HTTPトランザクションのどの部分に対してルールが一致を試行するかが決まります。 可能な値はこれにあります テーブル。 いくつかの変数を追加することができ、それらのうちのいくつかが一致する場合、一致は有効であるとみなされます。 作成メニューが表示されます。 他には? それをクリックします。 可変構成に関する情報は、にあります。 変数を作成する のセクションから無料でダウンロードできます。
変換: 変換は、変数を適用して演算子を適用する前に変数に適用するための変更のリストです。 変換はフィールドに表示されているのと同じ順序で連続性が適用され、multimachオプションを使用して適用された変換ごとに一致を試すことができます。 変換によってHTTPトランザクションの情報が変更されることはありません。一時的なコンテキストに保存され、操作が完了すると削除されます。 ここに、変換のリストがあります。 このパラメータは、回避回避技術を削除したり、体系化データを削除したりするのに役立ちます。
オペレーター: それはルールがどのように試合を試みるかです。 このパラメータは動作と組み合わせて使用されます。 ここに、演算子のリストがあります。
オペレーティング: それはルールが試合で試すものです。 パラメータは演算子と組み合わせて使用されます。 期待値の種類はオペレータに応じたものでなければなりません。
マルチマッチ: このパラメーターは、複数の変換が構成されている場合に使用されます。 ルールは、変換の各値について、変数、演算子、および演算子の一致を試みます。 可能な値は次のとおりです。true、複数一致を有効にします。 falseの場合、複数一致機能は無効になります。
合わない: このチェックボックスがオンの場合、一致の結果は否定的になります。 true 結果が出るとき false または痙攣 false 結果が出るとき true.
変数を作成する
変数は一致条件における必須パラメータであり、情報を探す場所でHTTPリクエスト/レスポンスの一部を選択します。
変数: このパラメーターは、情報を検索するトランザクションの情報(時間、サーバーなど)のHTTP要求/応答のフィールドを指定します。
変数の引数: 変数が選択されたとき、時々それの要素を指定することが必要です。 たとえば、この画像ではリクエストヘッダーがどのように表示されるかが示されています。 host 選択がチェックされています。
変数の要素を数える: このチェックボックスは変数の要素数を数えます。 この機能は、変数がリストの場合に便利です。
この変数は無視してください。 このチェックボックスが有効になっていると、一致する変数はチェックされません。 この機能は、値のリストを含む変数をチェックしようとしているときに便利ですが、そのうちの1つを除外することが必要です。
変数テーブル
変数 | 説明 |
---|---|
ARGS | リクエストの引数の値を含むコレクションです。 |
ARGS_JSON | これはJSONリクエスト内の引数の値を持つコレクションです。 この変数は、WAFがJSON引数を解析する場合に使用可能になります。そのため、ルールセットREQUEST-901-INITIALIZATIONを有効にする必要があります。 |
ARGS_COMBINED_SIZE | リクエストパラメータの合計サイズ。 ファイルは除外されます。 |
ARGS_NAMES | リクエスト内のof引数の名前を持つコレクションです。 |
ファイル | ユーザーfilesysのファイル名が含まれています。 データがmultipart / form-dataの場合のみ |
FILES_COMBINED_SIZE | 要求内のファイルの合計サイズです。 データがmultipart / form-dataの場合のみ |
FILES_NAMES | ファイルをアップロードするために使用されるファイル名のリストです。 データがmultipart / form-dataの場合のみ |
FILES_SIZES | 個々のファイルサイズのリストが含まれています。 データがmultipart / form-dataの場合のみ |
REQBODY_ERROR | 要求本体のフォーマットがJSONまたはXMLに対して正しくない場合、この変数は1です。それ以外の場合、値は0です。 |
REQUEST_BODY | それは生の要求です。 リクエストに "application / x-www-form-urlencoded"ヘッダがない場合は、REQUEST_HEADERフェーズで "ctl:forceRequestBodyVariable"を使用する必要があります。 |
REQUEST_BODY_LENGTH | リクエストボディのバイト数です。 |
REQUEST_COOKIES | すべてのリクエストクッキーの値を含むリストです。 |
REQUEST_COOKIES_NAMES | それはすべてのリクエストクッキーの名前のリストです。 |
REQUEST_HEADERS | この変数はすべてのリクエストヘッダを持ちます。 |
REQUEST_HEADERS_NAMES | この変数はリクエストヘッダの名前のリストを持っています。 |
REQUEST_METHOD | リクエスト方法です。 |
REQUEST_PROTOCOL | この変数はリクエストHTTPバージョンプロトコルを保持します。 |
REQUEST_URI | これはURI要求パスです。 仮想ホストは除外されます。 |
PATH_INFO | URIパスより前の情報です。 |
FULL_REQUEST | それは完全な要求です。 |
FULL_REQUEST_LENGTH | 全要求が持つことができるバイト数です。 |
RESPONSE_BODY | 生の反応です。 |
RESPONSE_CONTENT_LENGTH | レスポンスボディのバイト数です。 |
RESPONSE_HEADERS | この変数はすべてのレスポンスヘッダを持ちます。 |
RESPONSE_HEADERS_NAMES | この変数はレスポンスヘッダの名前のリストを持っています。 |
RESPONSE_PROTOCOL | この変数は、応答HTTPバージョンプロトコルを保持します。 |
RESPONSE_STATUS | レスポンスHTTPコードです。 |
REMOTE_ADDR | クライアントのIPアドレスです。 |
REMOTE_PORT | クライアントが接続を初期化するポートです。 |
REMOTE_USER | 認証されたユーザーの名前です。 |
タイム | サーバーの時間です。 形式は時:分:秒です。 |
DURATION | 現在のトランザクションが開始されてからのミリ秒数です。 |
MULTIPART_FILENAME | これはマルチパートリクエストのフィールドfilenameです。 |
MULTIPART_NAME | これはマルチパートリクエストのフィールド名です。 |
MATCHED_VAR | これは最後の一致操作で一致した値です。 この値にはキャプチャオプションは必要ありませんが、一致操作ごとに置き換えられます。 |
MATCHED_VARS | 一致したすべての値のリストです。 |
SERVER_ADDR | サーバーのIPアドレスです。 |
SERVER_NAME | それは仮想ホストであり、リクエストURIから取得します。 |
ENV | それはWAFの環境変数です。 |
TX | 現在のトランザクションの変数の集まりです。 トランザクションが終了すると、これらの変数は削除されます。 変数TX:0-TX:9は、strRegexまたはstrPhrases演算子でキャプチャされた値を保存します。 |
オペレータの表
演算子は異なるコンテキストを持つことができます。 このコンテキストは、整数の場合はint、IP操作の場合はIP、文字列の場合はstr、データを検証する場合はvalidateなどのプレフィックスで示されます。
変数 | 説明 |
---|---|
strBegins | いずれかの変数がoperatingの値で始まっていれば、規則は一致します。 |
strContains | いずれかの変数にoperatingの値が含まれていれば、規則は一致します。 |
strContainsWord | 変数のいずれかにoperating値の単語が含まれている場合、規則は一致します。 |
ストランド | いずれかの変数がoperatingの値で終わっていれば、規則は一致します。 |
strWithin | いずれかの変数がoperatingの値で始まっていれば、規則は一致します。 |
strMatch | いずれかの変数がoperatingの値と一致すれば、ルールは一致します。 この操作は文字で分割された文字列のリストです。 | |
strEq | いずれかの変数がoperatingの値と同じであれば、規則は一致します。 |
strRegex | 操作に使用される正規表現でいずれかの変数が一致すると、規則が一致します。 |
strPhrase | リスト演算子のいずれかの値でいずれかの変数が一致すると、ルールが一致します。 |
strPhrasesFromFile | 演算子strPhrasesが操作であるのと同じですが、操作は句のリストが定義されているファイルです。 |
intEQ | いずれかの変数が操作に使用された数と等しい場合、規則は一致します。 |
intGE | いずれかの変数が操作に使用された数以上の場合、ルールは一致します。 |
intGT | いずれかの変数が操作に使用された数より大きい場合、ルールは一致します。 |
intLE | いずれかの変数が操作に使用された数以下の場合、ルールは一致します。 |
intLT | いずれかの変数が操作に使用された数より小さい場合、ルールは一致します。 |
detectSQLi | SQLインジェクションの検出を変数のリストに適用します。 このオペレーターは何の操作も期待していません。 |
detectXSS | XSSインジェクションの検出を変数のリストに適用します。 このオペレーターは何の操作も期待していません。 |
ipMatch | 操作のIPまたはネットワークセグメントを変数のリストと一致させるようにしてください。 |
ipMatchFromFile | これは演算子ipMatchと同じですが、これはIPとネットワークセグメントのリストを持つファイルに対して変数の一致を試みます。 |
validateByteRange | 変数のバイト数が操作値の1つにあることを確認します。 操作例は「10、13、32-126」です。 |
validateUrlEncoding | エンコードされたデータを検証します。 この演算子は、データを一般的にエンコードしないデータ、またはデータが複数回エンコードされるデータに対してのみ使用する必要があります。 |
validateUtf8Encoding | 変数がUTF-8であることを検証します。 このオペレーターは何の操作も期待していません。 |
verifyCreditCard | 変数がクレジットカード番号かどうかを確認します。 このパラメータは正規表現を作動として受け入れ、一致する場合は検証済みのクレジットカードを適用します。 |
verifySSN | 変数が米国の社会保障番号かどうかを検証します。 このパラメータは、正規表現を動作中として受け入れ、一致する場合はSSN検証を適用します。 |
matchAllways | 常にtrueを返し、強制的に一致させます。 |
matchNever | 常にfalseを返し、不一致を強制します。 |
変換テーブル
変換 | 説明 |
---|---|
base64Decode | Base64エンコード文字列をデコードします。 |
base64DecodeExt | 無効な文字を無視してBase64エンコード文字列をデコードします。 |
sqlHexDecode | SQL 16進データをデコードします。 |
base64Encode | Base64エンコーディングを使用してエンコードします。 |
cmdLine | エスケープされたコマンドラインに関連した問題を回避します。 |
compressWhitespace | 任意の空白文字(0x20、\ f、\ t、\ n、\ r、\ v、0xa0)をスペース(ASCII 0x20)に変換し、連続する複数のスペース文字を1つに圧縮します。 |
cssDecode | CSS 2.xエスケープルールを使用してエンコードされた文字をデコードします。 この関数はデコード処理に最大2バイトしか使用しません。つまり、CSSエンコードを使用してエンコードされたASCII文字(通常はエンコードされない)を発見したり、バックスラッシュと非 - 16進文字(例:ja \ vascriptはjavascriptと同じです)。 |
escapeSeqDecode | ANSI Cエスケープシーケンスをデコードします:\ a、\ b、\ f、\ n、\ r、\ t、\ v、\\、\?、\ '、\”、\ xHH(0進数)、\ XNUMXOOO(XNUMX進数) 。 無効なエンコーディングが出力に残ります。 |
hexDecode | hexEncodeで使用されているものと同じアルゴリズムを使用してエンコードされた文字列をデコードします(次のエントリを参照)。 |
hexEncode | 各入力バイトを2つの16進文字で置き換えることによって、文字列(おそらくバイナリ文字を含む)をエンコードします。 たとえば、xyzは78797aとしてエンコードされます。 |
htmlEntityDecode | HTMLエンティティとしてエンコードされた文字をデコードします。 |
jsDecode | JavaScriptのエスケープシーケンスをデコードします。 |
長さ | 入力文字列の長さをバイト単位で調べ、それを(文字列として)出力に入れます。 |
小文字 | 現在のCロケールを使用して、すべての文字を小文字に変換します。 |
md5 | 入力データからMD5ハッシュを計算します。 計算されたハッシュは生のバイナリ形式であり、印刷(またはログ)されるテキストにエンコードされる必要があるかもしれません。 ハッシュ関数は通常hexEncodeと組み合わせて使用されます。 |
なし | 実際の変換関数ではなく、現在のルールに関連付けられている以前の変換関数を削除する命令です。 |
normalizePath | 入力文字列から複数のスラッシュ、ディレクトリの自己参照、およびディレクトリの逆参照(入力の先頭にある場合を除く)を削除します。 |
normalizePathWin | normalizePathと同じですが、最初にバックスラッシュ文字をスラッシュに変換します。 |
parityEven7bit | 各ターゲットバイトの7番目のビットを計算したパリティビットに置き換えて、8ビットデータの偶数パリティを計算します。 |
parityOdd7bit | 各ターゲットバイトの7番目のビットを計算されたパリティビットで置き換えて、8ビットデータの奇数パリティを計算します。 |
parityZero7bit | 各対象バイトの7番目のビットをゼロパリティビットに置き換えて8ビットデータのゼロパリティを計算します。これにより、偶数/奇数パリティの7ビットデータをASCII7データとして検査できます。 |
removeNulls | 入力からすべてのNULバイトを削除します。 |
removeWhitespace | 入力からすべての空白文字を削除します。 |
replaceComments | Cスタイルのコメント(/ *…* /)の各オカレンスを単一のスペースに置き換えます(連続する複数のオカレンスは圧縮されません)。 終了していないコメントもスペース(ASCII 0x20)に置き換えられます。 ただし、コメント(* /)のスタンドアロン終了は処理されません。 |
removeCommentsChar | 一般的なコメント文字(/ *、* /、-、#)を削除します。 |
replaceNulls | 入力のNULバイトをスペース文字(ASCII 0x20)に置き換えます。 |
urlDecode | URLエンコードされた入力文字列をデコードします。 無効なエンコーディング(つまり、16進数以外の文字を使用するもの、または文字列の末尾にあり、1または2バイトが欠けているもの)は変換されませんが、エラーは発生しません。 |
大文字 | 現在のCロケールを使用して、すべての文字を大文字に変換します。 |
urlDecodeUni | urlDecodeと似ていますが、Microsoft固有の%uエンコーディングをサポートしています。 |
urlEncode | URLエンコードを使用して入力文字列をエンコードします。 |
utf8toUnicode | すべてのUTF-8文字シーケンスをUnicodeに変換します。 これは、特に英語以外の言語で入力の正規化を行い、誤検知や誤検知を最小限に抑えるのに役立ちます。 |
sha1 | 入力文字列からSHA1ハッシュを計算します。 計算されたハッシュは生のバイナリ形式であり、印刷(またはログ)されるテキストにエンコードされる必要があるかもしれません。 ハッシュ関数は通常hexEncodeと組み合わせて使用されます。 |
trimLeft | 入力文字列の左側から空白を削除します。 |
trimRight | 入力文字列の右側から空白を削除します。 |
トリム | 入力文字列の左右両側から空白を削除します。 |
農場のWAF設定
このセクションでは、現在のWAFルールセットをHTTPファームに割り当てることができます。
このセクションでは、(shiftキーボードのボタンを押したままにして)1つまたは複数の農場を選択し、それらにWAFルールセットを割り当てるか削除することができます。 二重矢印ボタンを使用して、使用可能なすべてのファームから割り当てまたは削除することもできます。