注:
     通过笔者”FTP服务器工作原理及如何通过PAM认证实现虚拟用户登录“博文,我们了解到FTP是一种文件共享协议,而且使用的是明文传输机制,所以在互联网上传输用户和密码是不安全的,所以要采用SSL/TLS加密算法提供密文传输机制,来保证用户和密码在传输过程的安全性。
     相关理论知识在这就不再阐述,想了解的博友可以到“
FTP理论”了解FTP相关知识及简单配置。
 

    下面博文主要介绍基于SSL/TLS通过openssl工具实现FTP+SSL/TLS实现安全传输机制     要实现    SSL/TLS功能,必须安装mod_ssl模块,所以需要事先安装mod_ssl及利用openssl工具创建私有CA,笔者在"如何通过Openssl实现私有CA,并实现TLS/SSL功能"的博文中详细介绍了如何通过openssl工具创建私有CA证书颁发机构,所以在这也不再阐述。
  
实现过程:
Seq1:安装FTP所需要的软件包(可以使用源码编译安装,也可以选择rpm安装,这里采用的是rpm安装的方式)


  
  1. # rpm -q vsftpd            ##查看当前Linux系统是否安装vsftpd软件包  
  2. # yum install vsftpd -y    ##如果没有安装,可以使用yum来安装  
  3. # rpm -ql vsftpd           ##查看vsftpd软件包在安装时,所生成的文件路径 

Seq2:启动FTP服务器,并利用Linux自带的开源软件tcpdump来截获FTP登录时产生的相关报文,并分析用户名和密码。


  
  1. # service vsftpd restart  
  2. 附加:tcpdump  
  3. tcpdump的语法:  
  4.     tcpdump [options] [Protocol] [Direction] [Host(s)] [Value] [Logical Operations] [Other expression]  
  5. # tcpdump -i eth0 -nn -X tcp port 21 and ip host 172.16.88.10 

测试:用Windows客户机使用hadoop用户登录FTP服务器,验证是否FTP使用明文传输机制

查看服务器产生的报文记录:(测试结果:不难发现用户和密码)

Seq3:通过Openssl创建CA证书颁发机构:可以到笔者“openssl创建私有CA”了解详细信息


  
  1. # cd /etc/pki/CA  
  2. # (umask 077;openssl genrsa -out private/cakey.pem 2048)  ##生成私钥
  3. # openssl req -new -x509 -key private/cakey.pem cacert.pem -days 3650 ##生成自谦证书

Seq4:通过Openssl为FTP服务提供一对密钥并申请证书颁发请求


  
  1. # mkdir /etc/vsftpd/ftps  
  2. # (umask 077; openssl genrsa -out ftps.key 1024)   ##创建私钥
  3. # openssl req -new -key ftps.key -out ftps.csr -days 3650  ##发送证书颁发请求

Seq5:CA证书颁发机构,收到证书颁发请求,并对证书(csr)颁发数字证书(crt)


  
  1. # openssl ca -in vsftpd.csr -out vsftpd.crt -days 3650 

Seq6:编辑FTP主配置文件,在最后一行添加如下内容


  
  1. ssl_enable=YES      ##启用ssl功能  
  2. ssl_tlsv1=YES      ##支持ssl哪些协议(tlsv1、sslv2(不建议使用)、sslv3)  
  3. ssl_sslv3=YES  
  4. allow_anon_ssl=NO   ##对于匿名用户不采用ssl功能  
  5. force_local_data_ssl=YES   ##数据在传输过程中采用ssl加密传输  
  6. force_local_logins_ssl=YES  ##本地用户在登录FTP服务时,强制使用ssl功能  
  7. rsa_cert_file=/etc/vsftpd/ftps/vsftpd.crt   ##FTP服务的数字证书(公钥),存放的位置  
  8. rsa_private_key_file=/etc/vsftpd/ftps/vsftpd.key  ##FTP服务自身的密钥(私钥),存放位置(权限为600) 

Seq7:设置iptables和SElinux


  
  1. 注:在写iptables会话规则时,需要加载ip_conntrack_ftp和ip_nat_ftp这两块模块  
  2. # vim /etc/sysconfig/iptables-config  
  3. IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp" 
  4. # iptables -F  
  5. # iptables -P INPUT DROP 
  6. # iptables -P OUTPUT DROP 
  7. # iptables -P FORWARD DROP 
  8. # iptables -A INPUT -d 172.16.88.10 -p tcp -m state --state ESTABLELISHED,RELATED -j ACCEPT  
  9. # iptables -A OUTPUT -s 172.16.88.10 -p tcp -m state --state ESTABLELISHED,RELATED -j ACCEPT  
  10. # service iptables save  
  11. # service iptables restart  
  12. SELINUX的相关设置  
  13. # gentenforce  ## 查看selinux的工作状态  
  14. enforcing ##SELinux security policy is enforced.  
  15. permissive ##SELinux prints warnings instead of enforcing.  
  16. disabled   ##SELinux is fully disabled.  
  17. # getsebool -a | grep ftp  
  18. allow_ftpd_anon_write --> off  
  19. allow_ftpd_full_access --> off  
  20. allow_ftpd_use_cifs --> off  
  21. allow_ftpd_use_nfs --> off  
  22. allow_tftp_anon_write --> off  
  23. ftp_home_dir --> off  
  24. ftpd_connect_db --> off  
  25. ftpd_disable_trans --> off  
  26. ftpd_is_daemon --> on  
  27. httpd_enable_ftp_server --> off  
  28. tftpd_disable_trans --> off  
  29. setsebool -P allow_ftpd_anon_write on 
  30. setsebool -P allow_ftpd_full_access on 

Seq9:再次使用Windows登录FTP服务,看看是否可以正常登录。

 
测试结果显示:不能正常登录,须进行验证

Seq10:我们使用FlashFXP工具并且给予验证,查看是否可以正常登录。
运行FlashFXP工具连接FTP服务器:
点击会话->快速连接->如图:

 测试结果不可以正常登录,显示连接失败,那我们通过认证看看是否可以正常登录FTP服务呢:
点击站点->新建站点->如图:


点击接受或者保存,即可能力FTP服务,此次用户名和密码都是以加密的形式传送的。