如何在 Ubuntu 中使用 TLS 配置 FTP
FTP(文件传输协议)主要用于在计算机之间传输文件。 FTP 采用客户端-服务器架构,客户端向服务器请求文件,服务器将所需文件返回给客户端。在客户端计算机上,FTP 客户端应用程序用于与服务器进行通信。也可以通过浏览器访问FTP服务器。默认情况下,FTP 通过不安全通道进行通信,但可以将 FTP 配置为通过安全通道传输数据。在本教程中,您将学习如何使用 TLS 配置 FTP 服务器,然后使用 FileZilla 作为客户端应用程序来连接 FTP 服务器。
安装 VSFTPD
VSFTPD(Very Secure FTP Daemon)是一个用于在服务器上配置 FTP 的软件程序。在本教程中,VSFTPD 将用于在计算机上配置 FTP 服务器。在安装 VSFTPD 之前,请通过发出以下命令更新服务器中的存储库。
接下来,使用以下命令安装 VSFTPD。
最后,使用以下命令检查 vsftpd 的版本来验证安装。
如果安装成功,上述命令将输出vsftpd的版本。
主动模式下的 FTP
在主动模式下,FTP 客户端通过建立从客户端计算机上的任意随机端口到服务器端口 21 的 TCP 控制连接来启动会话。然后,客户端开始在随机端口 X 上侦听数据连接,并通过 TCP 控制连接通知服务器客户端正在等待端口 X 上的数据连接。此后,服务器从其端口 20 建立数据连接到客户端计算机上的端口 X。
当客户端位于防火墙后面并且端口 X 被阻止时,可能会出现问题。在这种情况下,服务器无法与客户端建立数据连接。为了避免这个问题,FTP服务器大多采用被动模式,我们将在本文后面讨论。默认情况下,VSFTPD 使用被动模式,因此我们必须将其更改为主动模式。
首先,打开VSFTPD配置文件。
将以下行添加到文件末尾。
另外,请确保“connect_from_port_20”选项设置为“YES”。此选项可确保在服务器的端口 20 上建立数据连接。
接下来,创建 FTP 服务器用于存储文件的目录。在本教程中,我们将配置“/home/ubuntu/ftp/”作为 FTP 服务器的根路径。
现在,通过更改“local_root”选项在配置文件中指定此目录。以下参数将配置服务器的根路径。
必须启用“write_enable”选项才能允许用户写入 FTP 服务器。
每次更改配置文件后,请务必重新启动服务器。
为用户设置密码
FTP 客户端使用用户名和密码与服务器连接。使用以下命令在计算机上设置用户的密码。
上述命令将询问“ubuntu”用户的密码。
配置主动模式的防火墙
如果FTP使用在主动模式下,FTP服务器将使用两个端口与客户端通信,端口21和22。端口21用于向客户端传递命令,端口20用于向客户端的任意端口传输数据。客户端。我们将使用 ufw 在服务器上配置防火墙。使用以下命令安装 ufw。
现在,在服务器端,我们将打开端口 20、21 和 22(用于 SSH 连接)。
使用以下命令启用并检查 ufw 的状态。
ubuntu@ubuntu:~$ sudo ufw status
注意:如果您在云端配置 FTP 服务器,则还需要在安全组中允许端口 20、21 和 22。
警告:在远程系统上启用 ufw 之前,始终启用端口 22 以及所需的端口。默认情况下,UFW 会阻止来自端口 22 的流量,因此,如果您启用 ufw 而不允许来自端口 22 的流量,您将无法使用 SSH 访问远程服务器。
安装FTP客户端
现在,我们的服务器已配置为主动模式,我们可以从客户端访问它。对于客户端应用程序,我们将使用 FileZilla,一个 ftp 客户端应用程序。使用以下命令安装 FileZilla。
打开 FTP 客户端应用程序并输入 FTP 服务器的公共 IP 地址和其他凭据。
当您单击“Quickconnect”时,您将连接到 FTP 服务器并自动转到“/home/ubuntu/ftp”配置文件中“local_root”选项指定的目录。
主动模式下的问题
当客户端位于防火墙后面时,在主动模式下使用 FTP 会引发问题。输入初始控制命令后,当服务器在随机端口上与客户端建立数据连接时,该端口可能会被客户端上的防火墙阻止,导致数据传输失败。 FTP 可以在被动模式下使用来解决这些防火墙问题。
被动模式下的 FTP
在被动模式下,客户端在服务器的21端口上与服务器建立控制连接。然后,客户端发送特殊的“PASV”命令,通知服务器数据连接将由客户端而不是服务器建立。作为响应,客户端收到服务器 IP 和随机端口号(该端口号将在服务器上配置)。客户端使用此 IP 和端口号与服务器创建数据连接。在被动模式下,数据连接和控制连接均由客户端建立,因此防火墙不会干扰客户端与服务器之间的通信。
在您喜欢的编辑器中打开 FTP 配置文件。
将文件中的“pasv_enable”选项设置为“YES”,以便服务器可以以被动模式与客户端通信。另外,设置“local_root”选项以指定服务器的根目录,并将“write_enable”选项设置为“YES”以允许用户将文件上传到服务器。
如前所述,数据连接由客户端建立,服务器将其公共IP和随机端口发送给客户端以创建数据连接。服务器上的这个随机端口可以从配置文件中的一系列端口中指定。
服务器和客户端之间的数据连接将在1024和1048之间的端口上建立。更改配置文件后重新启动FTP服务器。
配置被动模式防火墙
如果我们在被动模式下使用FTP,数据连接将通过1024到1048之间的任何端口建立,因此有必要在FTP服务器上允许所有这些端口。
允许防火墙上的所有端口后,通过运行以下命令激活 ufw。
在启用防火墙之前始终允许服务器上的端口;否则,您将无法通过 SSH 作为 ufw 访问您的服务器,默认情况下,它会阻止端口 22。
测试连接
现在,我们已经将 FTP 服务器设置为被动模式,并且可以检查与客户端应用程序的 ftp 连接。为此,请在系统中打开 FileZilla。
输入主机、用户名、密码和端口后,现在您可以连接您的服务器。现在您已连接到以被动模式运行的 FTP 服务器,您可以将文件上传到服务器。
使用 FTP 服务器配置 SSL 证书
默认情况下,FTP 服务器通过不安全的通道在客户端和服务器之间建立连接。如果您希望在客户端和服务器之间共享敏感数据,则不应使用这种类型的通信。要通过安全通道进行通信,必须使用 SSL 证书。
生成 SSL 证书
我们将使用 SSL 证书在客户端和服务器之间建立安全通信。我们将使用 openssl 生成这些证书。以下命令将为您的服务器生成 SSL 证书。
当您运行上述命令时,系统会询问您一些问题。回答这些问题后,将生成证书。您可以在终端中检查证书。
在配置文件中使用证书
现在,我们的证书就可以使用了。我们将配置“vsftpd.conf”文件以使用 SSL 证书进行通信。使用以下命令打开配置文件。
将以下行添加到文件末尾。这些更改将确保 FTP 服务器使用新生成的 SSL 证书与客户端安全通信。
force_local_data_ssl=NO
force_local_logins_ssl=NO
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
rsa_cert_file=/etc/ssl/private/vsftpd.pem
rsa_private_key_file=/etc/ssl/private/vsftpd.pem
重新启动 FTP 服务器以应用这些更改。
重新启动服务器后,尝试使用 FileZilla 客户端应用程序连接服务器。这次,客户端应用程序将询问您是否信任这些证书。
如果您拥有来自受信任证书颁发机构的证书,则不应出现此警告。我们使用 openssl 生成证书,它不是受信任的证书颁发机构,这就是它在我们的案例中要求证书身份验证的原因。现在,我们可以通过安全通道在客户端和服务器之间进行通信。
匿名配置
您还可以在 FTP 服务器上启用匿名登录。启用此配置后,任何用户都可以使用任何用户名和密码登录 FTP 服务器。配置文件中的以下参数将使 FTP 服务器可以匿名访问。
上述配置将匿名用户的根路径设置为“/home/ubuntu/ftp/anon”,匿名用户登录时不会提示输入密码。
注意:确保 FTP 服务器上存在“/home/ubuntu/ftp/anon”路径。
现在,重新启动 FTP 服务器。
重新启动服务器后,我们将尝试通过 Google Chrome 浏览器连接到服务器。转到以下 URL。
上面的 URL 将带您到配置文件中指定的 FTP 服务器的根目录。禁用匿名登录后,当您尝试使用浏览器连接到 FTP 服务器时,系统将首先要求您进行身份验证,然后您将被带到服务器的根目录。
配置本地访问
我们还可以通过更改配置文件来允许或阻止对 FTP 服务器的本地访问。目前,我们可以在不使用 FTP 客户端应用程序的情况下在本地访问 FTP 服务器,但我们可以阻止此访问。为此,我们必须修改“local_enable”参数。
首先,重新启动 FTP 服务器。
重新启动服务器后,尝试使用命令行界面在本地访问FTP服务器。使用 SSH 登录远程服务器。
现在,发出以下命令以使用命令行界面本地登录 FTP 服务器。
当你运行上面的命令时,它会抛出 500 错误。
结论
文件传输协议多年来一直用于通过 Internet 传输文件和文档。 VSFTPD 是在您的计算机上用作 FTP 服务器的软件包之一。 VSFTPD 包含可用于自定义 FTP 服务器的各种配置。本教程向您展示了如何使用 TLS 配置 FTP 服务器以增强安全性。要了解有关 FTP 配置的更多信息,请访问以下链接。