[Azure] 建立應用程式閘道(Application Gateway)讓雲端虛擬主機也能有WAF的軟體防火牆功能

在雲端的虛擬主機上放置Web應用程式最為人垢病的一件事,就是雲端虛擬主機不提供軟體防火牆(WAF)的功能
Microsoft Azure的雲端服務,在2017/3/30這一天,正式加入了新的PaaS服務,Application Gateway,這個服務就可以透過設定的方式,為虛擬主機上的Web應用程式加入軟體防火牆(WAF)的防護功能

要在Azure上建立WAF的防護功能,步驟比較繁瑣一點,也因為WAF比較偏向Infar的設定,所以對於熟悉硬體網路設定的人來說,設定起來會比較輕鬆一點
整體來說,應用程式閘道服務的架構如下圖所示可以看到透過這個應用程式閘道的服務,可以進行XSS以及SQL Injection的防堵。而應用程式閘道(Application Gateway)與WAF的功能,依照下面的步驟就可以進行建立與設定

1.建立一個新的Application Gateway的服務

2.在基本設定的地方,[定價層]設定為[WAF],由於WAF的功能在SKU大小之中,必須選擇[中]以上,所以就不會有小的定價可以選擇,而[執行個體計數]的設定,必須在2以上,就看網路的流量大小進行計數的設定

3.[設定應用程式閘道設定]的部份,建立一個新的虛擬網路,並命名為[AppGatewayLabVlan],網路設定為[10.0.0.0/24],並建立一個新的子網路[GatewaySubnet],網路一樣設定為[10.0.0.0/24]

在這個設定中,Azure會將此次建立的應用程式閘道放至於[GatewaySubnet]這一個子網路之中,由於閘道與虛擬機器是無法放至在同一個子網路之中,所以需要在建立時進行子網路的規劃與設定

4.前端IP的設定,由於這個閘道會需要對外服務,所以必須設定一個公用IP,如果說這個閘道是用於網路與網路連接用,也可以選擇[私人]的設定,給予一個內部IP使用

5.接聽程式設定的部份,若是有啟用SSL的話,可以切換至[HTTPS]的設定,連接埠也可以自定不同的埠號。另外,在Web應用程式防火牆的設定中,可以先設定[已啟用],模式先選擇[偵測]

Web應用程式防火牆的設定,就是此次主要的WAF設定內容,若是將模式設定為偵測,就只會將防火牆遇到可疑的攻擊進行記錄而不會封鎖,更改設定至[預防],就會直接Block掉了

6.[應用程式閘道]建立完成之後,會看到同時也建立完成的虛擬網路項目,請先點選打開這個虛擬網路的服務項目

7.將這個虛擬網路的[位址空間],網路設定為[10.0.0.0/16],當然也可以依據實際狀況作修正,這個步驟最主要的目的是為了下一步建立第二個子網路網段所使用

8.接著在這個虛擬網路設定中,點選至[子網路],並點選上方的[+子網路]增加一個新的子網路設定

9.加入一個新的子網路,並設定網路為[10.0.1.0/24],這個子網路會放入未來要作為後端的伺服器網段用

10.接著建立新的虛擬機器,並在網路設定的地方,將這台虛擬機器放入至前一個步驟中建立的[VMServerFarm]子網路網段中,[公用IP位址][網路安全性群組]就先使用預設值就可以

11.重複同樣的步驟,建立第二台虛擬機器,網路一樣放至於[VMServerFarm]子網路中,現在在資源群組中可以看到有兩台虛擬機器跟一個應用程式閘道

12.點選進入應用程式閘道的服務,並點選[後端集區]=>[appGatewayBackedPool],這個功能中,可以設定WAF後端要轉接的虛擬機器

13.點選[+新增目標],並將剛剛建立好的虛擬機器,[VM1][VM2]加入至清單中

14.WAF的設定到這邊就算完成,接下來打開Visual Studio,並建立一個WebApp專案,我在畫面上放了一個文字方塊,讓我可以輸入一些Script的訊息用

15.在兩台虛擬機器上安裝IIS,並將剛剛的WebApp專案發佈至這兩台主機中

16.點開應用程式閘道的服務,可以看到閘道對外的IP,在這裡將IP先複製下來並到瀏覽器中開啟

17.從瀏覽器開啟這一個IP,可以看到已經連入到虛擬機器上剛剛我們建立好的Web應用程式了,這時候我們在文字方塊中刻意輸入XSS的隱碼內容

發生了XSS的隱碼事件了,這是因為我們還沒在應用程式閘道中啟用防火牆的功能,目前只是先偵測而已

18.要打開預防的功能,點選應用程式閘道,並點選[Web應用程式防火牆],並將[防火牆模式]更改為[預防]

19.這時候我們重新作一次XSS的內容送出的動作,會發現直接回傳403的錯誤訊息,WAF有順利發揮它的功效了

WAF的整體設定與功能的啟用,內容大致到這邊說明完,不過由於應用程式閘道還有其他可以拿來運用的功能與設定,所以下面的內容會針的應用程式閘道的應用與設定進行說明

進入[HTTP設定]=>[appGatewayBackendHttpSettings]的設定內容

在這個設定裡,可以指定轉接到後端應用程式的HTTP服務走的是一般HTTP或是HTTPS,Port也可以在這裡自訂

點選[接聽程式]=>[appGatewayHttpListener]的設定內容

在這個設定裡面,可以指定前端接聽服務的連接埠,並給予一個名稱,讓前端不是只能走80或是443 port

點選[診斷記錄檔],並點選[開啟診斷]的動作

[開啟診斷]的動作裡,可以將應用程式閘道所收集到的訊息,轉送至儲存體,Event Hub或是Log Analytics

這是官方網站所提供的偵測訊息轉送的架構圖,有興趣的人也可以查看最下方的參考資料網頁看更詳細的內容

要啟用診斷設定的功能,Web防火牆的偵測結果才會儲存下來,若是沒有設定啟用診斷的話,偵測到的結果也無法儲存

應用程式閘道除了WAF的功能外,還有簡易的Layer 7的負載平衡功能,對於應用程式必須要放在雲端虛擬主機上,卻又考量安全性以及效能的問題帶來了完整的解決方案,未來就算要將Web應用程式放上雲端虛擬主機,也不用擔心WAF跟Load Balance的問題了

參考資料:
Azure Web Application Firewall (WAF) Generally Available