被动模式下FTP不能建立数据会话问题
問題描述:
????在阿里云使用WINDOWS IIS搭建了FTP服務器,使用被動模式,指定了被動端口并且已經放行FTP的命令和數據端口。在實際使用時發現使用專用的FTP客戶端(如WinSCP、lftp、瀏覽器等)一切正常,當使用FTP命令時可以登陸FTP服務器,但不能建立FTP數據連接,也就不能列出和傳輸數據文件。提示:ftp: connect: Resource temporarily unavailable。
????
????
分析:
??? 通過抓包和返回的信息發現FTP服務器返回了數據端口號和服務器IP地址,但服務器IP地址是內網IP,而非實際使用的公網IP,此時FTP客戶端會向該內網IP發起數據會話建立請求,因為路由不可達所以超時后提示ftp: connect: Resource temporarily unavailable。
????經過測試,是由于該FTP服務器運行在阿里云的VPC內,而VPC默認不進行公網IP和內網IP的NAT轉換。但是專用的FTP客戶端和瀏覽器則可以根據返回的數據包,提取出FTP數據端口號向源公網IP發起數據會話請求,由此可見,傳統的FTP命令還是不夠“聰明”。
????
解決方法:
??? IIS:
????????在FTP服務器上手工指定公網IP即可,此時FTP服務器在返回被動模式數據端口時將返回帶有指定公網IP的套接字信息。如下:
????????
????????
??? vsftpd:
????????對于Linux下的vsftpd,需添加:pasv_address=公網IP。
????????或者關閉PASV模式的安全檢查,即:pasv_promiscuous=YES,該檢查確保數據連接和控制連接是來自同一個IP地址。小心打開此選項。此選項唯一合理的用法是存在于由安全隧道方案構成的組織中。默認值為NO。
??? ????注意:當使用pasv_address指定公網IP時,必須將監聽的IP地址改為IPv4,即:listen=YES,否則vsftpd將返回錯誤的被動套接字,如:227 Entering Passive Mode (0,0,0,0,34,198). 。而啟用IPv4地址時則需要禁用IPv6地址的監聽,因為兩者互斥。
listen=YES????????#指定被動模式時的公網IP地址時只能監聽在IPv4地址 listen_ipv6=NO????#與listen沖突,默認監聽IPv6地址,當監聽在IPv4時IPv6必須禁用,否則vsftpd.service將無法啟動pasv_enable=YES pasv_min_port=8900 pasv_max_port=8909 pasv_address=47.95.120.253???????#指定被動模式時的公網IP地址 #pasv_addr_resolve=YES #pasv_promiscuous=YES????????
轉載于:https://blog.51cto.com/yinkai/2345548
總結
以上是生活随笔為你收集整理的被动模式下FTP不能建立数据会话问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 互联网下半场的角逐,玩转轻资产的大数据服
- 下一篇: shanchu