Linux--- ftps、sftp协议

ftps协议:

ftp over ssl,传输层是ftp协议,传输层与网络层之间是ssl协议,内容是加密的,但仍然存在控制链路、数据链路,服务端是vsftd进程,加载libssl.XXX相关动态库。

Linux下配置ftp服务支持ftps协议方法:

创建服务端ssl证书,必须是pem格式,包含私钥、证书:(不需要CA证书)

 openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd.pem -out /etc/vsftpd.pem

修改/etc/vsftpd/vsftpd.conf配置:

 ssl_enable=YES

 rsa_cert_file=/etc/vsftpd.pem

 ssl_tlsv1=YES

 ssl_tlsv2=YES

重启ftp服务:

 service vsftpd restart  或  service inetd restart

 

Linux下提供lftp工具做ftps客户端,ftps登录、传输过程只能通过debug方法看到交互记录,抓包看不到具体内容,请求、响应也都是加密的,这样带来一个问题,ftps客户端与服务端之间不能经过防火墙设备。port请求、pasv响应经过网关时,网关无法识别携带的IP、端口信息,也就无法做映射。

lftp> debug

lftp>open ftps://XXX:[email protected]:1310

lftp>dir

显示跟踪日志如下:

---- Resolving host address...

---- Connecting to 218.206.190.10 (218.206.190.10) port 1310

<--- 220 (vsFTPd 2.0.7)

……….

---> FEAT

---> AUTH TLS

<--- 234 Proceed with negotiation.

----  PASV

---- 227 Entering Passive Mode (10,248,12,151,235,76)

---- Connecting to 218.206.190.10 (218.206.190.10) port 60236       (235*256 + 76 = 60236)

.............          一直无法链接成功

<--- QUIT

服务端地址218.206.190.10:1310,网关ip地址218.206.190.10,登录过程使用控制链路没有问题;

执行pasv命令后,服务端返回(10,248,12,151,235,76)信息,都是服务端内网地址、端口;

客户端向网关IP(218.206.190.10)的60236端口建数据链路,一直无法成功。

普通ftp经过网关时,里面的ip、端口都由网关软件做过替换了,pasv响应消息里的内网ip、内网端口都转换成网关映射的ip、端口,ftps经过网关时,没法执行这个转换操作。解决方法,必须在网关做全端口映射,ip问题可以由配置解决,在/etc/lftpd.conf新增如下配置:

set ftp:ssl-allow on

set ftp:ssl-force on

set ftp:ssl-protect-data on

set ftp:ignore-pasv-address yes  ---设置数据链路使用控制链路相同的IP,而不使用PASV返回的IP;默认为NO。

测试结果:

lftp :~> open ftps://xxxx:yyyy@218.206.190.10:1310                                             
........................
---> PASV
<--- 227 Entering Passive Mode (10,1,128,123,3,223)
---- Address returned by PASV is ignored according to ftp:ignore-pasv-address setting
---- Connecting data socket to (10.254.255.123) port 991
---> LIST
<--- 150 File status okay; about to open data connection.

Sftp协议:

是ssh协议中一个单独协议,使用22端口,不区分控制链路、数据链路,内容是加密的,服务端是sshd进程,与vsftpd进程无关。通过抓包可以确认,登录、传输过程都使用22端口,因此不存在ftps那种不能过防火墙问题。

你可能感兴趣的:(Linux--- ftps、sftp协议)