Azure WAF geomatch カスタム ルールを使用してネットワーク セキュリティを強化する
Web アプリケーション ファイアウォール (WAF) は、有害な攻撃から Web アプリケーションを保護するのに役立つ重要なツールです。 事前設定されたルールとカスタム ルールの両方を使用して、Web トラフィックをフィルター処理、監視、および停止できます。 WAF で取得されるすべての要求をチェックする独自のルールを作成できます。 カスタム ルールはマネージド ルールよりも優先度が高く、最初にチェックされます。
Azure Web Application Firewall の最も強力な機能の 1 つが geomatch カスタム ルールです。 これらのルールを使用すると、Web 要求を、要求元の地理的な場所と照合できます。 有害なアクティビティで知られる特定の場所からの要求を停止したい場合や、ビジネスにとって重要な場所からの要求を許可したい場合があります。 geomatch カスタム ルールは、使用者の場所に基づいて Web アプリケーションへのアクセスを制限することでデータ主権とプライバシーに関する法律に従うのにも役立ちます。
geomatch カスタム ルールを使用する際は、優先順位パラメーターを賢く使用して、不要な処理や競合を回避します。 Azure WAF では、優先順位パラメーターによって決定される順序でルールが評価されます。これは 1 から 100 までの数値で、値が小さいほど、優先順位が高くなります。 優先順位は、すべてのカスタム ルールにわたって一意である必要があります。 Web アプリケーションのセキュリティに関する重要なルールまたは特定のルールに割り当てる優先順位は高くし、重要度の低いルールまたは一般的なルールに割り当てる優先順位は低くします。 こうすることで、Web トラフィックに最も適切なアクションが WAF によって適用されます。 たとえば、明示的な URI パスを特定するシナリオは最も具体的であり、他の種類のパターンよりも優先順位の高いルールが必要です。 これにより、アプリケーション上のクリティカル パスが最優先で保護され、より一般的なトラフィックを他のカスタム ルールまたはマネージド ルールセットにわたって評価できるようになります。
現在時制と能動態を使用して段落を技術者向けに理解しやすくするために、次のように書き換えることができます。
ルールは、運用環境に適用する前に必ずテストし、そのパフォーマンスと影響を定期的に監視します。 これらのベスト プラクティスに従うことで、geomatch カスタム ルールの機能を使用して Web アプリケーションのセキュリティを強化できます。
この記事では、Azure WAF geomatch カスタム ルールについて説明し、Azure portal、Bicep、Azure PowerShell を使用して作成および管理する方法について説明します。
geomatch カスタム ルールのパターン
geomatch カスタム ルールを使用すると、リスクの高い領域からの要求をブロックする、信頼できる場所からの要求を許可するなど、さまざまなセキュリティ目標を達成できます。 これらは、さまざまなソースからの多数の要求で Web アプリケーションを氾濫させようとする分散型サービス拒否 (DDoS) 攻撃の軽減に特に効果的です。 geomatch カスタム ルールを使用すると、正当なユーザーへのアクセスを許可しながら、最も多くの DDoS トラフィックを生成するリージョンを即座に特定してブロックできます。 この記事では、geomatch カスタム ルールを使用して Azure WAF を最適化するために使用できるカスタム ルールのさまざまなパターンについて説明します。
シナリオ 1 - "x" を除くすべての国またはリージョンからのトラフィックをブロックする
geomatch カスタム ルールは、1 つの国またはリージョンを除くすべての国またはリージョンからのトラフィックをブロックする場合に役立ちます。 たとえば、Web アプリケーションが米国のユーザーのみを対象にする場合は、米国から送信されていないすべての要求を遮断する geomatch カスタム ルールを作成できます。 この戦略は、Web アプリケーションの攻撃対象領域を効果的に最小限に抑え、他のリージョンからの不正アクセスを阻止します。 この特定の手法では、このトラフィック パターンを容易にするために否定条件を使用します。 米国を除くすべての国またはリージョンからのトラフィックを遮断する geomatch カスタム ルールを作成するには、次のポータル、Bicep、PowerShell の例を参照してください。
ポータルの例 - Application Gateway
ポータルの例 - Front Door
Note
Azure Front Door WAF では、一致変数として RemoteAddr
ではなく SocketAddr
を使用することに注意してください。 RemoteAddr
変数は、通常は X-Forwarded-For
要求ヘッダーを介して送信される元のクライアント IP アドレスです。 SocketAddr
変数は、WAF が認識するソース IP アドレスです。
Bicep の例 - Application Gateway
properties: {
customRules: [
{
name: 'GeoRule1'
priority: 10
ruleType: 'MatchRule'
action: 'Block'
matchConditions: [
{
matchVariables: [
{
variableName: 'RemoteAddr'
}
]
operator: 'GeoMatch'
negationCondition: true
matchValues: [
'US'
]
transforms: []
}
]
state: 'Enabled'
}
Bicep の例 - Front Door
properties: {
customRules: {
rules: [
{
name: 'GeoRule1'
enabledState: 'Enabled'
priority: 10
ruleType: 'MatchRule'
matchConditions: [
{
matchVariable: 'SocketAddr'
operator: 'GeoMatch'
negateCondition: true
matchValue: [
'US'
]
transforms: []
}
]
action: 'Block'
}
Azure PowerShell の例 - Application Gateway
$RGname = "rg-waf "
$policyName = "waf-pol"
$variable = New-AzApplicationGatewayFirewallMatchVariable -VariableName RemoteAddr
$condition = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable -Operator GeoMatch -MatchValue "US" -NegationCondition $true
$rule = New-AzApplicationGatewayFirewallCustomRule -Name GeoRule1 -Priority 10 -RuleType MatchRule -MatchCondition $condition -Action Block
$policy = Get-AzApplicationGatewayFirewallPolicy -Name $policyName -ResourceGroupName $RGname
$policy.CustomRules.Add($rule)
Set-AzApplicationGatewayFirewallPolicy -InputObject $policy
Azure PowerShell の例 - Front Door
$RGname = "rg-waf"
$policyName = "wafafdpol"
$matchCondition = New-AzFrontDoorWafMatchConditionObject -MatchVariable SocketAddr -OperatorProperty GeoMatch -MatchValue "US" -NegateCondition $true
$customRuleObject = New-AzFrontDoorWafCustomRuleObject -Name "GeoRule1" -RuleType MatchRule -MatchCondition $matchCondition -Action Block -Priority 10
$afdWAFPolicy= Get-AzFrontDoorWafPolicy -Name $policyName -ResourceGroupName $RGname
Update-AzFrontDoorWafPolicy -InputObject $afdWAFPolicy -Customrule $customRuleObject
シナリオ 2 - URI "foo" または "bar" を対象とする "x" と "y" を除くすべての国またはリージョンからのトラフィックをブロックする
geomatch カスタム ルールを使用して、特定の URI を対象とする 2 つ以上の特定の国またはリージョンを除くすべての国またはリージョンからのトラフィックをブロックする必要があるシナリオを考えてみましょう。 Web アプリケーションに、米国とカナダのユーザーのみを対象とした特定の URI パスがあるとします。 この場合は、これらの国またはリージョンから送信されていない要求をすべてブロックする geomatch カスタム ルールを作成します。
このパターンでは、マネージド ルールセットを介して米国とカナダからの要求ペイロードを処理し、悪意のある攻撃をすべて捕捉しながら、他のすべての国またはリージョンからの要求をブロックします。 このアプローチにより、対象ユーザーのみが Web アプリケーションにアクセスできるように保証し、他のリージョンからの不要なトラフィックを回避できます。
潜在的な誤検知を最小限に抑えるには、国番号 ZZ をリストに含めて、Azure のデータセット内の国またはリージョンにまだマップされていない IP アドレスをキャプチャします。 この手法では、位置情報の種類に否定条件を使用し、URI 一致に非否定条件を使用します。
米国とカナダを除くすべての国またはリージョンから指定の URI へのトラフィックをブロックする geomatch カスタム ルールを作成するには、ポータル、Bicep、Azure PowerShell の提供例を参照してください。
ポータルの例 - Application Gateway
ポータルの例 - Front Door
Bicep の例 - Application Gateway
properties: {
customRules: [
{
name: 'GeoRule2'
priority: 11
ruleType: 'MatchRule'
action: 'Block'
matchConditions: [
{
matchVariables: [
{
variableName: 'RemoteAddr'
}
]
operator: 'GeoMatch'
negationCondition: true
matchValues: [
'US'
'CA'
]
transforms: []
}
{
matchVariables: [
{
variableName: 'RequestUri'
}
]
operator: 'Contains'
negationCondition: false
matchValues: [
'/foo'
'/bar'
]
transforms: []
}
]
state: 'Enabled'
}
Bicep の例 - Front Door
properties: {
customRules: {
rules: [
{
name: 'GeoRule2'
enabledState: 'Enabled'
priority: 11
ruleType: 'MatchRule'
matchConditions: [
{
matchVariable: 'SocketAddr'
operator: 'GeoMatch'
negateCondition: true
matchValue: [
'US'
'CA'
]
transforms: []
}
{
matchVariable: 'RequestUri'
operator: 'Contains'
negateCondition: false
matchValue: [
'/foo'
'/bar'
]
transforms: []
}
]
action: 'Block'
}
Azure PowerShell の例 - Application Gateway
$RGname = "rg-waf "
$policyName = "waf-pol"
$variable1a = New-AzApplicationGatewayFirewallMatchVariable -VariableName RemoteAddr
$condition1a = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable1a -Operator GeoMatch -MatchValue @(“US”, “CA”) -NegationCondition $true
$variable1b = New-AzApplicationGatewayFirewallMatchVariable -VariableName RequestUri
$condition1b = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable1b -Operator Contains -MatchValue @(“/foo”, “/bar”) -NegationCondition $false
$rule1 = New-AzApplicationGatewayFirewallCustomRule -Name GeoRule2 -Priority 11 -RuleType MatchRule -MatchCondition $condition1a, $condition1b -Action Block
$policy = Get-AzApplicationGatewayFirewallPolicy -Name $policyName -ResourceGroupName $RGname
$policy.CustomRules.Add($rule1)
Set-AzApplicationGatewayFirewallPolicy -InputObject $policy
Azure PowerShell の例 - Front Door
$RGname = "rg-waf"
$policyName = "wafafdpol"
$matchCondition1a = New-AzFrontDoorWafMatchConditionObject -MatchVariable SocketAddr -OperatorProperty GeoMatch -MatchValue @(“US”, "CA") -NegateCondition $true
$matchCondition1b = New-AzFrontDoorWafMatchConditionObject -MatchVariable RequestUri -OperatorProperty Contains -MatchValue @(“/foo”, “/bar”) -NegateCondition $false
$customRuleObject1 = New-AzFrontDoorWafCustomRuleObject -Name "GeoRule2" -RuleType MatchRule -MatchCondition $matchCondition1a, $matchCondition1b -Action Block -Priority 11
$afdWAFPolicy= Get-AzFrontDoorWafPolicy -Name $policyName -ResourceGroupName $RGname
Update-AzFrontDoorWafPolicy -InputObject $afdWAFPolicy -Customrule $customRuleObject1
シナリオ 3 - 国またはリージョン "x" からのトラフィックを限定してブロックする
geomatch カスタム ルールを使用して、特定の国またはリージョンからのトラフィックをブロックできます。 たとえば、Web アプリケーションが国またはリージョン "x" から悪意のある要求を多く受け取る場合は、その国またはリージョンからの要求をすべてブロックする geomatch カスタム ルールを作成します。 これにより、Web アプリケーションが潜在的な攻撃から保護され、リソースの負荷が軽減されます。 このパターンは、複数の悪意のある、または敵対的な国またはリージョンをブロックするために適用します。 この手法では、トラフィック パターンの一致条件が必要です。 国またはリージョン "x" からのトラフィックをブロックするには、次のポータル、Bicep、Azure PowerShell の例を参照してください。
ポータルの例 - Application Gateway
ポータルの例 - Front Door
Bicep の例 - Application Gateway
properties: {
customRules: [
{
name: 'GeoRule3'
priority: 12
ruleType: 'MatchRule'
action: 'Block'
matchConditions: [
{
matchVariables: [
{
variableName: 'RemoteAddr'
}
]
operator: 'GeoMatch'
negationCondition: false
matchValues: [
'US'
]
transforms: []
}
]
state: 'Enabled'
}
Bicep の例 - Front Door
properties: {
customRules: {
rules: [
{
name: 'GeoRule3'
enabledState: 'Enabled'
priority: 12
ruleType: 'MatchRule'
matchConditions: [
{
matchVariable: 'SocketAddr'
operator: 'GeoMatch'
negateCondition: false
matchValue: [
'US'
]
transforms: []
}
]
action: 'Block'
}
Azure PowerShell の例 - Application Gateway
$RGname = "rg-waf "
$policyName = "waf-pol"
$variable2 = New-AzApplicationGatewayFirewallMatchVariable -VariableName RemoteAddr
$condition2 = New-AzApplicationGatewayFirewallCondition -MatchVariable $variable2 -Operator GeoMatch -MatchValue "US" -NegationCondition $false
$rule2 = New-AzApplicationGatewayFirewallCustomRule -Name GeoRule3 -Priority 12 -RuleType MatchRule -MatchCondition $condition2 -Action Block
$policy = Get-AzApplicationGatewayFirewallPolicy -Name $policyName -ResourceGroupName $RGname
$policy.CustomRules.Add($rule2)
Set-AzApplicationGatewayFirewallPolicy -InputObject $policy
Azure PowerShell の例 - Front Door
$RGname = "rg-waf"
$policyName = "wafafdpol"
$matchCondition2 = New-AzFrontDoorWafMatchConditionObject -MatchVariable SocketAddr -OperatorProperty GeoMatch -MatchValue "US" -NegateCondition $false
$customRuleObject2 = New-AzFrontDoorWafCustomRuleObject -Name "GeoRule3" -RuleType MatchRule -MatchCondition $matchCondition2 -Action Block -Priority 12
$afdWAFPolicy= Get-AzFrontDoorWafPolicy -Name $policyName -ResourceGroupName $RGname
Update-AzFrontDoorWafPolicy -InputObject $afdWAFPolicy -Customrule $customRuleObject2
geomatch カスタム ルールのアンチパターン
geomatch カスタム ルールを使用する際は、カスタム ルールのアクションを block
ではなく allow
に設定するなど、アンチパターンを避けます。 これは、トラフィックが WAF をバイパスでき、Web アプリケーションが他の脅威にさらされる可能性があるなど、意図しない結果が生じることがあります。
allow
アクションを使用する代わりに、前のパターンで示したように、否定条件を指定した block
アクションを使用します。 これにより、目的の国またはリージョンからのトラフィックのみが許可され、他のすべてのトラフィックは WAF によってブロックされます。
シナリオ 4 - 国またはリージョン "x" からのトラフィックを許可する
geomatch カスタム ルールを、特定の国またはリージョンからのトラフィックを許可するように設定しないでください。 たとえば、顧客基盤が大きいので米国からのトラフィックを許可したい場合、アクション allow
と値 United States
を指定したカスタム ルールを作成すれば解決に見えるかもしれません。 ところが、このルールでは、allow
アクションにより、マネージド ルールセットのその後のルール処理がバイパスされるため、悪意のあるペイロードがあろうとなかろうと、米国からのすべてのトラフィックが許可されます。 さらに、他のすべての国またはリージョンからのトラフィックが WAF によって引き続き処理され、リソースが消費されます。 これにより、Web アプリケーションが、WAF によってブロックされるはずの米国からの悪意のある要求にさらされます。
シナリオ 5 - "x" を除くすべての国からのトラフィックを許可する
geomatch カスタム ルールを使用する際は、ルール アクションを allow
に設定したり、除外する国またはリージョンのリストを指定したりしないでください。 たとえば、米国を除くすべての国またはリージョンからのトラフィックを許可したいが、そこで悪意のあるアクティビティが疑われる場合、このアプローチは意図しない結果を招く可能性があります。 未確認または安全でない国またはリージョンや、セキュリティ基準が低いかまったくない国またはリージョンからのトラフィックを許可し、Web アプリケーションを潜在的な脆弱性や攻撃にさらす可能性があります。 米国を除くすべての国またはリージョンに対して allow
アクションを使用すると、マネージド ルールセットに対する要求ペイロードの処理を停止するように WAF に指示します。 allow
を指定したカスタム ルールが処理されると、すべてのルール評価が停止し、アプリケーションが望ましくない悪意のある攻撃にさらされます。
代わりに、ブロックなどのより制限の厳しい個別のルール アクションを使用し、否定条件で許可する国またはリージョンのリストを指定します。 こうすると、信頼でき、検証済みのソースからのトラフィックのみが Web アプリケーションにアクセスできるように保証され、疑わしいトラフィックや不要なトラフィックがすべてブロックされます。