Azure Front Door 上 Azure Web 應用程式防火牆的自訂規則
Azure Front Door 上的 Azure Web 應用程式防火牆,可讓您根據自行定義的條件來控制 Web 應用程式的存取權。 自訂 Web 應用程式防火牆 (WAF) 規則包含優先順序號碼、規則類型、比對條件和動作。
自訂規則有兩種類型:對比規則和速率限制規則。 比對規則會根據一組比對條件控制存取權。 速率限制規則會根據比對條件和傳入要求的速率來控制存取權。 您可以停用自訂規則,以防止對其進行評估,但仍會保留該設定。
如需速率限制的詳細資訊,請參閱什麼是 Azure Front Door 的速率限制?。
優先順序、動作類型和比對條件
您可以使用定義優先順序編號、規則類型、比對條件陣列和動作的自訂 WAF 規則來控制存取。
優先順序
描述 WAF 規則評估順序的唯一整數。 在具有較高值的規則之前,系統會先評估優先順序較低的規則。 除了記錄以外,規則評估會在任何規則動作上停止。 優先順序編號在所有自訂規則中都必須是唯一的。
動作
定義如何在符合 WAF 規則時路由傳送要求。 您可以選擇下列其中一個動作,以在要求符合自訂規則時套用。
- 允許:WAF 允許要求處理、記錄 WAF 記錄中的項目,然後結束。
- 封鎖:已封鎖要求。 WAF 會將回應傳送至用戶端,而不需要進一步轉送要求。 WAF 會記錄 WAF 記錄中的項目並結束。
- 記錄:WAF 會記錄 WAF 記錄中的項目,並繼續以優先順序評估下一個規則。
- 重新導向:WAF 會將要求重新導向至指定的 URI、記錄 WAF 記錄中的項目,然後結束。
比對條件
定義比對變數、運算子和比對值。 每個規則可能包含多個比對條件。 比對條件可能會以地理位置、用戶端 IP 位址 (CIDR)、大小或字串比對為基礎。 字串比對可以針對相符變數的清單。
比對變數
- RequestMethod
- QueryString
- PostArgs
- RequestUri
- RequestHeader
- RequestBody
- Cookie
運算子
- Any:通常用來定義沒有任何規則相符的預設動作。 Any 是符合所有情況的運算子。
- 等於
- 包含
- LessThan:大小限制
- GreaterThan:大小限制
- LessThanOrEqual:大小限制
- GreaterThanOrEqual:大小限制
- BeginsWith
- EndsWith
- RegEx
Regex
不支援下列作業:
- 反向參考和擷取子運算式
- 任意零寬判斷提示
- 副程式參考和遞迴模式
- 條件式模式
- 回溯控制項動詞
- \C 單一位元組指示詞
- \R 新行比對指示詞
- \K 比對重設指示詞的開始
- 圖說文字和內嵌程式碼
- 不可部分完成的群組和獨吐量詞
否定 [選用]
如果條件的結果應是否定,則您可以將
negate
條件設定為 true。轉換 [選用]
具有要在嘗試比對前進行轉換之名稱的字串清單。 可為下列轉換:
- 大寫
- 小寫
- Trim
- RemoveNulls
- UrlDecode
- UrlEncode
比對值
支援的 HTTP 要求方法值包含:
- GET
- POST
- PUT
- HEAD
- DELETE
- LOCK
- UNLOCK
- 設定檔
- OPTIONS
- PROPFIND
- PROPPATCH
- MKCOL
- 複製
- MOVE
- 修補檔
- CONNECT
範例
請思考一下下列範例。
根據 HTTP 要求參數進行比對
假設您需要設定自訂規則,以允許符合下列兩個條件的要求:
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 原則之後,您需要為規則指定唯一的名稱,並指派優先順序排名。