vsftpd SSL加密连接设置
前一篇讲到vsftpd的配置文章提到使用虚拟用户提高安全性,本篇文章将继续提升服务端安全性,使用服务器自建证书对ftp原本的明文数据传输进行加密。需要使用vsftpd的朋友可以参考本篇内容,但我个人还是建议大家使用SFTP,系统自带的ssh以包含此功能。
接上篇文章,首先检查系统内是否安装有openssl,如没有请yum install 一下,默认系统即使最小化安装都包含该组件。输入命令:
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
以创建一个私有证书,需要注意的是创建证书时系统需要你提供必要信息:
Country Name (2 letter code) [XX]:CN State or Province Name (full name) []:shanghai Locality Name (eg, city) [Default City]:shanghai Organization Name (eg, company) [Default Company Ltd]:microhard Organizational Unit Name (eg, section) []:IT Common Name (eg, your name or your server's hostname) []:192.168.1.1 Email Address []:[email protected]
注意Common Name要输入本机机器名或本机IP地址,其他按各自实际情况填写。
接下来修改vsftp.conf文件,在之前的配置后主要新增ssl段,下方的示例配置文件为完整配置文件,可直接拿去进行测试。(在进行生产环境应用前,请按需调整配置文件内容)
anonymous_enable=NO local_enable=YES #write_enable=YES local_umask=002 dirmessage_enable=YES xferlog_enable=YES connect_from_port_20=YES #chown_uploads=YES #chown_username=whoever #xferlog_file=/var/log/xferlog xferlog_std_format=YES idle_session_timeout=600 #data_connection_timeout=120 chroot_local_user=YES #chroot_list_enable=YES #chroot_list_file=/etc/vsftpd/chroot_list #ls_recurse_enable=YES listen=NO listen_ipv6=YES #pam_service_name=vsftpd pam_service_name=vsftpd.virtual userlist_enable=YES userlist_file=/etc/vsftpd/user_list tcp_wrappers=YES hide_ids=YES allow_writeable_chroot=YES #以下为新增配置 ssl_enable=YES force_local_logins_ssl=YES force_local_data_ssl=YES allow_anon_ssl=NO force_anon_logins_ssl=YES force_anon_data_ssl=YES ssl_tlsv1=YES ssl_ciphers=HIGH rsa_cert_file=/etc/vsftpd/vsftpd.pem #以上为新增配置 pasv_enable=YES pasv_min_port=30000 pasv_max_port=30100 guest_enable=YES guest_username=vftpuser virtual_use_local_privs=YES user_sub_token=$USER local_root=/home/vftp/$USER user_config_dir=/etc/vsftpd/vftpuser_conf
本例中使用的测试客户端为FlashFXP 5,在连接类型处,请更改原来的FTP类型为FTP using explicit SSL (auth TLS) ;自动,即可。其他包括端口与登录类型保持原先的内容。如测试连接不成功,强烈建议使用示例文件测试一次,以判断是防火墙端口问题还是vsftpd配置问题或是selinux问题。
特别注意!如服务器位于硬件防火墙后,防火墙NAT端口不为默认的21端口时,部分厂商的防火墙在伪装转发入站SSL请求后,出站时可能会因为默认NAT策略导致返回加密错误信息给客户端并终止连接。当客户端报错加密类的错误时,应首先检查防火墙NAT条目的配置是否存在问题,以及NAT类型、级别是否存在问题。