ftp伺服器主動模式與被動模式

2021-06-29 15:42:57 字數 1703 閱讀 2271

首先,介紹一下ftp關於主動模式與被動模式的原理:

這一部分有什麼作用? 如果你是在內網搭建乙個ftp伺服器進行測試,那麼不必關注,那是很容易的,內網的機子

之間一般沒有防火牆所以無關於主動模式和被動模式,但是在生產環境中,ftp伺服器與客戶端之間一般不止乙個

防火牆,所以有必要弄清楚這個原理。

ftp協議有兩種工作方式:port方式和pasv方式,中文意思為主動式和被動式。

port(主動)方式的連線過程是:客戶端向伺服器的ftp埠(預設是21)傳送連線請求,伺服器接受連線,建立一條命令鏈路。當需要傳送資料時,客戶端在命令鏈路上用port命令告訴伺服器:「我開啟了***x埠,你過來連線我」。於是伺服器從20埠向客戶端的***x埠傳送連線請求,建立一條資料鏈路來傳送資料。

pasv(被動)方式的連線過程是:客戶端向伺服器的ftp埠(預設是21)傳送連線請求,伺服器接受連線,建立一條命令鏈路。當需要傳送資料時,伺服器在命令鏈路上用pasv命令告訴客戶端:「我開啟了***x埠,你過來連線我」。於是客戶端向伺服器的***x埠傳送連線請求,建立一條資料鏈路來傳送資料。

概括一下就是:

主動模式:伺服器向客戶端敲門,然後客戶端開門

被動模式:客戶端向伺服器敲門,然後伺服器開門

所以,如果你是如果通過**上網的話,就不能用主動模式,因為伺服器敲的是上網**伺服器的門,而不是敲客戶端的門

而且有時候,客戶端也不是輕易就開門的,因為有防火牆阻擋,除非客戶端開放大於1024的高階埠

說一下生產環境中ftp的搭建:

基於上面的主動模式與被動模式的介紹,來說一下生產環境中ftp的搭建:

首先生產環境中的ftp應該採用被動模式,因為被動模式是始終是客戶端向服務端去請求連線,而主動模式需要伺服器去去連線客戶端的埠,連線客戶端的埠,如果客戶端是公網ip且沒有防火牆的話就沒問題,但是現在的問題是

客戶端一般都是經過nat位址轉換的,伺服器要連到客戶端的時候連到的根本不是客戶端,而是提供nat服務的那個裝置,所以不能使用主動模式。

使用被動模式,如果使用被動模式的話,那麼客戶端在連線到服務端的21號埠後,需要傳輸資料時,伺服器在命令鏈路上用pasv命令告訴客戶端:「我開啟了***x埠,你過來連線我」。於是客戶端向伺服器的***x埠傳送連線請求,建立一條資料鏈路來傳送資料。

但是在生產環境中,不要忘記在伺服器前面一般都要有防火牆裝置的,而且預設策略都是disable,一般都是開啟僅有的幾個埠,其他埠就都關掉了,客戶端連線伺服器提供出來的那個埠時,會被防火牆就在中間拒絕掉了,

為了避免這種情況,需要在ftp伺服器配置檔案裡把被動模式時開放的埠做一下限制,這樣就可以限制危險

比如 vsftp的設定

編輯vsftpd的配置檔案 /etc/vsftpd/vsftpd.conf

新增 

pasv_max_port=3000

pasv_min_port=3020

# 此兩行意思規定伺服器在被動模式下開放埠時並不是在大於1024的埠中隨機開放,而是開放這個範圍內規定的埠

針對防火牆的改動:

除了記得開放21埠外還要記得在防火牆上開放3000--3020 這些埠

如果是iptables:

iptables -i input -p tcp --dport 3000:3020 -j accept

如果是用防火牆裝置,那麼請在防火期裝置上開啟對提供ftp服務的主機的ip的3000-3020這些埠的訪問,這樣應該就沒問題了

**

FTP伺服器主動與被動模式

port和pasv模式 所謂port模式也就是主動模式。在ftp協議剛剛建立的時候,只定義了普通的連線模式,也就是port模式。port模式的連線過程是 在開始乙個ftp的連線時,客戶端程式首先會為自己隨機分配乙個tcp埠,它使用這個個埠向伺服器的ftp埠 預設為21 發出連線請求,伺服器接受請求之...

FTP主動模式與被動模式

ftp最權威的參考見rfc 959,有興趣的朋友可以仔細閱讀 ftp使用2個tcp埠,首先是建立乙個命令埠 控制埠 然後再產生乙個資料埠。主動模式使用tcp 21和20兩個埠。被動模式會工作在大於1024隨機埠。1 主動模式 port模式 客戶端從乙個任意的非特權埠n n 1024 連線到ftp伺服...

FTP主動模式與被動模式

一般來說,客戶端有乙個 socket 用來連線 ftp 伺服器的相關埠,它負責 ftp 命令的傳送和接收返回的響應資訊。一些操作如 登入 改變目錄 刪除檔案 依靠這個連線傳送命令就可完成。伺服器的命令埠號一般是21。如果使用主動模式,通常客戶端會傳送乙個埠號給伺服器端,並在這個埠監聽。伺服器需要連線...