网站搜索

在 Ubuntu 上使用 SSL/TLS 设置安全 FTP 服务器


在本教程中,我们将介绍如何使用 SSL 保护 FTP 服务器(VSFTPD 代表“非常安全的 FTP 守护进程”) Ubuntu 16.04/16.10 中的 /TLS

如果您想为基于 CentOS 的发行版设置安全的 FTP 服务器,您可以阅读 – 在 CentOS 上使用 SSL/TLS 保护 FTP 服务器

遵循本指南中的各个步骤后,我们将了解在 FTP 服务器中启用加密服务以实现安全数据传输的关键基础知识。

要求

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

在我们进一步操作之前,请确保本文中的所有命令都将以 root 或 sudo 特权帐户运行。

第 1 步:在 Ubuntu 上为 FTP 生成 SSL/TLS 证书

1. 我们将首先在 /etc/ssl/ 下创建一个子目录来存储 SSL/TLS 证书和密钥文件(如果没有)不存在:

sudo mkdir /etc/ssl/private

2. 现在让我们通过运行以下命令在单个文件中生成证书和密钥。

sudo 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:在 Ubuntu 上配置 VSFTPD 以使用 SSL/TLS

3.在我们执行任何VSFTPD配置之前,对于启用了UFW防火墙的用户,您必须打开端口99040000 -50000 允许 TLS 连接和被动端口的端口范围分别在 VSFTPD 配置文件中设置:

sudo ufw allow 990/tcp
sudo ufw allow 40000:50000/tcp
sudo ufw status

4. 现在,打开 VSFTPD 配置文件并在其中定义 SSL 详细信息:

sudo vi /etc/vsftpd/vsftpd.conf
OR
sudo nano /etc/vsftpd/vsftpd.conf

然后,添加或找到选项 ssl_enable 并将其值设置为 YES 以激活 SSL 的使用,同样,由于 TLS 比 SSL 更安全,我们将限制 VSFTPD通过启用 ssl_tlsv1 选项来使用 TLS:

ssl_enable=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO

5. 接下来,使用 # 字符注释掉下面的行,如下所示:

#rsa_cert_file=/etc/ssl/private/ssl-cert-snakeoil.pem
#rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

然后,添加以下行来定义 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 连接诊断记录到 VSFTPD 日志文件中,我们可以使用 debug_ssl 选项:

debug_ssl=YES

最后保存文件并关闭它。然后重启VSFTPD服务:

systemctl restart vsftpd

步骤 3:在 Ubuntu 上使用 SSL/TLS 连接验证 FTP

10. 执行完上述所有配置后,通过尝试从命令行使用 FTP 来测试 VSFTPD 现在是否正在使用 SSL/TLS 连接,如下所示。

从下面的输出中,有一条错误消息告诉我们 VSFTPD 只能允许用户(非匿名)从支持加密服务的安全客户端登录。

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>

命令行不支持加密服务,因此导致上述错误。因此,为了安全地连接到启用了加密服务的FTP服务器,我们需要一个默认支持SSL/TLS连接的FTP客户端,例如FileZilla

步骤 4:在客户端上安装 FileZilla 以安全连接 FTP

FileZilla 是一款功能强大、广泛使用的跨平台 FTP 客户端,支持基于 SSL/TLS 等的 FTP。要在 Linux 客户端计算机上安装 FileZilla,请使用以下命令。

--------- On Debian/Ubuntu ---------
sudo apt-get install filezilla   

--------- On CentOS/RHEL/Fedora --------- 
yum install epel-release filezilla

--------- On Fedora 22+ --------- 
sudo dnf 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服务器:

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

16.最后,我们将文件从本地机器传输到FTP服务器的文件夹中,看看FileZilla界面的下端,查看有关文件传输的报告。

就这样!请始终记住,在不启用加密服务的情况下安装 FTP 服务器会产生一定的安全隐患。正如我们在本教程中所解释的,您可以将 FTP 服务器配置为使用 SSL/TLS 连接来在 Ubuntu 16.04/16.10 中实现安全性。

如果您在 FTP 服务器上设置 SSL/TLS 时遇到任何问题,请使用下面的评论表来分享您有关本教程/主题的问题或想法。