Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Firewall webových aplikací (WAF) v2 na Azure Application Gateway poskytuje ochranu pro webové aplikace. Tuto ochranu poskytuje základní sada pravidel CRS (Open Web Application Security Project) (OWASP). V některých případech možná budete muset vytvořit vlastní pravidla, aby vyhovovala vašim konkrétním potřebám. Další informace o vlastních pravidlech WAF najdete v tématu Přehled pravidel firewallu vlastních webových aplikací.
Tento článek ukazuje několik ukázkových vlastních pravidel, která můžete vytvořit a používat s WAF v2. Informace o nasazení WAF s vlastním pravidlem pomocí Azure PowerShellu najdete v tématu Konfigurace vlastních pravidel firewallu webových aplikací pomocí Azure PowerShellu.
Fragmenty kódu JSON uvedené v tomto článku jsou odvozeny z prostředku ApplicationGatewayWebApplicationFirewallPolicies .
Poznámka:
Pokud vaše aplikační brána nepoužívá vrstvu WAF, zobrazí se v pravém podokně možnost upgradovat aplikační bránu na vrstvu WAF.
Příklad 1
Víte, že existuje robot s názvem evilbot, který chcete zablokovat, aby nemohl procházet váš web. V takovém případě v hlavičce požadavku zablokujete user-agenta evilbot .
Logika: p
$variable = New-AzApplicationGatewayFirewallMatchVariable `
-VariableName RequestHeaders `
-Selector User-Agent
$condition = New-AzApplicationGatewayFirewallCondition `
-MatchVariable $variable `
-Operator Contains `
-MatchValue "evilbot" `
-Transform Lowercase `
-NegationCondition $False
$rule = New-AzApplicationGatewayFirewallCustomRule `
-Name blockEvilBot `
-Priority 2 `
-RuleType MatchRule `
-MatchCondition $condition `
-Action Block `
-State Enabled
Odpovídající JSON:
{
"customRules": [
{
"name": "blockEvilBot",
"priority": 2,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RequestHeaders",
"selector": "User-Agent"
}
],
"operator": "Contains",
"negationCondition": false,
"matchValues": [
"evilbot"
],
"transforms": [
"Lowercase"
]
}
]
}
]
}
Pokud chcete zobrazit WAF nasazený pomocí tohoto vlastního pravidla, přečtěte si téma Konfigurace vlastního pravidla firewallu webových aplikací pomocí Azure PowerShellu.
Příklad 1a
Stejného výsledku můžete dosáhnout pomocí regulárního výrazu:
$variable = New-AzApplicationGatewayFirewallMatchVariable `
-VariableName RequestHeaders `
-Selector User-Agent
$condition = New-AzApplicationGatewayFirewallCondition `
-MatchVariable $variable `
-Operator Regex `
-MatchValue "evilbot" `
-Transform Lowercase `
-NegationCondition $False
$rule = New-AzApplicationGatewayFirewallCustomRule `
-Name blockEvilBot `
-Priority 2 `
-RuleType MatchRule `
-MatchCondition $condition `
-Action Block `
-State Enabled
Odpovídající JSON:
{
"customRules": [
{
"name": "blockEvilBot",
"priority": 2,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RequestHeaders",
"selector": "User-Agent"
}
],
"operator": "Regex",
"negationCondition": false,
"matchValues": [
"evilbot"
],
"transforms": [
"Lowercase"
]
}
]
}
]
}
Příklad 2
Chcete povolit provoz jenom z USA pomocí operátoru GeoMatch a přesto platí spravovaná pravidla:
$variable = New-AzApplicationGatewayFirewallMatchVariable `
-VariableName RemoteAddr `
$condition = New-AzApplicationGatewayFirewallCondition `
-MatchVariable $variable `
-Operator GeoMatch `
-MatchValue "US" `
-Transform Lowercase `
-NegationCondition $True
$rule = New-AzApplicationGatewayFirewallCustomRule `
-Name "allowUS" `
-Priority 2 `
-RuleType MatchRule `
-MatchCondition $condition `
-Action Block `
-State Enabled
Odpovídající JSON:
{
"customRules": [
{
"name": "allowUS",
"priority": 2,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RemoteAddr"
}
],
"operator": "GeoMatch",
"negationCondition": true,
"matchValues": [
"US"
],
"transforms": [
"Lowercase"
]
}
]
}
]
}
Příklad 3
Chcete blokovat všechny požadavky z IP adres v rozsahu 198.168.5.0/24.
V tomto příkladu zablokujete veškerý provoz, který pochází z rozsahu IP adres. Název pravidla je myrule1 a priorita je nastavená na 10.
Logika: p
$variable1 = New-AzApplicationGatewayFirewallMatchVariable `
-VariableName RemoteAddr
$condition1 = New-AzApplicationGatewayFirewallCondition `
-MatchVariable $variable1 `
-Operator IPMatch `
-MatchValue "192.168.5.0/24" `
-NegationCondition $False
$rule = New-AzApplicationGatewayFirewallCustomRule `
-Name myrule1 `
-Priority 10 `
-RuleType MatchRule `
-MatchCondition $condition1 `
-Action Block `
-State Enabled
Odpovídající JSON:
{
"customRules": [
{
"name": "myrule1",
"priority": 10,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RemoteAddr"
}
],
"operator": "IPMatch",
"negationCondition": false,
"matchValues": [
"192.168.5.0/24"
],
"transforms": []
}
]
}
]
}
Odpovídající pravidlo CRS: SecRule REMOTE_ADDR "@ipMatch 192.168.5.0/24" "id:7001,deny"
Příklad 4
V tomto příkladu chcete blokovat user-agent evilbot a provoz v rozsahu 192.168.5.0/24. K provedení této akce můžete vytvořit dvě samostatné podmínky shody a obě je umístit do stejného pravidla. Tato konfigurace zajišťuje, že pokud se v hlavičce User-Agent shoduje evilbot a IP adresy z rozsahu 192.168.5.0/24, pak je požadavek zablokován.
Logika: p a q
$variable1 = New-AzApplicationGatewayFirewallMatchVariable `
-VariableName RemoteAddr
$variable2 = New-AzApplicationGatewayFirewallMatchVariable `
-VariableName RequestHeaders `
-Selector User-Agent
$condition1 = New-AzApplicationGatewayFirewallCondition `
-MatchVariable $variable1 `
-Operator IPMatch `
-MatchValue "192.168.5.0/24" `
-NegationCondition $False
$condition2 = New-AzApplicationGatewayFirewallCondition `
-MatchVariable $variable2 `
-Operator Contains `
-MatchValue "evilbot" `
-Transform Lowercase `
-NegationCondition $False
$rule = New-AzApplicationGatewayFirewallCustomRule `
-Name myrule `
-Priority 10 `
-RuleType MatchRule `
-MatchCondition $condition1, $condition2 `
-Action Block `
-State Enabled
Odpovídající JSON:
{
"customRules": [
{
"name": "myrule",
"priority": 10,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RemoteAddr"
}
],
"operator": "IPMatch",
"negationCondition": false,
"matchValues": [
"192.168.5.0/24"
],
"transforms": []
},
{
"matchVariables": [
{
"variableName": "RequestHeaders",
"selector": "User-Agent"
}
],
"operator": "Contains",
"negationCondition": false,
"matchValues": [
"evilbot"
],
"transforms": [
"Lowercase"
]
}
]
}
]
}
Příklad 5
V tomto příkladu chcete blokovat, pokud je požadavek mimo rozsah IP adres 192.168.5.0/24, nebo řetězec uživatelského agenta není chrome (to znamená, že uživatel nepoužívá prohlížeč Chrome). Vzhledem k tomu, že tato logika používá nebo, jsou tyto dvě podmínky v samostatných pravidlech, jak je vidět v následujícím příkladu. myrule1 a myrule2 obě musejí být splněny, aby byl zablokován provoz.
Logika: ne (p a q) = ne p nebo ne q.
$variable1 = New-AzApplicationGatewayFirewallMatchVariable `
-VariableName RemoteAddr
$variable2 = New-AzApplicationGatewayFirewallMatchVariable `
-VariableName RequestHeaders `
-Selector User-Agent
$condition1 = New-AzApplicationGatewayFirewallCondition `
-MatchVariable $variable1 `
-Operator IPMatch `
-MatchValue "192.168.5.0/24" `
-NegationCondition $True
$condition2 = New-AzApplicationGatewayFirewallCondition `
-MatchVariable $variable2 `
-Operator Contains `
-MatchValue "chrome" `
-Transform Lowercase `
-NegationCondition $True
$rule1 = New-AzApplicationGatewayFirewallCustomRule `
-Name myrule1 `
-Priority 10 `
-RuleType MatchRule `
-MatchCondition $condition1 `
-Action Block `
-State Enabled
$rule2 = New-AzApplicationGatewayFirewallCustomRule `
-Name myrule2 `
-Priority 20 `
-RuleType MatchRule `
-MatchCondition $condition2 `
-Action Block `
-State Enabled
Odpovídající JSON:
{
"customRules": [
{
"name": "myrule1",
"priority": 10,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RemoteAddr"
}
],
"operator": "IPMatch",
"negationCondition": true,
"matchValues": [
"192.168.5.0/24"
],
"transforms": []
}
]
},
{
"name": "myrule2",
"priority": 20,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RequestHeaders",
"selector": "User-Agent"
}
],
"operator": "Contains",
"negationCondition": true,
"matchValues": [
"chrome"
],
"transforms": [
"Lowercase"
]
}
]
}
]
}
Příklad 6
Chcete povolit pouze požadavky od konkrétních známých uživatelských agentů.
Vzhledem k tomu, že zde použitá logika je nebo a všechny hodnoty jsou v hlavičce User-Agent , můžou být všechny hodnoty MatchValues v seznamu odděleném čárkami.
Logika: p nebo q nebo r
$variable = New-AzApplicationGatewayFirewallMatchVariable `
-VariableName RequestHeaders `
-Selector User-Agent
$condition = New-AzApplicationGatewayFirewallCondition `
-MatchVariable $variable `
-Operator Equal `
-MatchValue @('user1', 'user2') `
-NegationCondition $True
$rule = New-AzApplicationGatewayFirewallCustomRule `
-Name BlockUnknownUserAgents `
-Priority 2 `
-RuleType MatchRule `
-MatchCondition $condition `
-Action Block `
-State Enabled
Odpovídající JSON:
{
"customRules": [
{
"name": "BlockUnknownUserAgents",
"priority": 2,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RequestHeaders",
"selector": "User-Agent"
}
],
"operator": "Equal",
"negationCondition": true,
"matchValues": [
"user1",
"user2"
],
"transforms": []
}
]
}
]
}
Příklad 7
Není neobvyklé vidět službu Azure Front Door nasazenou před službou Application Gateway. Pokud chcete zajistit, aby provoz přijatý službou Application Gateway pochází z nasazení služby Front Door, osvědčeným postupem je zkontrolovat, jestli hlavička X-Azure-FDID obsahuje očekávanou jedinečnou hodnotu. Další informace o zabezpečení přístupu k vaší aplikaci pomocí služby Azure Front Door najdete v tématu Jak uzamknout přístup k back-endu pouze ke službě Azure Front Door.
Logika: ne p
$expectedFDID = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$variable = New-AzApplicationGatewayFirewallMatchVariable `
-VariableName RequestHeaders `
-Selector X-Azure-FDID
$condition = New-AzApplicationGatewayFirewallCondition `
-MatchVariable $variable `
-Operator Equal `
-MatchValue $expectedFDID `
-Transform Lowercase `
-NegationCondition $True
$rule = New-AzApplicationGatewayFirewallCustomRule `
-Name blockNonAFDTraffic `
-Priority 2 `
-RuleType MatchRule `
-MatchCondition $condition `
-Action Block `
-State Enabled
Odpovídající JSON:
{
"customRules": [
{
"name": "blockNonAFDTraffic",
"priority": 2,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RequestHeaders",
"selector": "X-Azure-FDID"
}
],
"operator": "Equal",
"negationCondition": true,
"matchValues": [
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
],
"transforms": [
"Lowercase"
]
}
]
}
]
}
Další krok
Po vytvoření vlastních pravidel se dozvíte, jak zobrazit protokoly WAF. Další informace najdete v tématu Diagnostika služby Application Gateway.