vsftp的安裝
分爲本地用戶、虛擬用戶兩種模式,今天就不在此過多介紹怎麼分別啓用不一樣的模式,之後再單獨一篇安裝的文章。
yum install -y vsftpd
配置文件:/etc/vsftpd/vsftpd.conf
啓動:systemctl start vsftpdwindows
vsftp客戶端
服務啓動後,使用客戶端鏈接,經常使用的方式有windows地址欄中輸入ftp://x.x.x.x 或者下載安裝FileZilla輸入服務端IP,端口默認21測試鏈接。安全
主動模式、被動模式介紹
從FileZilla中咱們能夠發現,ftp鏈接有3種模式:默認、主動、被動。在服務端其實只有兩種主動和被動,通過實測,客戶端(含windows地址欄鏈接)默認鏈接方式是被動模式。下面來講說主動模式跟被動模式的區別吧。
咱們重溫一下FTP的工做過程。客戶端鏈接服務端TCP 21端口創建命令通道後,輸入用戶名密碼完成登陸;隨後的每一次數據傳輸都須要另外創建數據通道進行; 若是數據通道由客戶端發起,服務端接受,咱們稱之爲被動模式;反之,若是數據通道由服務端發起,客戶端接受,則稱之爲主動模式。
主動模式:
被動模式:網絡
AWS遇到的問題,實際上是NAT的問題。
鋪墊了這麼久,如下進入正題。除了ftp有NAT的問題,還有其餘一些服務也存在,如VOIP服務。
咱們在共有云購買的機器如今網卡上都是隻有一塊內網網卡,而後經過NAT綁定公網IP對外提供公網服務。(PS:老早前公網地址是能夠啓動在雲主機的網卡上的,這樣就沒有NAT問題),這時主動模式的鏈接不會受影響,緣由請自行領悟。這裏只介紹會出現問題的被動模式。
以被動模式內網訪問時,完美!順利!
以被動模式公網訪問時,糟糕!
這裏鏈接超時,顯而易見,FTP服務端發送給客戶端的IP地址是服務端的私有地址。位於Internet上的客戶端沒法創建與位於VPC內部的私有地址10.0.0.10直接通信。session
②服務端適配
有些時候,修改協議和實現須要多方協調和很長的時間才能完成。在RFC2428標準化以前,一些FTP實現就已經經過修改實現來適配基本NAT,而非修改協議。
以vsftpd爲例,它容許經過配置文件vsftpd.conf中的配置項 pasv_address=x.x.x.x 告知服務端,在PASV被動模式下,應當指示客戶端鏈接到配置項指定的IP(而不是服務端的私有IP)來適配基本NAT。
題外話:其餘的一些常見應用例如VoIP類應用,也有相似的機制去適配基本NAT;例如引入STUN/TURN/ICE等方式適配各類更加複雜的NAT穿越場景(多年前搞過VOIP)app
③啥都不改(此法慎用)適用於精通網絡的高手
#從EC2 實例元數據服務獲取本實例的公網IP(若有)、私網IPcurl
public_ipv4=`curl -s http://169.254.169.254/latest/meta-data/public-ipv4` local_ipv4=`curl -s http://169.254.169.254/latest/meta-data/local-ipv4`
#配置私網地址段,這裏應爲EC2實例所在VPC的地址範圍tcp
local_net=10.0.0.0/16 if [ 「x${public_ipv4}」 == 「x」 ] then echo 「No public IPv4 address available for this instance, abort.」 exit 1 else
#若是EC2實例的公網IP不爲空,則將該公網地址添加到eth0上ide
ip address add ${public_ipv4}/32 dev eth0
#本地接受的鏈接,若是來源不是本VPC,那麼將IP包的目的地址改寫爲公網IP測試
iptables -t nat -A PREROUTING ! -s ${local_net} -d ${local_ipv4} -i eth0 -j DNAT --to ${public_ipv4}
#本地發起的鏈接,若是出方向流量的源IP地址是公網地址,那麼須要改寫爲私網IPthis
iptables -t nat -A POSTROUTING -s ${public_ipv4} -o eth0 -j SNAT --to ${local_ipv4} fi
驗證腳本執行結果:
首先檢查本實例的公網IP是否已經正確配置到eth0上。
~ # ip addr show dev eth0
而後檢查iptables的NAT規則是否正確配置
~ # iptables -t nat -nvL
最後分別從VPC內部和Internet鏈接到服務,驗證結果
~ $ ss -nt
此法不建議生產使用,維護門檻比較高。
最後:附上清測可使用的vsftpd.conf,注意須要把20、2一、pasv_min~pasv_max這些端口在安全組中配置開放訪問策略anonymous_enable=NOlocal_enable=YESwrite_enable=YESlocal_umask=022dirmessage_enable=YESxferlog_enable=YESconnect_from_port_20=YESxferlog_std_format=YESidle_session_timeout=300pam_service_name=vsftpduserlist_enable=YEStcp_wrappers=YESmax_clients=65530max_per_ip=65530reverse_lookup_enable=NOpasv_address=x.x.x.xpasv_enable=YESpasv_max_port=65535pasv_min_port=64000