Azure Front Door 上の Azure Web Application Firewall 用のカスタム ルール
Azure Front Door で Azure Web Application Firewall を使用すると、ユーザーが定義した条件に基づいて Web アプリケーションへのアクセスを制御することができます。 カスタム Web アプリケーション ファイアウォール (WAF) 規則は、優先順位番号、規則の種類、一致条件、およびアクションで構成されます。
カスタム規則には、一致規則とレート制限規則の 2 種類があります。 一致ルールは、一致条件のセットに基づいてアクセスを制御します。 レート制限規則は、一致条件と受信要求のレートに基づいてアクセスを制御します。 カスタム規則を無効にして評価されないようにできますが、その場合でも構成は維持されます。
レート制限の詳細については、「Azure Front Door のレート制限とは」を参照してください。
優先順位、アクションの種類、一致条件
優先順位番号、規則の種類、一致条件の配列、およびアクションが定義されているカスタム WAF 規則で、アクセスを制御できます。
優先順位
WAF 規則の評価の順序を示す一意の整数です。 優先順位値が小さい規則から先に評価されます。 ルールの評価は、"ログ" を除くすべての規則アクションで停止します。 優先順位番号は、すべてのカスタム規則間で一意である必要があります。
操作
WAF 規則が一致した場合に要求をルーティングする方法を定義します。 次のアクションのいずれかを選択して、要求がカスタム規則と一致したときに適用できます。
- "許可" - WAF により、要求の処理が許可され、WAF ログにエントリが記録され、終了します。
- "ブロック" - 要求がブロックされます。 WAF は要求をそれ以上転送せず、クライアントに応答を送信します。 WAF ログにエントリが記録され、終了します。
- "ログ" - WAF によって WAF ログにエントリが記録され、優先順位に従って次の規則の評価が続けられます。
- "リダイレクト" - WAF によって、指定した URI に要求がリダイレクトされ、WAF ログにエントリが記録されて、終了します。
一致条件
一致の変数、演算子、一致の値を定義します。 各規則は、複数の一致条件を含むことができます。 一致条件は、地理的な場所、クライアント IP アドレス (CIDR)、サイズ、または文字列の一致に基づくことができます。 文字列の照合は、一致変数の一覧に対して行うことができます。
一致変数
- RequestMethod
- QueryString
- PostArgs
- RequestUri
- RequestHeader
- RequestBody
- クッキー
Operator
- Any: 一致する規則がない場合の既定のアクションを定義するためによく使用されます。 Any はすべての演算子と一致します。
- 等しい
- Contains
- LessThan: サイズの制約
- GreaterThan: サイズの制約
- LessThanOrEqual: サイズの制約
- GreaterThanOrEqual: サイズの制約
- BeginsWith
- EndsWith
- Regex
Regex
次の操作はサポートされていません。
- 前方参照と部分式のキャプチャ
- 任意のゼロ幅アサーション
- サブルーチン参照と再帰パターン
- 条件付きパターン
- バックトラッキング制御動詞
- \C 1 バイト ディレクティブ
- \R 改行一致ディレクティブ
- \K 一致の開始のリセット ディレクティブ
- コールアウトと埋め込みコード
- アトミック グループ化と所有の量指定子
Negate (否定) [省略可能]
条件の結果を否定する必要がある場合は、"
negate
" 条件を true に設定できます。Transform (変換) [省略可能]
一致が試行される前に実行する変換の名前の文字列の一覧。 次の変換を指定できます。
- 大文字
- 小文字
- Trim
- RemoveNulls
- UrlDecode
- UrlEncode
一致値
次の HTTP 要求メソッドの値がサポートされています。
- GET
- POST
- PUT
- HEAD
- DELETE
- LOCK
- UNLOCK
- PROFILE
- OPTIONS
- PROPFIND
- PROPPATCH
- MKCOL
- COPY
- MOVE
- PATCH
- CONNECT
例
次の例を考えてみます。
HTTP 要求パラメーターに基づく一致
次の 2 つの条件に一致する要求を許可するようにカスタム規則を構成する必要があるとします。
Referer
ヘッダーの値は既知の値と等しくなります。- クエリ文字列に "
password
" という単語が含まれていません。
カスタム ルールの JSON の説明の例を次に示します。
{
"name": "AllowFromTrustedSites",
"priority": 1,
"ruleType": "MatchRule",
"matchConditions": [
{
"matchVariable": "RequestHeader",
"selector": "Referer",
"operator": "Equal",
"negateCondition": false,
"matchValue": [
"www.mytrustedsites.com/referpage.html"
]
},
{
"matchVariable": "QueryString",
"operator": "Contains",
"matchValue": [
"password"
],
"negateCondition": true
}
],
"action": "Allow"
}
HTTP PUT 要求をブロックする
HTTP PUT メソッドを使用するすべての要求をブロックする必要があるとします。
カスタム ルールの JSON の説明の例を次に示します。
{
"name": "BlockPUT",
"priority": 2,
"ruleType": "MatchRule",
"matchConditions": [
{
"matchVariable": "RequestMethod",
"selector": null,
"operator": "Equal",
"negateCondition": false,
"matchValue": [
"PUT"
]
}
],
"action": "Block"
}
サイズ制約
Azure Front Door の WAF を使用すると、受信要求に長さまたはサイズの制約を適用するカスタム ルールを作成できます。 このサイズ制約は、バイト単位で測定されます。
URL が 100 文字を超える要求をブロックする必要があるとします。
カスタム ルールの JSON の説明の例を次に示します。
{
"name": "URLOver100",
"priority": 5,
"ruleType": "MatchRule",
"matchConditions": [
{
"matchVariable": "RequestUri",
"selector": null,
"operator": "GreaterThanOrEqual",
"negateCondition": false,
"matchValue": [
"100"
]
}
],
"action": "Block"
}
要求 URI に基づいて照合する
URI に 'login' が含まれている要求を許可する必要があるとします。
カスタム ルールの JSON の説明の例を次に示します。
{
"name": "URIContainsLogin",
"priority": 5,
"ruleType": "MatchRule",
"matchConditions": [
{
"matchVariable": "RequestUri",
"selector": null,
"operator": "Contains",
"negateCondition": false,
"matchValue": [
"login"
]
}
],
"action": "Allow"
}
カスタム規則のコピーと複製
カスタム規則は、特定のポリシー内で複製できます。 規則を複製する場合は、規則の一意の名前と一意の優先度の値を指定する必要があります。 さらに、ポリシーが両方とも同じサブスクリプション内にあれば、カスタム規則を Azure Front Door WAF ポリシー間でコピーできます。 ポリシー間でルールをコピーする場合は、ルールをコピーする先の Azure Front Door WAF ポリシーを選ぶ必要があります。 WAF ポリシーを選んだら、規則に一意の名前を付け、優先順位を割り当てる必要があります。