注:
通过笔者”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安装的方式)
- # rpm -q vsftpd ##查看当前Linux系统是否安装vsftpd软件包
- # yum install vsftpd -y ##如果没有安装,可以使用yum来安装
- # rpm -ql vsftpd ##查看vsftpd软件包在安装时,所生成的文件路径
Seq2:启动FTP服务器,并利用Linux自带的开源软件tcpdump来截获FTP登录时产生的相关报文,并分析用户名和密码。
- # service vsftpd restart
- 附加:tcpdump
- tcpdump的语法:
- tcpdump [options] [Protocol] [Direction] [Host(s)] [Value] [Logical Operations] [Other expression]
- # tcpdump -i eth0 -nn -X tcp port 21 and ip host 172.16.88.10
测试:用Windows客户机使用hadoop用户登录FTP服务器,验证是否FTP使用明文传输机制
查看服务器产生的报文记录:(测试结果:不难发现用户和密码)
Seq3:通过Openssl创建CA证书颁发机构:可以到笔者“openssl创建私有CA”了解详细信息“
- # cd /etc/pki/CA
- # (umask 077;openssl genrsa -out private/cakey.pem 2048) ##生成私钥
- # openssl req -new -x509 -key private/cakey.pem cacert.pem -days 3650 ##生成自谦证书
Seq4:通过Openssl为FTP服务提供一对密钥并申请证书颁发请求
- # mkdir /etc/vsftpd/ftps
- # (umask 077; openssl genrsa -out ftps.key 1024) ##创建私钥
- # openssl req -new -key ftps.key -out ftps.csr -days 3650 ##发送证书颁发请求
Seq5:CA证书颁发机构,收到证书颁发请求,并对证书(csr)颁发数字证书(crt)
- # openssl ca -in vsftpd.csr -out vsftpd.crt -days 3650
Seq6:编辑FTP主配置文件,在最后一行添加如下内容
- ssl_enable=YES ##启用ssl功能
- ssl_tlsv1=YES ##支持ssl哪些协议(tlsv1、sslv2(不建议使用)、sslv3)
- ssl_sslv3=YES
- allow_anon_ssl=NO ##对于匿名用户不采用ssl功能
- force_local_data_ssl=YES ##数据在传输过程中采用ssl加密传输
- force_local_logins_ssl=YES ##本地用户在登录FTP服务时,强制使用ssl功能
- rsa_cert_file=/etc/vsftpd/ftps/vsftpd.crt ##FTP服务的数字证书(公钥),存放的位置
- rsa_private_key_file=/etc/vsftpd/ftps/vsftpd.key ##FTP服务自身的密钥(私钥),存放位置(权限为600)
Seq7:设置iptables和SElinux
- 注:在写iptables会话规则时,需要加载ip_conntrack_ftp和ip_nat_ftp这两块模块
- # vim /etc/sysconfig/iptables-config
- IPTABLES_MODULES="ip_conntrack_ftp ip_nat_ftp"
- # iptables -F
- # iptables -P INPUT DROP
- # iptables -P OUTPUT DROP
- # iptables -P FORWARD DROP
- # iptables -A INPUT -d 172.16.88.10 -p tcp -m state --state ESTABLELISHED,RELATED -j ACCEPT
- # iptables -A OUTPUT -s 172.16.88.10 -p tcp -m state --state ESTABLELISHED,RELATED -j ACCEPT
- # service iptables save
- # service iptables restart
- SELINUX的相关设置
- # gentenforce ## 查看selinux的工作状态
- enforcing ##SELinux security policy is enforced.
- permissive ##SELinux prints warnings instead of enforcing.
- disabled ##SELinux is fully disabled.
- # getsebool -a | grep ftp
- allow_ftpd_anon_write --> off
- allow_ftpd_full_access --> off
- allow_ftpd_use_cifs --> off
- allow_ftpd_use_nfs --> off
- allow_tftp_anon_write --> off
- ftp_home_dir --> off
- ftpd_connect_db --> off
- ftpd_disable_trans --> off
- ftpd_is_daemon --> on
- httpd_enable_ftp_server --> off
- tftpd_disable_trans --> off
- # setsebool -P allow_ftpd_anon_write on
- # setsebool -P allow_ftpd_full_access on
Seq9:再次使用Windows登录FTP服务,看看是否可以正常登录。
测试结果显示:不能正常登录,须进行验证
Seq10:我们使用FlashFXP工具并且给予验证,查看是否可以正常登录。
运行FlashFXP工具连接FTP服务器:
点击会话->快速连接->如图:
测试结果不可以正常登录,显示连接失败,那我们通过认证看看是否可以正常登录FTP服务呢:
点击站点->新建站点->如图:
点击接受或者保存,即可能力FTP服务,此次用户名和密码都是以加密的形式传送的。
转载于:https://blog.51cto.com/guodayong/1186003