時光流轉,先森竟然已經近一年沒有發過博客了,現在先森的工作是騰訊云公有云的大客戶售后運維,平時比較忙,博客這邊就基本處于荒廢狀態了。
本文是昨天處理的一個客戶遇到的問題,雖然問題不是很難,但是比較難為先森,先森做運維,做的是Linux運維,對Windows著實不是很熟悉。
問題背景
客戶反饋,Windows服務器上,配置完IIS的FTP服務器后,安全組需要配置全端口放通才能正常訪問FTP。
Windows先森不是很懂,但是FTP還是挺熟悉的,上一家公司做運維的時候,FTP環境還是搭建過不少的,不過搭建的都是vsftpd。
這個問題先森這邊一看,想到的就是被動端口的問題。
FTP有主動模式和被動模式兩種:
主動模式:主動模式下,FTP客戶端從任意的非特殊的端口(N > 1023)連入到FTP服務器的命令端口--21端口。然后客戶端在N+1(N+1 >= 1024)端口監聽,并且通過N+1(N+1 >= 1024)端口發送命令給FTP服務器。服務器會反過來連接用戶本地指定的數據端口,比如20端口。
被動模式:被動模式下,FTP客戶端會用一個大于等于1024的端口N去連接FTP服務器的命令端口(21端口),然后服務器側會告知客戶端一個端口,讓客戶端再用本地N+1的端口去連接服務器告知的這個端口,用于傳輸數據,而服務器這個端口就叫做被動端口
解決問題
讓客戶參考騰訊云官方文檔《Windows 云服務器搭建 FTP 服務》中的第六步,設置安全組及防火墻:

騰訊云官方文檔-步驟6
客戶這個問題,其實答案本身就在上圖中了。FTP的被動模式,默認的被動端口范圍就是1024-65535。客戶也說了,所有端口全放通是能夠正常使用的。所以客戶的需求是縮小被動端口范圍。
上面的步驟6的第二點,其實是有說明怎么配置被動端口范圍的。但是客戶連我們精心準備的騰訊云文檔都不愿意看,難道還想讓客戶去看滿是英文的微軟官方文檔么。微軟官方文檔中的第四步也說明了怎么配置被動端口:

微軟官方文檔(已翻譯)
但是微軟官方文檔是真的耿直,通篇文檔一張圖片示意都沒有,且跟著做了其實也有坑。
先森這邊也讓客戶按照指引,在FTP防火墻支持中配置被動端口的范圍。可是客戶配置之后,在安全組中放通了相應端口,結果還是會出現報錯:

打開 FTP 服務器上的文件夾時發生錯誤,請檢查是否有權限訪問改文件夾。詳細信息:操作超時
這個問題看著是權限問題,其實還是被動端口沒有放通的問題導致。
另外有一點,配置FTP防火墻支持的時候,除了可以配置被動端口的范圍,還有一個“防火墻的外部 IP 地址”,最好也一并配置上,需要配置為服務器的公網IP地址,否則可能遇到下面的報錯:

227 Entering Passive Mode
先森對windows服務器著實不太熟悉,沒辦法,最后買了一臺Windows服務器按照步驟做測試。僅按照騰訊云文檔及微軟文檔配置,確實會報錯操作超時。最后發現,配置完成之后,還需要在“開始->管理工具->服務”中,找到【Microsoft FTP Service】服務,重啟該服務才能生效:

重啟【Microsoft FTP Service】服務
重啟服務后,先森再按照客戶的操作,直接在本地windows資源管理器中鍵入“ftp://公網IP:命令端口”進行測試,訪問正常:

測試連接FTP正常
比較迷的是,在【FTP 防火墻支持】中,“防火墻的外部 IP 地址”一經設置,立刻生效,但同一個配置地點的被動端口卻要重啟服務才能生效。可能這就像MySQL的配置,有些可以動態生效,有些就必須重啟才能生效。且這些配置都是在IIS管理器里配置的,IIS管理器旁邊也有一個重啟的按鈕:

重啟FTP站點
這個重啟點了是一點用都沒有,不過溯源來看也可以理解,這畢竟是重啟的站點,而不是服務。比較起來,果然還是Linux比較可愛。
轉載請注明出處來自http://www.cnidcc.cn/iis_ftp_pasv.html

川公網安備 51011202000104號