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