Ubuntu

vsFTPd 瀏覽器無列表

  • January 20, 2022

我正在嘗試通過瀏覽器訪問我的 ftp 伺服器,但我遇到了問題。

如果我使用 Filezilla 訪問它,我可以很好地看到目錄。但是使用瀏覽器我沒有目錄列表。

我已將此條目添加到 iptables 希望解決問題,但它沒有改變:

-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT

簡單的解決方案是在連接到該 FTP 伺服器時將 Filezilla 切換為使用被動模式。

當您連接到 FTP 時,您使用稱為控制通道的埠 21。這是用於發送命令和接收有關發出命令結果的通知的連接。請注意,對於文件列表(輸出到LIST)、文件傳輸(獲取文件RETR和放置文件STOR)和其他實際需要傳輸數據的操作,會創建一個稱為數據通道的單獨通道。FTP 可以在主動或被動兩種模式中的任何一種模式下操作此數據通道。這兩個都是指數據通道是如何建立的。

You issue a LIST (in active mode)

CLIENT                                 FIREWALL                              FTP SERVER
                                         _              (port 21)                _
__  _               (port 21)           |=| ---------- LIST command --------->  |=|
[__]|=|  ----- LIST command issued -- >  |=|                                     |=|
/::/|_| .                                |_| <----- FTP server attempts to ----  |_|
       `\___ now listening on arbitrary            connect and gets denied
             port for data channel say 8000             by firewall

在活動模式下,客戶端發布它創建的任意偵聽埠,FTP 伺服器連接到客戶端機器上的這個發布的地址和埠。這通常是防火牆阻止流量的地方,因為它指向客戶端主機上的隨機(經常變化的)高階埠號,用於通告 FTP 數據通道。Filezilla 預設使用 6000 到 7000 之間的埠。如果防火牆沒有阻止此連接,則LIST命令的輸出將通過此單獨的通道傳輸。

You issue a LIST (in passive mode)


CLIENT                             FIREWALL                               FTP SERVER
                                      _              (port 21)                _
__  _            (port 21)           |=| ---------- LIST command --------->  |=|
[__]|=| --- LIST command issued -- >  |=|                                     |=|
/::/|_|                               |_| <--- FTP server advertises the ---  |_|
                                              listening data port over     \___ server with
                                                 the control channel         listening data
                                                                                channel

CLIENT                                 FIREWALL                            FTP SERVER
                                         _              (port 21)             _
__  _   <--- open control channel --->  |=| ---- open control channel ---->  |=|
[__]|=|                                  |=|                                  |=|
/::/|_|  --- client establishes a ---->  |_| ---- passive data channel ---->  |_|
            connection to the                    connection allowed
            advertised data channel                  by firewall       

PASV在被動模式下,角色互換,FTP 客戶端在命令之前發出LIST命令。然後,FTP 伺服器創建一個偵聽 TCP 埠並將其通告給客戶端連接以建立數據通道。大多數防火牆通常允許這樣做(因為客戶端可以將連接出站到任何埠)。

請注意,如果您的 FTP 伺服器和 Internet 之間有防火牆,則此防火牆必須配置為打開這些埠以允許被動連接。大多數 FTP 伺服器都提供了設置這些埠將被通告的範圍的能力,並且可以打開這些埠以允許這些連接。

如果您受到限制並且有一個無法進行被動操作的客戶端,Filezilla 提供了該功能(未編輯 -> 設置… -> 連接/FTP/主動模式來設置要使用的埠),然後您可以將這些添加到您的防火牆。

引用自:https://unix.stackexchange.com/questions/90754