通过其原始设计, FTP ( 文件传输协议 )不安全,意味着它不加密在两台机器之间传输的数据,以及用户的凭据。 这对数据以及服务器安全造成巨大威胁。
在本教程中,我们将解释如何在CentOS / RHEL 7和Fedora的FTP服务器中手动启用数据加密服务; 我们将通过使用SSL / TLS证书保护VSFTPD ( 非常安全FTP守护程序 )服务的各个步骤。
先决条件:
在开始之前,请注意,本教程中的所有命令都将以root身份运行,否则,如果不使用root帐户控制服务器,请使用sudo命令获得root权限。
第1步.生成SSL / TLS证书和私钥
我们需要首先创建一个子目录: /etc/ssl/
,我们将存储SSL / TLS证书和密钥文件:
# mkdir /etc/ssl/private
2.然后运行以下命令在单个文件中为vsftpd创建证书和密钥,以下是每个使用的标志的解释。
- req - 是X.509证书签名请求(CSR)管理的命令。
- x509 - 表示X.509证书数据管理。
- days - 定义证书有效期的天数。
- newkey - 指定证书密钥处理器。
- rsa:2048 - RSA密钥处理器,将生成一个2048位的私钥。
- keyout - 设置密钥存储文件。
- out设置证书存储文件,请注意,证书和密钥都存储在同一个文件中: /etc/ssl/private/vsftpd.pem 。
# openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048
上述命令将要求您回答以下问题,请记住使用适用于您的方案的值。
Country Name (2 letter code) [XX]:IN State or Province Name (full name) []:Lower Parel Locality Name (eg, city) [Default City]:Mumbai Organization Name (eg, company) [Default Company Ltd]:youcl.com Organizational Unit Name (eg, section) []:Linux and Open Source Common Name (eg, your name or your server's hostname) []:youcl Email Address []:admin@youcl.com
第2步.配置VSFTPD使用SSL / TLS
3.在执行任何VSFTPD配置之前,让我们打开端口990和40000-50000 ,以允许TLS连接和被动端口的端口范围分别在VSFTPD配置文件中定义:
# firewall-cmd --zone=public --permanent --add-port=990/tcp # firewall-cmd --zone=public --permanent --add-port=40000-50000/tcp # firewall-cmd --reload
4.现在,打开VSFTPD配置文件并指定SSL详细信息:
# vi /etc/vsftpd/vsftpd.conf
查找选项ssl_enable并将其值设置为YES
以激活使用SSL,此外,由于TSL比SSL更安全,因此我们将使用ssl_tlsv1_2选项限制VSFTPD使用TLS:
ssl_enable=YES ssl_tlsv1_2=YES ssl_sslv2=NO ssl_sslv3=NO
5.然后,添加以下行以定义SSL证书和密钥文件的位置:
rsa_cert_file=/etc/ssl/private/vsftpd.pem rsa_private_key_file=/etc/ssl/private/vsftpd.pem
6.接下来,我们必须阻止匿名用户使用SSL,然后强制所有非匿名登录使用安全的SSL连接进行数据传输,并在登录期间发送密码:
allow_anon_ssl=NO force_local_data_ssl=YES force_local_logins_ssl=YES
此外,我们可以添加以下选项来提高FTP服务器安全性。 当选项require_ssl_reuse设置为YES
时,所有SSL数据连接都需要显示SSL会话重用; 证明他们知道与控制信道相同的主秘密。
因此,我们必须关闭它。
require_ssl_reuse=NO
同样,我们需要选择使用ssl_ciphers选项允许使用VSFTPD允许加密SSL连接的SSL密码。 这可以大大限制尝试强制特定的密码,他们可能发现了以下漏洞的攻击者的努力:
ssl_ciphers=HIGH
8.现在,设置被动端口的端口范围(最小和最大端口)。
pasv_min_port=40000 pasv_max_port=50000
9.或者,允许SSL调试,意味着使用debug_ssl选项将openSSL连接诊断记录到VSFTPD日志文件中:
debug_ssl=YES
保存所有更改并关闭文件。 然后让我们重新启动VSFTPD服务:
# systemctl restart vsftpd
第3步:使用SSL / TLS连接测试FTP服务器
10.执行所有上述配置后,通过尝试从命令行使用FTP,测试VSFTPD是否正在使用SSL / TLS连接,如下所示:
# ftp 192.168.56.10 Connected to 192.168.56.10 (192.168.56.10). 220 Welcome to youcl.com FTP service. Name (192.168.56.10:root) : ravi 530 Non-anonymous sessions must use encryption. Login failed. 421 Service not available, remote server has closed connection ftp>
验证FTP SSL安全连接
从上面的屏幕截图,我们可以看到有一个错误通知我们VSFTPD只能允许用户从支持加密服务的客户端登录。
命令行不提供加密服务,因此产生错误。 因此,为了安全地连接到服务器,我们需要一个支持SSL / TLS连接的FTP客户端,例如FileZilla 。
第4步:安装FileZilla以安全连接到FTP服务器
11. FileZilla是一个现代,流行和重要的跨平台FTP客户端,默认支持SSL / TLS连接。
要在Linux中安装FileZilla,请运行以下命令:
--------- On CentOS/RHEL/Fedora --------- # yum install epel-release filezilla --------- On Debian/Ubuntu --------- $ sudo apt-get install filezilla
12.安装完成后(或者如果您已经安装了它),打开它,然后转到File => Sites Manager或(按Ctrl+S
)以获取下面的Site Manager界面。
单击新建站点按钮添加新的站点/主机连接详细信息。
在Filezilla中添加新的FTP站点
13.接下来,设置主机/站点名称,添加IP地址,定义要使用的协议,加密和登录类型,如下面的屏幕截图(使用适用于您的方案的值):
Host: 192.168.56.10 Protocol: FTP – File Transfer Protocol Encryption: Require explicit FTP over #recommended Logon Type: Ask for password #recommended User: username
在Filezilla中添加FTP服务器详细信息
14.然后单击连接以再次输入密码,然后验证用于SSL / TLS连接的证书,并再次单击OK
以连接到FTP服务器:
验证FTP SSL证书
在这个阶段,我们应该通过TLS连接成功地登录到FTP服务器,检查连接状态部分以获取更多信息从下面的界面。
通过TLS / SSL连接到FTP服务器
15.最后但同样重要的是,尝试将文件从本地计算机传输到files文件夹中的FTP服务器 ,查看FileZilla界面的下端以查看有关文件传输的报告。
使用FTP安全传输文件
就这样! 始终记住,默认情况下FTP不安全,除非我们将其配置为使用SSL / TLS连接,正如我们在本教程中所展示的。 请通过下面的反馈表单分享您对本教程/主题的看法。