如何在CentOS 7中使用SSL / TLS保护FTP服务器的安全文件传输

在本教程中,我们将介绍如何使用SSL / TLS证书来保护FTP(Vsftpd)服务器,以便通过CentOS 7中的FTP协议安全地传输文件。

通过其原始设计, FTP文件传输协议 )不安全,意味着它不加密在两台机器之间传输的数据,以及用户的凭据。 这对数据以及服务器安全造成巨大威胁。

在本教程中,我们将解释如何在CentOS / RHEL 7和Fedora的FTP服务器中手动启用数据加密服务; 我们将通过使用SSL / TLS证书保护VSFTPD非常安全FTP守护程序 )服务的各个步骤。

先决条件:

  1. 您必须在CentOS 7中安装和配置FTP服务器

在开始之前,请注意,本教程中的所有命令都将以root身份运行,否则,如果不使用root帐户控制服务器,请使用sudo命令获得root权限。

第1步.生成SSL / TLS证书和私钥

我们需要首先创建一个子目录: /etc/ssl/ ,我们将存储SSL / TLS证书和密钥文件:

# mkdir /etc/ssl/private

2.然后运行以下命令在单个文件中为vsftpd创建证书和密钥,以下是每个使用的标志的解释。

  1. req - 是X.509证书签名请求(CSR)管理的命令。
  2. x509 - 表示X.509证书数据管理。
  3. days - 定义证书有效期的天数。
  4. newkey - 指定证书密钥处理器。
  5. rsa:2048 - RSA密钥处理器,将生成一个2048位的私钥。
  6. keyout - 设置密钥存储文件。
  7. 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]:HowToing.com
Organizational Unit Name (eg, section) []:Linux and Open Source
Common Name (eg, your name or your server's hostname) []:howtoing
Email Address []:admin@howtoing.com

第2步.配置VSFTPD使用SSL / TLS

3.在执行任何VSFTPD配置之前,让我们打开端口99040000-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 HowToing.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安全连接

验证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站点

在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服务器详细信息

在Filezilla中添加FTP服务器详细信息

14.然后单击连接以再次输入密码,然后验证用于SSL / TLS连接的证书,并再次单击OK以连接到FTP服务器:

验证FTP SSL证书

验证FTP SSL证书

在这个阶段,我们应该通过TLS连接成功地登录到FTP服务器,检查连接状态部分以获取更多信息从下面的界面。

已通过TLS / SSL连接到FTP服务器

通过TLS / SSL连接到FTP服务器

15.最后但同样重要的是,尝试将文件从本地计算机传输到files文件夹中的FTP服务器 ,查看FileZilla界面的下端以查看有关文件传输的报告。

使用FTP安全传输文件

使用FTP安全传输文件

就这样! 始终记住,默认情况下FTP不安全,除非我们将其配置为使用SSL / TLS连接,正如我们在本教程中所展示的。 请通过下面的反馈表单分享您对本教程/主题的看法。