Azure Web AppsをBarracuda WAFのSaaSで守る

#はじめに

AzureにもApplication Gatewayを使ってWAFの機能は実現できる他、各種ネットワークアプライアンス製品をVM上に導入することで本格的なWAF機能を利用することも可能です。

[Azure Application Gateway](https://docs.microsoft.com/ja-jp/azure/application-gateway/overview?WT.mc_id=AZ-MVP-5002499)


Azure Web Appsを使って小規模なサイト運営を行う場合、Application Gatewayとの連携ではAzure Networkingの知識が必要であったり、WAFのルールの細かい調整も必要だったりと障壁があります。

また、昨今WebサイトはHTTPSによる暗号化通信がされていないWebサイトはユーザからも敬遠されがちとなっており、「Let's Encrypt」のような無料SSL証明書も出てきていますが、こちらの証明書の導入や更新もそれなりの知識が必要となっています。

まとめるとこんな感じ

1. Application GatewayのWAF機能を有効にしてWebのフロントに配置(SSL証明書は自前で管理)
2. ネットワークアプライアンス製品を導入してWebのフロントに配置(SSL証明書は自前で管理)
3. WAFのSaaSサービスを利用する(SSL証明書の管理はサービス毎に異なる)

#Barracuda WAF

例えばBarracudaのWAF製品は以前からオンプレミス用とクラウド向けに提供されており、AzureでもMarketplaceからネットワークアプライアンスとしてVMに展開して利用する事ができます。

[Barracuda CloudGen WAF for Azure](https://azuremarketplace.microsoft.com/ja-jp/marketplace/apps/barracudanetworks.waf?tab=Overview)

2018年夏には国内でも「Barracuda WAF-as-a-Service」が開始され、SaaSとしてBarracuda WAFが利用可能となりましたが、Azureで利用する場合には一番小さいプランで25Mbpsで$424.00/月となっています(2019/5現在)

また、WAFの設定についても細かくできる半面、小規模なサイト運営者がいきなり導入するには専門知識が必要でハードルは低くはないでしょう。

[Barracuda WAF-as-a-Service(Azure Marketplace)](https://azuremarketplace.microsoft.com/ja-jp/marketplace/apps/barracudanetworks.barracuda-waf-as-a-service?tab=Overview)

最近知ったのですが、「Barracuda WAF-as-a-Service SMAC Edition」というBarracuda WAF+SSLオフロードのSaaS(WAFaaSというそうです)が始まっていたので試用させてもらいました。

最低帯域が0.5Mbpsの場合で\14,000/月と安価で、なおかつLet's EncryptのSSL証明書を自動設定&自動更新してくれるサービスです(初期費用は\29,800)。

[Barracuda WAF-as-a-Service SMAC Edition](https://www.barracuda.co.jp/products/waf-as-a-service/)

#Barracuda WAF-as-a-Service SMAC Edition導入までの流れ

##Web Apps側の準備

今回は試用ですが、それなりにコンテンツ入りのものが有ったほうが良いので、Azure Web Apps上にWordpressを導入しています。

まずはWeb Apps単独でWordpressがカスタムドメインでアクセス可能なように設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/8ad46df2-b2b7-3f85-8a89-b82369b76823.png)

私はnya-n.netのドメインを保持しており、Azure DNSで管理しているのですが、まずはWeb Appsのカスタムドメインとしてwww.nya-n.netを追加します。
Azure DNSにてwwwのCNAMEとしてktkrwaftest.azurewebsites.netをマップしてまずは承認させます。

WordpressをWeb Appsに導入する方法としては、以下の私の別コンテンツも参照下さい。

[App ServiceとAzure Database for MySQLで簡単Wordpressサイト構築](https://qiita.com/yotan/items/b34fdf901df62193805c)

##Barracuda WAF-as-a-Service SMAC Editionの申し込み

紙ベースの申込書となりますが、必要事項を記入して申し込みます。
大事な部分としては以下の点かと。

- お客様URL : http://www.nya-n.net/ (今回はhttpのみによるWebサイト公開をしている想定)
- IPアドレス : 先の「カスタムホスト名」に表示されているWeb AppsのIPアドレス
- プロトコル/ポート番号 : TCP/80
- 暗号化通信希望有無 : YES(サービス側推奨の証明書を使うをYESとするとLet's EncryptのSSL証明書を勝手に設定してくれる)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/475d3330-1b08-c274-074b-a2969ae91d4e.png)

##Azure DNSのレコード変更

申し込み完了後、エンドポイントのIPアドレスと、WAFaaSからWeb AppsへのソースIPアドレスが連絡されてきます。

Azure DNSで先に設定したCNAMEレコードのwwwを削除して、Aレコードで登録し直します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/fe97d083-8228-f739-d16b-6903ec85039d.png)

こちらのAレコードを登録後、しばらくするとWAFaaS側で自動的にLet's EncryptのSSL証明書を発行して登録してくれるようです。

この時点で、httpsによるWebサイトへのアクセスが可能になります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/1819fbc9-54a1-8a59-953f-a418d44ae50e.png)

ちゃんとSSL証明書も登録されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/17462744-e78f-695a-7b74-b587329b0ce9.png)

##Azure Web AppsのFirewall設定

元のWeb Appsはhttpによるアクセスを許可したままの状態ですので、直接WAFを通さずにアクセスされるのは避けたいところです。

Azure portalからWeb Appsの設定を開いて、ネットワークのアクセス制限から、連絡を受けたWAFaaSのソースIPアドレスを設定して、そのIPアドレスだけを許可にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/9a05c18f-86c0-e9b9-b341-7b925d04c371.png)


##WAFの有効化

ここまでの準備が出来たら、WAFaaSのサポートに準備OK！の連絡をすることで、WAFを有効化して5営業日程の期間、誤検知がないか確認してくれるそうです。

後は基本何もすることは無いでしょう。

初回の脆弱性検査レポートとして以下のようなメールが送られてきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/9c715845-e632-a2ba-3158-fe56ba0cbcad.png)

今回は「素」のプラグインを何も入れていないWordpress 5.1.1によるBarracuda WAFによる検査結果ですが、XSS (Cross-site scripting)の重要度Highが1件検出されています。
執筆時点ではWordpress 5.2もリリースされているため、まずはWordpressをアップデートして様子見ですかね。

脆弱性スキャン結果は、ウェブサーバ自身の脆弱性を見つけています。
ちなみに、ここでレポート結果に上がっていたMediumとHighの部分は、WAFaaS側で防げています。なので、WAFaaSを導入していれば、安心ということで。

更に月次レポートで、運用中に発生した脆弱性検知の結果や、契約時に指定するしきい値を超えた旨の情報を送ってくれるそうです。

以下はサンプルの月次レポート(抜粋)です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/137436/156a17ca-d222-633d-3249-d24de35130b4.png)


#おわりに

小規模サイトで運用コストを抑えて尚且導入も簡単に行うためにこういったSaaSを利用するのも一つの手と考えて記事を作成しました。(若干ステマ味ありますが)

無論本格的なWebサイトをAzure上に構築・運用する場合には、Application Gateway WAFや、ネットワークアプライアンスをVMに展開する方式がベストとなります(SSL証明書もそれなりの機関から取得する)。