Windows Azure Virtual Machines 上設定 IIS 7.5 FTP
當 Windows Azure Virtual Machines 上啟用了 Windows Server 2008 R2 的虛擬機器之後,大部份的用戶都會需要將檔案,程式等傳上雲端的需求。接下來介紹如何在 Windows Azure Virtual Machines 內的 Windows Server 2008 R2 內啟用FTP 檔案傳輸服務。
為了示範我們建立一個名為 MyFTP 的 Windows Server 2008 R2 虛擬機器。
並將此虛擬機器對外的 DNS 名稱設定為 My-FTP.cloudapp.net。
當虛擬機器啟動之後,我們透過 Remote Desktop 遠端桌面連接進入此 Windows Server 2008 R2 虛擬機器。由剛安裝完畢,整個 Windows Server 2008 R2 沒有任何安裝角色 (Role),我們可以如下圖般在 Server Manager 內點選 Add Roles 準備增添新的角色。
選擇如圖中標示的 Web Server (IIS),微軟的 IIS 7.5 中已經內建了 FTP 服務,點選完畢後按下 Next 按鈕。
IIS 7.5 包含相當多的附加服務,如圖標示處我們必須勾選安裝 FTP Server 附加服務,完成後按下 Next 按鈕。
此時 Windows Server 2008 R2 便會開始安裝 IIS 7.5 與 FTP Server,若安裝順利我們會看到下圖般的畫面,當我們看到安裝成功的訊息之後就可按下 Close 按鈕。
完成 IIS 安裝之後,在 Server Manager 中點選如下圖左方的窗格,展開 Web Server IIS 管理畫面。
在設定 FTP 之前,我們需要了解 FTP 連線模式,目前絕大多數的 FTP 檔案傳輸軟體,是採用 Passive Mode,當.FTP 用戶端軟體連接至 FTP Server 的 TCP Port 21,請求連線,並完成命令通道的建立。 .當兩端需要傳送資料的時候,FTP 用戶端軟體會透過命令通道送一個 PASV command 給 FTP Server,要求進入 Passive Mode 傳輸模式。 然後 FTP Server 會隨機選取一個 TCP port (如下圖中的 PS1) ,透過命令通道 告訴 FTP 用戶端軟體,之後 FTP 用戶端會用 FTP Server 剛告知的 TCP Port (下圖中的 PS1) 來連接 FTP Server ,建立資料通道 (Data Channel) 。當一切順利後即開始透過資料通道 (Data Channel) 傳送檔案。
由於目前 Windows Azure 對外所有網路傳輸都會透過負載平衡器 (Load Balancer),虛擬機器所有對外連線都需要在 Windows Azure 管理介面中增添 Endpoint,目前的 Windows Azure 並不允許設定一段區間的 TCP/UDP Port ,只能一個一個添加 Endpoint,並且最多只能提供 100 個對外的 Endpoint,要讓 FTP 服務 Passive Mode能夠正常運作,除了增添一個 TCP 21 Port 的 Endpoint 之外,我們還必需限縮資料通道 (Data Channel) 所需的 TCP Port,否則讓 FTP Server 大範圍隨機建立資料通道 TCP Port,在目前 Windows Azure 負載平衡下很難運作。
所以我們接下來要將 FTP Passive Mode 會用到資料通道 (Data Channel) TCP Port 範圍縮限為兩個 TCP Port,以便之後 Windows Azure 管理介面中增添 Endpoint。我們可以透過 Server Manager 點選如下圖 MyFTP 伺服器層級的 FTP 防火牆設定,請特別注意左方窗格需要點選正確。
接下如圖將資料通道 (Data Channel) TCP Port 範圍設定為 5432 至 5433,完成後按下右方窗格的 Apply 按鈕。完成這項設定之後,未來 FTP Server 僅會在這兩個 TCP Port 間隨機挑選來資料通道 (Data Channel)。而下圖中 External IP Address 可以留白。
接下來我們即可增添 FTP Site 了,如下圖般在 Connection 窗格中點選 Sites 後按下滑鼠右鍵,並選取增加新的 FTP Site。
緊接著我們設定 FTP Site 名稱為 Temp Files Upload,並將實體資料夾設定在 D:\InstallFiles,再次提醒用戶在正常應用中,FTP 實體資料夾一定要建立在一個新的虛擬磁碟,千萬不要將 FTP 資料夾設定在 D: 磁碟 。Windows Azure Virtual Machines 服務中每個虛擬機器的 C: 磁碟為了增加效率,預設將讀取與寫入之磁碟快取開啟,由於開啟了寫入快取,將FTP 上傳的檔案置於 C: 磁碟有遺失寫入資料的風險,而將 FTP 檔案放置在暫存用途的 D: 磁碟更是危險,D: 磁碟是本機硬碟,沒有自動資料備份三分,尤其當虛擬機器重新啟動後,D: 磁碟的內容都會遺失,因此僅能作為暫存資料的用途。為了節省篇幅,我們這次設置 FTP 僅是為了將檔案暫時上傳此虛擬機器,以便進行軟體安裝,因此將 FTP 實體資料夾設定在 D: 磁碟,在真實應用時請務必將 FTP 實體資料夾設定在一個新的虛擬磁碟,絕對不要設定在 C: 磁碟或是 D: 磁碟。
設定完實體資料夾後,如下圖選擇不需要使用 SSL 加密傳輸,同樣的在此僅是個 FTP 安裝示範,在真實應用中請注意資料傳輸的安全問題。
接下來設定允許匿名用戶 (Anonymous) 可以登入讀取與寫入檔案,同樣的在此僅是個 FTP 安裝示範,在真實應用中請注意用戶存取權限的設定。按下 Finish 按鈕後即可完成這個暫存檔上傳的 FTP Site。
設定妥這個名為 Temp Files Upload 的 FTP Site 之後,我們又將面臨一個新的問題,FTP Passive mode 在建立資料通道的過程中,我們需要將對此虛擬機器對外的 IP Address 告知 FTP Server,以避免 FTP 將內部 IPv4 位址傳給 FTP 用戶端,這會造成在建立資料通道的過程時被 Windows Azure 擋在門外。如下圖所示,在 Connections 窗格中點選 Temp Files Upload 的 FTP Site,接著在右方窗格內進行 FTP Site 層級的 FTP 防火牆設定。
我們可以在 Windows Azure Management Portal 內查得對外 Public Virtual IP (VIP) 為 168.63.133.209 。
回到 Server Manager 內如下圖在 External IP Address of Firewall 內填入此虛擬機器的對外 IP Address : 168.63.133.209,完成後按下右方 Apply 按鈕。
至此,所有 FTP Server 安裝與設定已經完成了,雖然這些設定動作是在 IIS Manager 內完成,但所有相關防火牆的設定也會影響到系統,建議在此重新啟動此虛擬機器,確認相關防火牆設定生效,漏了這個小動作浪費了我三小時的假日時光。接下我們要將 FTP 所有會用到 TCP Port 設定在 Windows Azure Endpoint 中。一個 Windows Server 2008 R2 虛擬機器剛建立時,為了安全理由僅有 Remote Desktop 遠端桌面的 Endpint 已經建立。案下圖中的 + 號按鈕可以增加其他的 Endpoint。
增加新的 Endpoint 畫面中,請選取 Add endpoint。
接下來加入 FTP 最重要的 Endpoint 也就是 TCP Port 21,這是 FTP 命令通道所需要用到 TCP Port。
接著依照相同方法,將 FTP 資料通道所需要用到的 TCP Port 5432 與 TCP Port 5433 加進 Endpoint 後就大功告成了。
接下來我使用免費 FTP 軟體 FileZilla 來測試連線,如下圖般鍵入 my-ftp.cloudapp.net 的 Domain Name 按下連線按鈕後即可連線到雲端。
對於 Windows Server 上 FTP 相關操作與設定,可以參閱 https://learn.iis.net/page.aspx/309/configuring-ftp-firewall-settings-in-iis-7/