Share via


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

Screenshot showing the Application Gateway WAF add custom rule screen.

ポータルの例 - Front Door

Screenshot showing the Front Door WAF add custom rule screen.

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'
            negationConditon: 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

Screenshot showing add custom rule for Application Gateway.

ポータルの例 - Front Door

Screenshot showing add custom rule for Front Door.

Bicep の例 - Application Gateway

properties: {
    customRules: [
      {
        name: 'GeoRule2'
        priority: 11
        ruleType: 'MatchRule'
        action: 'Block'
        matchConditions: [
          {
            matchVariables: [
              {
                variableName: 'RemoteAddr'
              }
            ]
            operator: 'GeoMatch'
            negationConditon: true
            matchValues: [
              'US'
              'CA'
            ]
            transforms: []
          }
          {
            matchVariables: [
              {
                variableName: 'RequestUri'
              }
            ]
            operator: 'Contains'
            negationConditon: 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

Screenshot showing the application gateway add custom rule screen.

ポータルの例 - Front Door

Screenshot showing the front door add custom rule screen.

Bicep の例 - Application Gateway

properties: {
    customRules: [
      {
        name: 'GeoRule3'
        priority: 12
        ruleType: 'MatchRule'
        action: 'Block'
        matchConditions: [
          {
            matchVariables: [
              {
                variableName: 'RemoteAddr'
              }
            ]
            operator: 'GeoMatch'
            negationConditon: 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 アプリケーションにアクセスできるように保証され、疑わしいトラフィックや不要なトラフィックがすべてブロックされます。

次のステップ