Azure上部署FTP服務

衡子發表於2016-03-09

FTP是個比較複雜的協議,其協議分為控制層和資料層,工作模式分為主動和被動兩種模式。

在預設的Active模式下其工作原理如下:

可以看到,客戶端發起FTP的請求道伺服器端,FTP的埠是21。使用者在控制層面通過認證後,會通知伺服器其開放的隨機埠號。隨後伺服器端將主動發起源埠為TCP 20目標埠為TCP 隨機埠號的連線請求,進行資料連線。

在一般情況下,FTP的伺服器和客戶端都是在防火牆之後的,伺服器端的防火牆要明確配置此伺服器要對外提供哪些服務的埠,客戶端的防火牆要求必須是客戶端主動發起連線的TCP 連線才會通過。

因為資料連線是伺服器端首先發起,如果FTP客戶端在防火牆之後,防火牆會中斷此資料連線,導致FTP可以登入,但不能傳輸資料。

被動模式的工作原理如下:

為解決客戶端在防火牆後,FTP不能正常工作的情況,可以選擇FTP的被動模式。其在控制層面的過程和主動模式相似,但在使用者認證通過,客戶端進入PASV模式後,伺服器端會根據事先的配置,隨機選擇特定範圍的TCP埠作為資料傳輸的埠,並開放這個埠等待使用者資料的傳輸,同時並把這個資訊傳送給客戶端,客戶端會通過這個埠發起資料傳輸的請求。當FTP伺服器的資料返回給客戶端時,客戶端前面的防火牆發現此TCP連線是客戶端發起的TCP連線,所以伺服器的資料會順利的穿過防火牆,實現資料傳輸。

所以為能讓所有的客戶端能夠訪問FTP伺服器,一般情況下,FTP伺服器會同時支援主動模式和被動模式。

在Azure環境下,VM的endpoint相當於FTP 伺服器前端的防火牆,需要在endpoint上開啟所有可能的控制層面和資料層面的埠。所以:TCP 21(控制層面埠)、TCP 20(主動模式資料埠)、多個TCP埠(被動模式的資料埠)都要在endpoint上開啟。

另外VM本身的防火牆也要做相應的設定,開放上述埠。

下面將通過安裝vsftp為案例,在Azure上部署FTP服務。

共有三個部分:1. 安裝vsftp, 2. 設定VM的endpoint ,3. 設定VM的防火牆,之後就可以測試了。

1.安裝vsftp

yum install –y vsftpd

更改vsftpd的配置檔案:

Vim /etc/vsftpd/vsftpd.conf

新增以下內容:

pasv_enable=YES

pasv_min_port=1120

pasv_max_port=1121

這三行表示:開啟被動模式,其資料傳輸隨機埠為1120-1121。

儲存後啟動vsftpd服務。

2.配置VM的endpoint

可以看到開放了FTP的控制層面埠:21,開放了FTP主動模式的資料埠:20,開放了FTP被動模式的資料埠(此埠是配置檔案裡配置的):1120、1121。

3.配置VM的防火牆

簡化配置,關閉iptables:

iptables –F

service iptables save

至此配置都結束了。測試:

C:\Users\hengz>ftp hwcentos65.chinacloudapp.cn

Connected to hwcentos65.chinacloudapp.cn.

220 (vsFTPd 2.2.2)

200 Always in UTF8 mode.

User (hwcentos65.chinacloudapp.cn:(none)): anonymous

331 Please specify the password.

Password:

230 Login successful.

ftp> ls

200 PORT command successful. Consider using PASV.

150 Here comes the directory listing.

pub

226 Directory send OK.

ftp: 8 bytes received in 0.01Seconds 0.67Kbytes/sec.

可以成功顯示內容。

相關文章