Egyéni Web Application Firewall v2-szabályok létrehozása és használata az Application Gatewayben
A webalkalmazási tűzfal (WAF) v2 a Azure-alkalmazás Gatewayen védelmet biztosít a webalkalmazások számára. Ezt a védelmet az Open Web Application Security Project (OWASP) alapvető szabálykészlete (CRS) biztosítja. Bizonyos esetekben előfordulhat, hogy saját egyéni szabályokat kell létrehoznia az igényeinek megfelelően. További információ a WAF egyéni szabályairól: Egyéni webalkalmazási tűzfalszabályok áttekintése.
Ez a cikk néhány példát mutat be az egyéni szabályokra, amelyeket a v2 WAF használatával hozhat létre és használhat. Ha tudni szeretné, hogyan helyezhet üzembe WAF-et egyéni szabvánnyal az Azure PowerShell használatával, olvassa el a WebAlkalmazási tűzfal egyéni szabályainak konfigurálása az Azure PowerShell használatával című témakört.
A cikkben bemutatott JSON-kódrészletek egy ApplicationGatewayWebApplicationFirewallPolicies erőforrásból származnak.
Megjegyzés:
Ha az application gateway nem a WAF-szintet használja, a jobb oldali panelen megjelenik az alkalmazásátjáró WAF-szintre való frissítésének lehetősége.
1\. példa
Tudja, hogy van egy evilbot nevű robot, amelyet meg szeretne akadályozni a webhely bejárásában. Ebben az esetben letiltja a User-Agent evilbotot a kérés fejléceiben.
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
És itt van a megfelelő JSON:
{
"customRules": [
{
"name": "blockEvilBot",
"priority": 2,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RequestHeaders",
"selector": "User-Agent"
}
],
"operator": "Contains",
"negationConditon": false,
"matchValues": [
"evilbot"
],
"transforms": [
"Lowercase"
]
}
]
}
]
}
Az egyéni szabály használatával üzembe helyezett WAF megtekintéséhez lásd : Webalkalmazási tűzfal egyéni szabály konfigurálása az Azure PowerShell használatával.
1a. példa
Ugyanezt egy reguláris kifejezéssel is elvégezheti:
$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
És a megfelelő JSON:
{
"customRules": [
{
"name": "blockEvilBot",
"priority": 2,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RequestHeaders",
"selector": "User-Agent"
}
],
"operator": "Regex",
"negationConditon": false,
"matchValues": [
"evilbot"
],
"transforms": [
"Lowercase"
]
}
]
}
]
}
2\. példa
Csak a GeoMatch operátorral szeretné engedélyezni a forgalmat a Egyesült Államok, és továbbra is alkalmazni kell a felügyelt szabályokat:
$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
És a megfelelő JSON:
{
"customRules": [
{
"name": "allowUS",
"priority": 2,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RemoteAddr"
}
],
"operator": "GeoMatch",
"negationConditon": true,
"matchValues": [
"US"
],
"transforms": [
"Lowercase"
]
}
]
}
]
}
3. példa
A 198.168.5.0/24 tartományban lévő IP-címekről érkező összes kérést le szeretné tiltani.
Ebben a példában letiltja az IP-címtartományból érkező összes forgalmat. A szabály neve myrule1 , a prioritás értéke pedig 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
Íme a megfelelő JSON:
{
"customRules": [
{
"name": "myrule1",
"priority": 10,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RemoteAddr"
}
],
"operator": "IPMatch",
"negationConditon": false,
"matchValues": [
"192.168.5.0/24"
],
"transforms": []
}
]
}
]
}
Megfelelő CRS-szabály: SecRule REMOTE_ADDR "@ipMatch 192.168.5.0/24" "id:7001,deny"
4. példa
Ebben a példában szeretné letiltani a User-Agent evilbotot, és a forgalmat a 192.168.5.0/24 tartományban. A művelet végrehajtásához két külön egyezési feltételt hozhat létre, és mindkettőt ugyanabba a szabályba helyezheti. Ez a konfiguráció biztosítja, hogy a User-Agent fejlécében és a 192.168.5.0/24 tartomány ip-címeiben szereplő evilbot is egyezzen, akkor a kérés le lesz tiltva.
Logika: p és 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
Íme a megfelelő JSON:
{
"customRules": [
{
"name": "myrule",
"priority": 10,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RemoteAddr"
}
],
"operator": "IPMatch",
"negationConditon": false,
"matchValues": [
"192.168.5.0/24"
],
"transforms": []
},
{
"matchVariables": [
{
"variableName": "RequestHeaders",
"selector": "User-Agent"
}
],
"operator": "Contains",
"negationConditon": false,
"matchValues": [
"evilbot"
],
"transforms": [
"Lowercase"
]
}
]
}
]
}
5. példa
Ebben a példában azt szeretné letiltani, hogy a kérés a 192.168.5.0/24 IP-címtartományon kívül esik-e, vagy a felhasználói ügynök sztringje nem chrome (vagyis a felhasználó nem a Chrome böngészőt használja). Mivel ez a logika használja , vagy a két feltétel külön szabályokban van, az alábbi példában látható módon. A myrule1-nek és a myrule2-nek is egyeznie kell a forgalom blokkolásához.
Logika: nem (p és q) = nem p vagy nem 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
És a megfelelő JSON:
{
"customRules": [
{
"name": "myrule1",
"priority": 10,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RemoteAddr"
}
],
"operator": "IPMatch",
"negationConditon": 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",
"negationConditon": true,
"matchValues": [
"chrome"
],
"transforms": [
"Lowercase"
]
}
]
}
]
}
6. példa
Csak bizonyos ismert felhasználói ügynököktől érkező kéréseket szeretne engedélyezni.
Mivel az itt használt logika vagy az összes érték a User-Agent fejlécben található, az összes MatchValues vesszővel tagolt listában lehet.
Logika: p vagy q vagy 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
Megfelelő JSON:
{
"customRules": [
{
"name": "BlockUnknownUserAgents",
"priority": 2,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RequestHeaders",
"selector": "User-Agent"
}
],
"operator": "Equal",
"negationConditon": true,
"matchValues": [
"user1",
"user2"
],
"transforms": []
}
]
}
]
}
7. példa
Nem ritka, hogy az Azure Front Door az Application Gateway előtt van üzembe helyezve. Annak érdekében, hogy az Application Gateway által fogadott forgalom a Front Door üzemelő példányából származhasson, az ajánlott eljárás annak ellenőrzése, hogy a X-Azure-FDID
fejléc tartalmazza-e a várt egyedi értéket. Az alkalmazáshoz való hozzáférés Azure Front Door használatával történő biztonságossá tételéről további információt a Háttérrendszer hozzáférésének zárolása csak az Azure Front Doorban című témakörben talál .
Logika: nem 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
És itt van a megfelelő JSON:
{
"customRules": [
{
"name": "blockNonAFDTraffic",
"priority": 2,
"ruleType": "MatchRule",
"action": "Block",
"state": "Enabled",
"matchConditions": [
{
"matchVariables": [
{
"variableName": "RequestHeaders",
"selector": "X-Azure-FDID"
}
],
"operator": "Equal",
"negationConditon": true,
"matchValues": [
"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
],
"transforms": [
"Lowercase"
]
}
]
}
]
}
Következő lépések
Az egyéni szabályok létrehozása után megtudhatja, hogyan tekintheti meg a WAF-naplókat. További információ: Application Gateway-diagnosztika.