防火牆阻止 FTP PASV 回應

防火牆阻止 FTP PASV 回應

我有一個支援被動伺服器模式(使用 PASV 命令)的 FTP 伺服器。這在 Windows XP 上運作良好。當我想從啟用了防火牆的 Windows Vista 或 Windows 7 存取此伺服器時,我會遇到連接立即關閉的情況。重置資料包被傳送到伺服器,並且套接字收到訊號表示伺服器已重設連線(事實並非如此)。

停用防火牆後問題就會消失。

與其他 FTP 伺服器的連線運作正常。不同之處在於伺服器對 PASV 的回應不使用括號將位址欄位括起來。正如 RFC-959 和 RFC-1132 中所記錄的那樣,這是合法的。

如何配置防火牆來阻止這種不良行為?

答案1

我不認為括號是罪魁禍首。
我寧願認為該伺服器分配的動態連接埠範圍與 Vista/7 不一致。

有關該主題的討論,請參閱這篇文章:
Windows Vista 和 Windows Server 2008 中的 TCP/IP 預設動態連接埠範圍已更改

若要查看電腦上 ipv4 的動態連接埠範圍,請使用下列命令:

netsh int ipv4 show dynamicport tcp 

若要設定 TCP 的動態連接埠範圍,請使用下列範例:

netsh int ipv4 set dynamicport tcp start=1024 num=30000

更多命令在上面的文章中有描述。

編輯:請注意,Windows 防火牆可能足夠智能,可以打開 PASV 回應中指定的動態端口,即使該端口不在動態端口的預設範圍內。但它可能仍然不夠智能,無法理解沒有括號的回應。研究一下擴展動態連接埠預設範圍的可能性可能是值得的。

答案2

這讓我想起了在 Windows 7 下執行 Java 和 FTP 時遇到的問題。

https://stackoverflow.com/questions/6990663/java-7-prevents-ftp-transfers-on-windows-vista-and-7-if-firewall-is-on-any-idea

它最終成為具有 FTP、被動模式和 IPv6 連接的 Microsoft 防火牆的一個錯誤(位址不需要是 IPv6 位址,只需使用 IPv6 堆疊進行連接的軟體即可)。

你的問題中描述的症狀聽起來與這個問題非常相似,所以我將在這裡連結和總結(即使這個問題與Java無關,修復可能是相同的)

那裡提到的一些解決方案的摘要:

  • 微軟修補程式:http://support.microsoft.com/kb/2754804
  • 試著讓您在 Vista/7 下執行的 FTP 用戶端與 IPv4 堆疊一起運作(也許可能,也許不可能)
  • 停用 Windows 防火牆的狀態 FTP 使用netsh advfirewall set global StatefulFTP disable(但這將停用非被動模式 FTP 連線穿透防火牆)

答案3

您無法配置防火牆,因為它有問題。

只要您無法變更 FTP 伺服器以傳送括號中的連接埠資訊(因為它內建於現場的舊裝置中),您就需要具有下列行為的特殊用戶端。

該客戶端必須TYPE I在每個PASV命令之前立即發送命令,以使防火牆保持正常狀態。如果您需要非二進位傳輸,您可以變更 TYPE 指令的參數。

相關內容