參考:https://blog.csdn.net/xqhrs232/article/details/54633006python
https://blog.csdn.net/yuanhangq220/article/details/52793892安全
一,主動模式服務器
PORT中文稱爲主動模式,工做的原理: FTP客戶端鏈接到FTP服務器的21端口,發送用戶名和密碼登陸,登陸成功後要list列表或者讀取數據時,客戶端隨機開放一個端口(1024以上), 發送 PORT命令到FTP服務器,告訴服務器客戶端採用主動模式並開放端口;FTP服務器收到PORT主動模式命令和端口號後,經過服務器的20端口和客戶端 開放的端口鏈接,發送數據,原理以下圖:.net
二,被動模式3d
PASV是Passive的縮寫,中文成爲被動模式,工做原理:FTP 客戶端鏈接到FTP服務器的21端口,發送用戶名和密碼登陸,登陸成功後要list列表或者讀取數據時,發送PASV命令到FTP服務器, 服務器在本地隨機開放一個端口(1024以上),而後把開放的端口告訴客戶端, 客戶端再鏈接到服務器開放的端口進行數據傳輸,原理以下圖:code
3、兩種模式的比較blog
從上面的運行原來看到,主動模式和被動模式的不一樣簡單概述爲: 主動模式傳送數據時是「服務器」鏈接到「客戶端」的端口;被動模式傳送數據是「客戶端」鏈接到「服務器」的端口。class
主動模式須要客戶端必須開放端口給服務器,不少客戶端都是在防火牆內,開放端口給FTP服務器訪問比較困難。登錄
被動模式只須要服務器端開放端口給客戶端鏈接就好了。原理
vsftp開啓主動被動模式
1. 開啓被動模式的配置:
connect_from_port_20=NO(默認爲YES) #設置是否容許主動模式
pasv_enable=YES(默認爲YES) #設置是否容許被動模式
pasv_min_port=50000(default:0(use any port))
pasv_max_port=60000(default:0(use any port))
2. 開啓主動模式的配置:
connect_from_port_20=YES
pasv_enable=NO
vsftp默認模式爲被動模式,假如vsftp搭建在雲服務器須要開啓一個範圍很大的端口給客戶端,不安全,能夠修改爲強制主動模式而後對外只開放21端口便可
客戶端能夠直接修改鏈接模式爲主動模式也能夠鏈接ftp
在vsftp服務器端強制開啓爲主動模式可能會致使一些程序沒法鏈接ftp還須要保持原有的被動模式,可是被動默認是隨機產生端口通信,服務器端又不可能無限開啓端口,能夠保持被動模式配置,把被動模式開啓的端口範圍限制在必定端口範圍內,而後服務器只須要對外開啓這幾個端口則可,修改配置文件添加如下
pasv_enable=YES #強制開啓爲被動模式,默認也爲被動模式 pasv_min_port=60000 #被動模式開啓的最小隨機端口 pasv_max_port=60100 #被動模式開啓的最大隨機端口
這樣設置就能夠在服務器至對外開啓21 60000-601000端口了