网站搜索

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


根据其最初的设计,FTP文件传输协议)并不安全,这意味着它不会加密两台计算机之间传输的数据以及用户的凭据。这对数据和服务器安全构成了巨大威胁。

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

先决条件:

  1. 您必须已经在 CentOS 7 中安装并配置了 FTP 服务器

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

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

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

mkdir /etc/ssl/private

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

  1. req – 是 X.509 证书签名请求 (CSR) 管理的命令。
  2. x509 – 表示 X.509 证书数据管理。
  3. – 定义证书的有效天数。
  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]:TecMint.com
Organizational Unit Name (eg, section) []:Linux and Open Source
Common Name (eg, your name or your server's hostname) []:tecmint
Email Address []:[email 

步骤 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更安全,因此我们将限制VSFTPD使用TLS相反,使用 ssl_tlsv1_2 选项:

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

7.此外,我们可以添加以下选项来增强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 调试,这意味着 openSSL 连接诊断将使用 debug_ssl 选项记录到 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 TecMint.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>

从上面的屏幕截图中,我们可以看到有一个错误通知我们 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.安装完成后(或者如果您已经安装了),打开它并转到文件=>站点管理器或(按Ctrl+S )以获取下面的站点管理器界面。

单击新站点按钮添加新站点/主机连接详细信息。

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

14.然后单击连接再次输入密码,然后验证用于 SSL/TLS 连接的证书并单击确定一次连接 FTP 服务器的更多信息:

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

15.最后,尝试从本机传输文件到FTP服务器的files文件夹中,看一下FileZilla界面下端即可查看有关文件传输的报告。

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