Contents [show]
このセクションには、現在のWAFルールセットに使用可能なすべての設定が3つのタブで整理されて表示されます。 グローバル, キャンペーンのルール、 農場. このセクションの変更は、 お申し込み ボタン。
グローバル設定WAFルールセット
この設定は、セットに含まれているすべてのルールの動作を管理します。
お名前. ルールを簡単に識別できるラベル。 ルールセットに名前を付けるために選択したラベルは変更できません。
リクエスト本文を確認してください. HTTP リクエストの本文を分析するかどうかを設定するフラグです。 このフラグが無効になっている場合、本文はスキップされ、リクエスト本文パラメータに対するルールの一致は処理されません。
リクエストボディ制限. これは、ボディ リクエストを検査するために保存されるリクエスト ボディの最大バイト数です。 このパラメーターの値が 0 の場合、WAF は content-length サイズを完全に保存します。 任意の制限値を設定することをお勧めします。
レスポンスボディを確認する. HTTP レスポンスのボディを解析する場合に設定するフラグです。 このフラグが無効になっている場合、本文はスキップされ、応答本文パラメータに対するルールの一致は処理されません。 より大きい応答 524288 (512KB) は無視されます。
デフォルトのアクション. この選択ボックスは、ルールで解像度が指定されていない場合のデフォルトの解像度として使用されます。 ルールのすべての一致が成功します。 ここでは、各アクションについて簡単に説明します。
- 次を許可します。. HTTP トランザクションが完了するまで、現在の WAF の処理を有効にします。
- 合格. WAF は、HTTP トランザクションを切断することなく、次のルールの評価を続行します。
- 否定する. 現在の HTTP トランザクションを終了します。 これ以上のルールの評価は許可されません。 フェーズ 1 または 2 (リクエストの分析) でルールが一致した場合、リクエストはバックエンドに配信されません。 フェーズ 3 または 4 (応答の分析) でルールが一致した場合、応答はクライアントに配信されません。
- リダイレクト。 HTTPトランザクションは停止され、HTTPリダイレクトがクライアントに送信されます。
リダイレクトURL. ルールが一致したときにクライアントに送信される URL です。 この URL にはリダイレクト解決が設定されています。
デフォルトフェーズ. この選択ボックスは、ルールでフェーズが指定されていない場合のデフォルト フェーズとして使用されます。 フェーズは、WAF ルールをフックできるようにする HTTP ステップです。 定義されたフェーズは次のとおりです。
- リクエストヘッダを受信。 クライアントからのすべてのリクエストヘッダがロードバランサによって読み込まれると、ルールが実行されます。
- リクエストボディを受け取る。 クライアントからの完全なリクエストボディがロードバランサにバッファリングされると、ルールが実行されます。
- レスポンスリーダーが届く。 サーバーからのすべての応答ヘッダーがロードバランサーによって読み取られると、ルールが実行されます。
- レスポンスボディを受け取る。 サーバーからの完全な応答本文がロードバランサによって読み取られると、ルールが実行されます。
- ロギング前より。 WAFプロセスがロギングタスクを終了すると、ルールが実行されます。
デフォルトのログ. これはログのデフォルト アクションです。 この値は、ルール設定でログに関するアクションが指定されていない場合に使用されます。
ロギングのみ. このチェックボックスが有効になっている場合、セット内のルールの解決パラメーターは実行されません。 この作業モードは、セットが実行されている場合にのみ使用できます。
ルールを無効にする
それらのテーブルはそれらを修正することなくセットのルールを無効にすることを可能にします。
有効なルール。 セットで現在有効になっているルールのリストです。 規則は、 ルールID とその 説明 パラメーター。
無効なルール。 セット内で現在無効になっているルールのリストです。
WAF規則のリスト
キャンペーンのルール このセクションでは、HTTP 攻撃を検出して防御する WAF ルールを作成および変更できます。
これらのルールは、順番に評価されるディレクティブです。つまり、この画面に表示されているのと同じ順序で評価されます。 ルールを並べ替える必要がある場合は、 並び替え ボタンをクリックし、要求された位置にドラッグ アンド ドロップします。
ルールに使用できるパラメータについては、以下で説明しています。
ID. ルールセット内のルールを識別するための識別子です。 この識別子は、セット内のルールの位置に対応しています。
ルールID. これはルールの一意の識別子です。 同じルール ID を持つ XNUMX つのルールを含む waf セットにファームをリンクすることはできません。
説明. ルールを識別するための説明メッセージです。 このメッセージは、一致が成功した場合に記録されます。
相. フェーズは、ルールが実行される HTTP 要求のステップを表します。 可能なフェーズは次のとおりです。
- リクエストヘッダを受信。 クライアントからのすべてのリクエストヘッダがロードバランサによって読み込まれると、ルールが実行されます。
- リクエストボディを受け取る。 クライアントからの完全なリクエストボディがロードバランサにバッファリングされると、ルールが実行されます。
- レスポンスリーダーが届く。 サーバーからのすべての応答ヘッダーがロードバランサーによって読み取られると、ルールが実行されます。
- レスポンスボディを受け取る。 サーバーからの完全な応答本文がロードバランサによって読み取られると、ルールが実行されます。
- ロギング前より。 WAFプロセスがロギングタスクを終了すると、ルールが実行されます。
分解能. この選択ボックスは、すべての一致条件が達成された場合に実行するために選択されたアクションです。
- 次を許可します。。 このアクションを持つルールが一致すると、(現在のHTTPトランザクションに対して)これ以上ルールは評価されません。
- 合格. WAF は、HTTP トランザクションを切断することなく、次のルールの評価を続行します。
- 否定する. 現在の HTTP トランザクションを終了します。 ルールの評価はもうありません。 フェーズ 1 または 2 (リクエストの分析) でルールが一致した場合、リクエストはバックエンドに配信されません。 フェーズ 3 または 4 (応答の分析) でルールが一致した場合、応答はクライアントに配信されません。
- リダイレクト。 HTTPトランザクションは停止され、HTTPリダイレクトがクライアントに送信されます。
- デフォルトのアクション. 何も適用しない場合、解像度が設定されます。 通常、それは 次を許可します。 分解能
リダイレクトURL. ルールがリダイレクトを実行する場合に、クライアントがリダイレクトされる URL です。 このパラメーターは、解決フィールドでリダイレクトが選択されたときに表示されます。
スキップ. すべての一致が達成された場合、ルールはこのフィールドで指定された数のルールをスキップします。
後にスキップ. すべての一致が達成されると、ルールは別のファイアウォール位置にジャンプします。 ルールは、「マーク」または別のルール ID にジャンプできます。 ルール ID はジャンプ後に実行され、現在のルールと同じフェーズになります。
実行する. LUA スクリプトへのパスです。 スクリプトは、事前にロード バランサーにアップロードする必要があります。 最初の一致が達成されると実行されます。
ログ. このパラメーターを有効にすると、最初の一致が達成されたときにルールがログに記録されます。
rawでWAFルールを編集する
フォームが特定の WAF ルールを適切に説明しておらず、管理者がそのルールに精通していない場合 SecLang 構文を使用すると、編集オプションを使用してルールまたはルールのバッチを作成できます。 このフィールドは、すべての指示を受け入れます。 命令とパラメータがサポートされている場合 SecLang 構文では、フォームで表現されるパラメーターは表示されません。 ただし、それらは編集フォームに表示され、実行時に処理されます。
フォーム モードと raw モードの両方の例を次に示します。
フォームモード
これは、WAF ルールを編集するためのよりユーザーフレンドリーなモードです。
Raw モード
WAFルールを作成する
新しいルールが追加されると、セットの他のルールに追加されます。 新しいルールを作成するには、新しいルールを作成する方法が XNUMX つあります。
- アクション. フォームを使用して基本ルールを作成します。 フォームのパラメーターは、 WAF規則のリスト セクション。 ルールの実行が条件付きの場合は、 条件を追加 実行条件を設定します。
- Mark Hodder. ファイアウォールマークを設定します。 これらのマークは、一致条件が達成されると使用されます。 期待されるパラメータは、マークを識別する名前です。
- カスタム. このフォームは、SecLang 構文の規則 (および規則のバッチ) を受け入れます。 詳細については、 SecLang 構文については、 libmodsecurityプロジェクトのドキュメント.
条件リスト
下の画像の表は、HTTP 解析済みパケットが適用されるルールに一致する必要がある条件のリストを示しています。 これらの一致はすべて、ルールで定義されたフェーズで実行されます。 一致は順次チェックされ、すべてが達成された場合にルールが適用されます。
一致を評価するために、WAF は操作を実行します (パラメーター 演算子 及び オペレーティング) 変数のリストに対して。 リスト内のいくつかの変数が操作に準拠している場合、それらは成功したと見なされます。 たとえば、次の画像では、ヘッダー IMAGES クライアントから送信された要求ヘッダーのリストで検索されます。 まず、各ヘッダーの 64 ベースごとにデコードし、ヘッダーを小文字に変換します。 変数の変換が完了すると、正規表現が適用され、文字列が検索されます 画像 変換された変数のリスト。 の マルチマッチ optionは各変換操作(基本64デコード後および小文字変換後)に対して一致を試みます。
条件を作成する
一致は、WAF ルールを実行するために達成する必要がある条件を構築します。 一致を評価するために、WAF は操作を実行します (パラメーター 演算子 及び オペレーティング) 変数のリストに対して。 演算とリストの変数が一致した場合、一致は成功したと見なされます。 たとえば、 ローカルホスト (127.0.0.1) リクエストヘッダーリストと仮想ホストのHTTPフィールドでは、次の設定で評価できます。
これらは、条件を設定するための構成パラメーターです。
変数. ルールが照合しようとする HTTP トランザクションの部分を示します。 リストされた変数から選択でき、それらのいくつかが一致する場合、一致は有効と見なされます。 変数フィールドをクリックすると、ドロップダウン メニューが表示されます。 変数構成に関する情報は、 変数を作成する のセクションから無料でダウンロードできます。
変換. 変換は、変数に適用される変更のリストです。 変換は、フィールドに表示されているのと同じ順序で順次適用されます。複数一致オプションを使用して、適用された各変換に対して一致を試みることができます。 変換によって HTTP トランザクションの情報が変更されることはありません。それらは一時的なコンテキストに保存され、操作が完了すると削除されます。 ここに 変換のリストです。 このパラメーターは、回避回避テクニックを削除するか、コード化データを削除するために使用されます。
演算子. これは、ルールが一致を試みる方法です。 このパラメータは通常、 オペレーティング. ここに 演算子のリストです。
オペレーティング. これは、ルールが試合で試みるものです。 パラメータは通常、演算子と組み合わされます。 期待される値の型は、演算子と一致する必要があります。
マルチマッチ. このパラメーターは、複数の変換が構成されている場合に使用されます。 ルールは変数を一致させようとします。 演算子、 そしてその オペレーティング 変換の各値に対して。 可能な値は次のとおりです。複数一致を有効にする true、または複数一致機能を無効にする false。
Not Match. このチェックボックスが有効になっている場合、一致の結果は否定され、次のように変換されます。 true when the result is false またはに変換する false when the result is true.
変数を作成する
変数は、一致条件の必須パラメーターです。 彼らはHTTPの一部を選択します 要求/応答 情報を探します。
Variables. このパラメーターは、情報 (時間、サーバーなど) を検索するための HTTP 要求/応答のフィールドを指定します。
変数の引数. 変数が選択されている場合、その変数から要素を指定する必要がある場合があります。 たとえば、次の画像は、リクエスト ヘッダーがどのように処理されるかを示しています。 host 選択がチェックされています。
変数の要素を数える. このチェックボックスは、変数内の要素の数をカウントします。 この機能は、変数がリストの場合に便利です。
一致するこの変数を無視します. このチェックボックスが有効になっている場合、変数は一致でチェックされません。 この機能は、値のリストを含む変数をチェックするときに便利ですが、そのうちの XNUMX つを除外する必要もあります。
変数テーブル
変数 | 説明 |
---|---|
ARGS | リクエストの引数の値のコレクションです。 |
ARGS_JSON | JSON リクエストの引数の値を持つコレクションです。 この変数は、WAF が JSON 引数を解析する場合に使用できます。 ルール セット REQUEST-901-INITIALIZATION を有効にする必要があります。 |
ARGS_COMBINED_SIZE | リクエストパラメータの合計サイズ。 ファイルは除外されます。 |
ARGS_NAMES | これは、リクエスト内の引数の名前のコレクションです。 |
ファイル | ユーザー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 | これは、すべてのリクエスト Cookie 値のリストです。 |
REQUEST_COOKIES_NAMES | これは、すべてのリクエスト Cookie 名のリストです。 |
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 またはフレーズ演算子でキャプチャされた値を保存します。 |
オペレータの表
演算子は異なるコンテキストを持つことができます。 このコンテキストは、整数の場合は int、IP 操作の場合は IP、文字列の場合は str、データを検証する場合は validate などの接頭辞で示されます。
変数 | 説明 |
---|---|
strBegins | いずれかの変数がoperatingの値で始まっていれば、規則は一致します。 |
strContains | いずれかの変数にoperatingの値が含まれていれば、規則は一致します。 |
strContainsWord | いずれかの変数に単語または操作の値が含まれている場合、ルールは一致します。 |
ストエンド | いずれかの変数がoperatingの値で終わっていれば、規則は一致します。 |
strWithin | いずれかの変数が operating の値で始まる場合、ルールは一致します。 |
strMatch | いずれかの変数が operating の値と一致する場合、ルールは一致します。 この操作は、文字で分割された文字列のリストにすることができます | |
strEq | いずれかの変数が操作の値と同一である場合、ルールは一致します。 |
strRegex | いずれかの変数が操作で使用される正規表現と一致する場合、ルールは一致します。 |
strPhrase | いずれかの変数が動作中のリストのいずれかの値と一致する場合、ルールは一致します。 |
strPhrasesFromFile | 演算子 strPhrases とほとんど同じですが、操作はフレーズのリストとして定義される場所です。 |
intEQ | いずれかの変数が操作に使用された数と等しい場合、規則は一致します。 |
intGE | いずれかの変数が操作に使用された数以上の場合、ルールは一致します。 |
intGT | いずれかの変数が操作に使用された数より大きい場合、ルールは一致します。 |
intLE | いずれかの変数が操作に使用された数以下の場合、ルールは一致します。 |
intLT | いずれかの変数が操作に使用された数より小さい場合、ルールは一致します。 |
detectSQLi | 変数のリストで SQL インジェクションを検出します。 このオペレーターは操作を想定していません。 |
detectXSS | XSS インジェクションの検出を変数のリストに適用します。 このオペレーターは操作を想定していません。 |
ipMatch | 動作中の IP またはネットワーク セグメントと変数のリストの照合を試みます。 |
ipMatchFromFile | これはオペレーター ipMatch と同じですが、これは IP とネットワーク セグメントのリストを含むファイルに対して変数の一致を試みます。 |
validateByteRange | これにより、変数のバイト数が動作値の 10 つに含まれるようになります。 操作例は「13、32、126-XNUMX」です。 |
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 エスケープ規則を使用してエンコードされた文字をデコードします。 この関数は、デコード プロセスで最大 XNUMX バイトしか使用しません。つまり、CSS エンコーディングを使用してエンコードされた ASCII 文字 (通常はエンコードされません) を明らかにするため、またはバックスラッシュと非スラッシュの組み合わせである回避に対抗するために使用されます。 -XNUMX 進文字 (たとえば、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ファームに割り当てることができます。
このセクションでは、(シフト キーボード ボタンを押したままにして) XNUMX つまたは複数のファームを選択し、WAF ルール セットを割り当てたり、それらを削除したりできます。 二重矢印ボタンを使用して、利用可能なすべてのファームから割り当てまたは削除することもできます。