一、说明
在上一篇VSFTP服务器搭建及安全性配置中介绍了Linux下VSFTP的配置,在本篇文章中,将Vsftpd及ssl两者相结合以便部署更加安全的FTP服务器,主要解决VSFTP部署在互联网时的数据安全传输的问题。FTP与SSL相结合时,有TLS/SSL 显示加密以及TLS/SSL隐式加密两种方式。TLS/SSL显示加密时,服务端使用的21号端口,客户端先与服务端建立FTP控制连接,然后客户端再以AUTH TLS或者AUTH SSL命令显式地告诉服务器端来初始化相应的安全连接,此时我发现客户端主动模式是连接不上的,要将被动模式取消。TLS/SSL隐式加密时,客户端直接与服务端自动完成SSL安全连接,客户端向服务端的990端口发起请求,服务端要手工设置端口。
二、修改vsftpd.conf文件以支持SSL
[root@localhost vsftpd]# egrep -v '^#'
vsftpd.conf
anonymous_enable=YES
anon_umask=022
local_enable=YES
local_root=/var/www/html
write_enable=YES
local_umask=022
anon_upload_enable=YES
anon_mkdir_write_enable=YES
dirmessage_enable=YES
xferlog_enable=YES
connect_from_port_20=YES
dual_log_enable=YES
xferlog_file=/var/log/xferlog
vsftpd_log_file=/var/log/vsftpdlogfile
log_ftp_protocol=yes
xferlog_std_format=YES
chroot_local_user=NO
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd/chroot_list
allow_writeable_chroot=YES
listen=NO
listen_ipv6=YES
pam_service_name=vsftpd
userlist_enable=YES
tcp_wrappers=YES
#下面为支持SSL增加的部分
ssl_enable=yes
ssl_tlsv1=yes
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
force_local_logins_ssl=yes
force_local_data_ssl=yes
rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.perm #证书文件存储位置
三、使用openssl生成证书文件
[root@localhost .sslkey]# openssl req -new
-x509 -nodes -out vsftpd.perm -keyout vsftpd.perm
四、重启vsftpd服务,使用TLS/SSL显示加密连接服务器
1、客户端选择WinSCP工具,选择FTP协议,加密方式为TLS/SSL显示加密,输入账号密码
2、点击“高级”,在“连接”菜单中去掉“被动模式”勾选
3、确定后进行连接,看到如下的提示信息,根据提示下一步即可
4、抓包看一下报文,可以看到内容已经被加密,FTP控制连接建立起来后,客户端使用AUTH TLS命令请求服务端进行TLS加密,如下:
五、修改配置,使FTP服务器支持TLS/SSL隐式加密 传输
1、修改配置
ssl_enable=yes
ssl_tlsv1=yes
ssl_sslv2=NO
ssl_sslv3=NO
implicit_ssl=yes #支持隐式SSL
listen_port=990 #客户端使用隐式TLS/SSL加密传输时,默认向服务器的990端口发起访问
require_ssl_reuse=NO
force_local_logins_ssl=yes
force_local_data_ssl=yes
rsa_cert_file=/etc/vsftpd/.sslkey/vsftpd.perm
2、重启服务器vsftpd服务,然后检查端口990是否正常监听,注意防火墙是否放行该端口
3、使用WinSCP客户端进行连接,不用关闭FTP的被动模式
4、抓包看一下交互过程,在整个过程中不能直接抓取到FTP的协议及报文,直接被TLSV1.2取代,客户端直接与服务端完成安全连接的建立,如下图所示:
本文与前一篇博客共同构成了完整的VSFTP的安全配置,包括VSFTP自身的安全配置,如用户、权限、chroot、匿名用户等,同时说明了SSL与VSFTP协作时可以解决的安全传输的问题,共同解决了FTP安全的机密性、完整性、日志审计等问题。