Azure Web アプリケーションファイアウォール(WAF)を作ってみた

 

今回は、Azure Web アプリケーション ファイアウォールの作成を試してみました。

一般的に、Web アプリケーションファイアウォールは、悪意のある攻撃や一般的な Web 脆弱性 (SQL インジェクション、クロスサイト スクリプティングなど) から Web アプリを保護する目的で利用されます。

Web アプリケーション ファイアウォールの場合は、Azure Front DoorやAzure Application Gatewayと組み合わせて使用する事が可能です。(2020年5月10日現在 CDNもプレビューとなってました。)

https://azure.microsoft.com/ja-jp/services/web-application-firewall/

今回はAzure Front Doorで利用する前提で、作成を試してみました。

1.Azure Portalを使って、Web アプリケーションファイアウォール(WAF)を作成する

Azure Portal上で作業を実施したのですが、大まかには以下の流れになります。

      • 基本設定(適用するリソース(FrontDoor、Application Gateway、CDNの選択)デプロイするリソースグループや名前等)
      • ポリシー設定(防止か検出かの選択等)
      • 管理されているルール(適用するルールセット)
      • カスタム規則(自分でルールを作成する場合に使用)
      • 関連付け(どのFrontDoorやApplication Gatewayと関連付けを行うかの設定)
      • タグ付け

すべてのサービスでアプリケーションファイアウォールと入力すると、Web アプリケーション ファイアウォールのポリシー (WAF)が表示されますので選択します。

追加をクリックするとWAFポリシーの作成画面が表示されます。

今回はFront Door用ですので、次に対するポリシーはグローバルWAFを選択します。リソースグループや名前は自身の環境に合わせて適時設定します。

次に、ポリシー設定を行います。防止と検出を選択します。防止にすると不正なアクセスがブロックされます。検出にすると、Logが出力されるだけで実際のアクセスはブロックされません。最初は検出を適用し随時防止させた方が必要なアクセスを停止させる事がないので初期導入時はそちらの方が良いかと思われます。

Webアプリケーションファイアウォールログの確認は下記記事も参考にしていただければ。

フロントドアとWAFのログをLog Analyticsで確認

次に適用するルールセットを選択します。通常の攻撃に対するものとBotアクセスに対するルールがあるようです。環境に合わせて適時選択します。

次にカスタム規則の設定を行います。今回はそのまま次へで進みます。

なお、カスタム規則の設定する場合は過去に実施した記事も参考頂ければと。

Azure Web アプリケーション ファイアウォールのカスタム規則設定をしてみた(国別ブロック)

次に関連付けを行います。下記画面が表示されますので、フロントエンドホストの追加をクリックします。Front Doorが未作成の場合追加せずに次に進みます。

すでにFront Doorが作成されている場合は、フロントエンドホストの追加するをクリックし、Froot Doorとフロントエンドのホスト名を選択します。

 

次に、タグの画面が表示されますので、適時設定します。

最後に確認及び作成をクリックすれば、作業完了です。

2.Azure Front DoorにAzure Web アプリケーションファイアウォールを設定する

Azure Front DoorへのWEB アプリケーション ファイアウォールの割り当てはAzure Front Doorのフロントエンドまたはドメインの設定で実施します。

Front Doorデザイナー>フロントエンドまたはドメイン>設定対象のドメインを選択するとWEB アプリケーション ファイアウォールという項目が表示されます。

こちらでポリシーを選択します。

設定して保存すれば、そのドメインへのアクセスに対してWEB アプリケーション ファイアウォールのルールが適用されます。

Azure Front DoorでWEBアクセスの送信元IP制限

 

Azure Front DoorのバックエンドプールにApplication Gatewayを使用した場合の送信元IPアクセス制限を試してみました。

Front Door経由のWEBアクセスはすべてAzureFrontDoor.BackendでプールされるIPになります。

その為Application GatewayやWeb Apps等のバックエンド側ではアクセス元IPがわからない為NSGでのアクセス制御が出来ません。Front Doorでのアクセス制御が必要になります。

今回実施した内容は以下の2つになります。

      • NSGでFront DoorからのApplication GatewayへのアクセスをFront Doorのみに制限する
      • Front DoorのWeb Application Firewallポリシーのカスタム規則でIP制限を行う

Azure Front Doorのアクセス制限はNSGの設定で出来ない為、Web Application Firewallポリシーのカスタム規則で実施しています。

WAFの構築についてはこちらで試しております。併せて見て頂ければと。

Azure Web アプリケーションファイアウォールを作ってみた

1.Application GatewayサブネットのNSGでFront Doorからのアクセスのみに制限する

最初にApplication GatewayへのアクセスをFront Doorからのみ制限します。

Application Gatewayのサブネットに適用しているNetwork Security Groupの受信規則でService TagがAzureFrontDoor.Backendの許可設定を追加します。

      • ソース:Service Tag
      • ソースサービスタグ:AzureFrontDoor.Backend
      • ソースポート範囲;*(Any)
      • 宛先:VirtualNetwork
      • 宛先ポート範囲:80、443
      • プロトコル:TCP
      • アクション:許可

次にFrontDoorからのアクセス許可より優先順位が下に、InterNetからのアクセス拒否ポリシーを設定します。

  • ソース:Service Tag
  • ソースサービスタグ:InterNet
  • ソースポート範囲;*(Any)
  • 宛先:VirtualNetwork
  • 宛先ポート範囲:80、443
  • プロトコル:TCP
  • アクション:拒否

この2つのルールにより、Application GatewayではInternetから来るWEBアクセスが拒否されFront Door経由のアクセスのみが許可されます。

Application Gatewayのドメインへのアクセスを実施すると、このサイトにアクセスできませんというメッセージが表示されます。

2.Web Application Firewallポリシーのカスタム規則でIP制限を行う

Front Door側でアクセス元IPを制限する場合、NSGではできず、WAFのカスタム規則を利用します。

今回は、特定のIPからのアクセスのみを許可します。

    • Web Application Firewallのポリシーを防止にする
    • 特定のIPを含まない場合はトラフィックを拒否する設定をする

※防止にすると必要なアクセスがブロックされる場合もありますので注意して下さい。

Web アプリケーション ファイアウォールのポリシーのメニューで設定の中にあるポリシー設定を選択すると下記画面が表示されます。

モードで防止を選択し保存します。

次に設定にあるカスタム規則を選択します。

カスタムルースの追加を選択すると条件設定の画面が表示されますので、以下の通り設定します。

      • 一致の種類:IPアドレス
      • 一致変数 RemoteAddr
      • 操作:次の値を含まない
      • IPアドレスまたは範囲:許可するIP
      • 結果 トラフィックを拒否する

最後にカスタム規則の保存を行えば、作業が完了です。

これで特定のIPからのみアクセスが許可され、それ以外のアクセスはブロックされます。

フロントドアとWAFのログをLog Analyticsで確認

 

Azure Froot Door のアクセスログやWAFログを診断設定でLog Analyticsへ転送しクエリで確認してみました。

Azure Front Doorのログではアクセス先のURL等の情報だけではなくキャッシュのヒットなどの情報も分かります。

WAFのログではどのルールでブロックされたのか?なども分かります。例えばレート制限時にはアクセス制限状況も分かります。

その為、Azure Front Doorの使用状況を把握するのには、診断設定で取得出来るログは非常に重要なログになります。

今回実際に実施した作業内容は下記の通りになります。

      • Azure Front Dorrの診断設定
      • Log Analyticsでのログ検索

設定にあたっては、マイクロソフト様サイトを参考に進めました。

https://docs.microsoft.com/ja-jp/azure/frontdoor/front-door-diagnostics

WAFの作成についてはこちらを参考にして頂ければと。

Azure Web アプリケーションファイアウォールを作ってみた

Application Gatewayのログについてはこちらを参考にして頂ければと。

Azure Application GatewayのアクセスログをLog Analyticsで確認する

1.Azure Froot DoorやWAFのログ取得設定は診断設定で行います

Azure Froot DoorのアクセスログはApplication Gatewayと同様に診断設定を利用します。

Azure Front Doorのメニューで診断設定を選択します。

下記画面が表示されますので診断設定を追加するを選択します。

診断設定の画面が表示されます。

logに表示されている2項目にチェックを入れます。(必要に応じてMetricにもチェックを入れます。)

今回はLog Analyticsで確認するのでLog Analytics への送信にチェックを入れて、送信先のワークスペース名を選択します。

診断設定の名前を付けて保存します。

※FrontdoorWebApplicationFirewallLogはFroot DoorでWeb Application Firewallの設定を行っている場合のみ出力されます。

2.Log AnalyticsでAzure Front DoorやWAFログの検索を行う。

診断設定で選択したLog Analyticsのワークスペースでログを開きます。(Azure Front Doorのメニューでログを選択しても同じ動作になります。)

今回取得設定したのは以下の2つのログになります。

      • FrontdoorAccessLog:Azure Front Doorのアクセスログ
      • FrontdoorWebApplicationFirewallLog:WAFのログ

アクセスログを表示する為のサンプルは下記の通りになります。

#アクセスログを表示する

AzureDiagnostics
| where Category == “FrontdoorAccessLog”
 
#アクセスログをアクセス元のIPでカウントする。(アクセス数順で並び変える。)

AzureDiagnostics
| where Category == “FrontdoorAccessLog”
| summarize total_hits = count() by clientIp_s
| sort by total_hits desc
 

FrontdoorAccessLogの主な出力項目としてはこんな内容が表示されます。

      • 時刻
      • リクエストURL
      • User-Agent
      • アクセス元のIP
      • キャッシュヒット
      • ルールエンジン(利用時)

Web Application Firewallのログは下記のクエリで確認可能です。

#Web Application Firewallのログを表示する

AzureDiagnostics
| where Category == “FrontdoorWebApplicationFirewallLog”
 

アクセスログに表示される項目以外に、どのルールにマッチしたのか、ブロックされたのか等の情報が併せて表示されます。

なお許可された通信も表示されます。許可された通信以外(LogやBlock)を表示するには下記のようにします。

#Allow以外のアクセスログを表示する

AzureDiagnostics
| where Category == “FrontdoorWebApplicationFirewallLog”
| where action_s != “Allow”
 

Web Application FirewallでBlockされたログのみの場合は以下のようなクエリを利用します。

#Web Application FirewallでBlockされたアクセスログを表示する

AzureDiagnostics
| where Category == “FrontdoorWebApplicationFirewallLog”
| where action_s == “Block”
 

実行結果を確認するとどのルールでBlockされたのかもわかります。

3.Azure Froot Doorのバックエンドプール側のクライアントIPはFront DoorのIPになります。

Froot Doorを使う場合ですが、バックエンドプール側のアクセスログに表示されるclientIP_sがFroot DoorのBackend poolのIPアドレスになります。

その為、バックエンドプール側(Virtual Machine等)でアクセス元IPを確認する場合は、x-forwarded-forを確認する必要があります。

また、マイクロソフト様のサイトにも記載がありますが、Froot Doorからのヘルスチェックアクセスが結構な数のアクセスが来るので、アクセスログが大量になる事にも注意が必要です。

【参考】Web Application Firewallの作成は下記に記載しています。

 https://www.tama-negi.com/2020/05/10/azure-web-application-firewall/ ‎

Azure Web アプリケーション ファイアウォールのカスタム規則設定をしてみた(国別ブロック)

 

Azure WEBアプリケーションファイアウォール(WAF)で国別ブロックの設定を試してみました。

Azure WEBアプリケーションファイアウォール(WAF)ではカスタム規則の作成が可能です。このカスタム規則で、国別ブロックや特定のIPからのアクセスについてブロックする等の設定ができます。これはApplication Gateway(V1)のWAFでは設定出来ない内容でした。

また、Azure WEBアプリケーションファイアウォール(WAF)は単体利用ではなく、Azure Front Door等組み合わせて利用します。

マイクロソフト様サイトに記載の内容を参考に設定を行っています。

https://docs.microsoft.com/ja-jp/azure/web-application-firewall/afds/waf-front-door-create-portal

今回試してみた、国別ブロックは、カスタムルールで非常に簡単に実現できます。

※WAFで実現できる設定内容は、Application GatewayかFrontDoor(今回)の選択によって異なるようです。

1 .Azure WEBアプリケーションファイアウォールのカスタム規則を作成

WAFの画面で、カスタム規則を選択すると下記画面が表示されます。
カスタムルールの追加をクリックします。

そうるすと、カスタムルールの追加が表示されます。
一致の種類に、geoロケーションを選択すると国コードが表示されます。
国コードを選択すると、プルダウンで国が表示されるので、それを選択するだけです。
1つのカスタムルールで選択できるのは10までになります。

今回は特定の国だけをブロックしたいので、操作は次である(合致するという意味)、結果はトラフィックを拒否するを選択します。
カスタムルール名、優先度を設定し、追加ボタンをクリックすればカスタムルールが出来上がります。

最後に、カスタム規則の画面の保存ボタンをクリックすれば新たに作成したカスタムルールが適用されます。これ押し忘れると、作成したカスタムルールは適用も保存もされません。

Azure Web アプリケーションファイアウォールの作成手順は下記に記載してみました。

hhttps://www.tama-negi.com/2020/05/10/azure-web-application-firewall/

Azure Web アプリケーションファイアウォールを作ってみた

——–