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

 

今回は、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 アプリケーションファイアウォールを作成する

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

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

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

追加をクリックすると下記画面が表示されます。今回はFront Door用ですので、次に対するポリシーはグローバルWAFを選択します。リソースグループや名前は自身の環境に合わせて適時設定します。

次に、ポリシー設定を行います。防止と検出を選択します。防止にすると不正なアクセスがブロックされます。検出にすると、Logが出力されるだけで、実際のアクセスはブロックされません。適時選択します。

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

 https://www.tama-negi.com/2020/04/27/azure-front-door-2/ ‎

Azure Front DoorやWeb Application Firewallのログを取得してLog Analyticsで確認する

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

次にカスタム規則の設定を行います。こちらも適時実施しますが作成後実施した方が良いかと思います。

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

 https://www.tama-negi.com/2020/02/13/waf/

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

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

追加の場合は、以下の画面が表示されますので、FrootDoorとフロントエンドのホスト名を選択します。

 

次に、タグの画面が表示されますので、適時設定します。(ここは画面割愛します。)

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

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

Azure Front DoorでWEB アプリケーション ファイアウォールの設定を行うのは、フロントエンドまたはドメインで実施します。フロントエンドのドメイン単位での設定になります。

Front Doorデザイナー>フロントエンドまたはドメイン>設定対象のドメインを選択すると、以下のように、WEB アプリケーション ファイアウォールという項目がありますので、こちらでポリシーを選択します。

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

 

送信元IPアクセス制限をAzure Front Door+Azure Application Gatewayでやってみた

 

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

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

    • Application GatewayサブネットのNetwork Security GroupでFront Doorからのアクセスのみに制限する
    • Front DoorのWeb Application Firewallポリシーのカスタム規則でIP制限を行う

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

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

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

実際の設定画面は下記のようになります。

その次に、上記許可ポリシーより優先順位が下に、Service TagがInternetからポート80,443のアクセス拒否するポリシーを入れます。

これにより、直接Internetから来るアクセスが拒否され、Front Door経由のアクセスのみが許可されます。

直接、Application Gatewayのドメインへのアクセスを実施すると、このサイトにアクセスできませんというメッセージが表示されます。また、Front Door経由のアクセスをすれば正常にサイトアクセスできます。

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

Front Door経由のアクセスはすべてAzureFrontDoor.BackendでプールされるIPになります。したがって、Application Gateway側ではアクセス元IPがわからない為、Network Security Groupでの設定が出来ません。

Front Door側で同様の制限を行う必要がありますが、Front Doorのアクセス制限はNetwork Security Groupの設定での制限ができません。

結果、Front Doorに設定されているWeb Application Firewallポリシーのカスタム規則でIP制限を行う事になりました。

特定のIPからのアクセスのみを許可する場合は、以下の設定になります。

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

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

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

設定で防止を選択し保存します。

次に、設定にあるカスタム規則を選択します。カスタムルースの追加を選択するとカスタムルールの追加が表示されます。

 

カスタムルール名、優先度を適時設定した後に、条件を下記設定とします。

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

これで許可するIPアドレス以外のアクセスをすべて拒否する設定が出来ました。

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

 

Azure Front DoorやWeb Application Firewallのログを取得してLog Analyticsで確認してみた

 

Azure Froot Doorのアクセスログ取得設定およびLog AnalyticsでアクセスログやWeb Application Firewall(Froot Doorに設定した場合)のログ確認をしてみました。

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

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

1.Azure Froot DoorやWeb Application Firewallのログを取得するのは診断設定

Azure Froot Doorのアクセスログは、診断設定を利用します。これはApplication Gatewayと同じ方法になります。

診断設定を選択すると下記画面が表示されますので、logとmetricにチェックを入れます。今回はLog Analyticsで確認するので、Log Analytics への送信にチェックを入れて、送信先のワークスペース名を指定します。

選択が終わったら、診断設定の名前を付けて保存します。

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

2.Log Analyticsでログの検索を行う。

Froot Doorのメニューの中に、ログという項目があります。この項目を選択すると、診断設定で選択したLog Analyticsのワークスペースが開かれます。

FrontdoorAccessLogがアクセスログになります。以下のようなクエリを利用する事でアクセスログが表示されます。

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

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

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

Web Application Firewallのログは、FrontdoorWebApplicationFirewallLogになります。

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

AzureDiagnostics
| where Category == “FrontdoorWebApplicationFirewallLog”
 

上記検索だとAllowされたLogも表示される為、許可された通信を含むすべてのアクセスログが表示されます。Allow以外のログについては以下のようなクエリで検索可能です。

#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.Froot Doorのバックエンドプール側のアクセスログについては注意が必要

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 アプリケーションファイアウォールを作ってみた