天天看点

如何在 CentOS 7 中使用 SSL/TLS 加固 FTP 服务器进行安全文件传输

在一开始的设计中,ftp(文件传输协议)就是不安全的,意味着它不会加密两台机器之间传输的数据以及用户的凭据。这使得数据和服务器安全面临很大威胁。

在这篇文章中,我们会介绍在 centos/rhel 7 以及 fedora 中如何在 ftp 服务器中手动启用数据加密服务;我们会介绍使用 ssl/tls 证书保护 vsftpd(very secure ftp daemon)服务的各个步骤。

<a target="_blank"></a>

1、 我们首先要在 <code>/etc/ssl</code> 目录下创建用于保存 ssl/tls 证书和密钥文件的子目录:

<code># mkdir /etc/ssl/private</code>

2、 然后运行下面的命令为 vsftpd 创建证书和密钥并保存到一个文件中,下面会解析使用的每个选项。

<code>req</code> - 是 x.509 certificate signing request (csr,证书签名请求)管理的一个命令。

<code>x509</code> - x.509 证书数据管理。

<code>days</code> - 定义证书的有效日期。

<code>newkey</code> - 指定证书密钥处理器。

<code>rsa:2048</code> - rsa 密钥处理器,会生成一个 2048 位的密钥。

<code>keyout</code> - 设置密钥存储文件。

<code>out</code> - 设置证书存储文件,注意证书和密钥都保存在一个相同的文件:/etc/ssl/private/vsftpd.pem。

<code># openssl req -x509 -nodes -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem -days 365 -newkey rsa:2048</code>

上面的命令会让你回答以下的问题,记住使用你自己情况的值。

<code>country name (2 letter code) [xx]:in</code>

<code>state or province name (full name) []:lower parel</code>

<code>locality name (eg, city) [default city]:mumbai</code>

<code>organization name (eg, company) [default company ltd]:tecmint.com</code>

<code>organizational unit name (eg, section) []:linux and open source</code>

<code>common name (eg, your name or your server's hostname) []:tecmint</code>

<code>email address []:[email protected]</code>

3、 在我们进行任何 vsftpd 配置之前,首先开放 990 和 40000-50000 端口,以便在 vsftpd 配置文件中分别定义 tls 连接的端口和被动端口的端口范围:

<code># firewall-cmd --zone=public --permanent --add-port=990/tcp</code>

<code># firewall-cmd --zone=public --permanent --add-port=40000-50000/tcp</code>

<code># firewall-cmd --reload</code>

4、 现在,打开 vsftpd 配置文件并在文件中指定 ssl 的详细信息:

<code># vi /etc/vsftpd/vsftpd.conf</code>

找到 <code>ssl_enable</code> 选项把它的值设置为 <code>yes</code> 激活使用 ssl,另外,由于 tsl 比 ssl 更安全,我们会使用<code>ssl_tlsv1_2</code> 选项让 vsftpd 使用更严格的 tls:

<code>ssl_enable=yes</code>

<code>ssl_tlsv1_2=yes</code>

<code>ssl_sslv2=no</code>

<code>ssl_sslv3=no</code>

5、 然后,添加下面的行来定义 ssl 证书和密钥文件的位置:

<code>rsa_cert_file=/etc/ssl/private/vsftpd.pem</code>

<code>rsa_private_key_file=/etc/ssl/private/vsftpd.pem</code>

6、 下面,我们要阻止匿名用户使用 ssl,然后强制所有非匿名用户登录使用安全的 ssl 连接进行数据传输和登录过程中的密码发送:

<code>allow_anon_ssl=no</code>

<code>force_local_data_ssl=yes</code>

<code>force_local_logins_ssl=yes</code>

7、 另外,我们还可以添加下面的选项增强 ftp 服务器的安全性。当选项 <code>require_ssl_reuse</code> 被设置为 <code>yes</code>时,要求所有 ssl 数据连接都会重用 ssl 会话;这样它们会知道控制通道的主密码。

因此,我们需要把它关闭。

<code>require_ssl_reuse=no</code>

另外,我们还要用 <code>ssl_ciphers</code> 选项选择 vsftpd 允许用于加密 ssl 连接的 ssl 算法。这可以极大地限制那些尝试发现使用存在缺陷的特定算法的攻击者:

<code>ssl_ciphers=high</code>

8、 现在,设置被动端口的端口范围(最小和最大端口)。

<code>pasv_min_port=40000</code>

<code>pasv_max_port=50000</code>

9、 选择性启用 <code>debug_ssl</code> 选项以允许 ssl 调试,这意味着 openssl 连接诊断会被记录到 vsftpd 日志文件:

<code>debug_ssl=yes</code>

保存所有更改并关闭文件。然后让我们重启 vsftpd 服务:

<code># systemctl restart vsftpd</code>

10、 完成上面的所有配置之后,像下面这样通过在命令行中尝试使用 ftp 测试 vsftpd 是否使用 ssl/tls 连接:

<code># ftp 192.168.56.10</code>

<code>connected to 192.168.56.10 (192.168.56.10).</code>

<code>220 welcome to tecmint.com ftp service.</code>

<code>name (192.168.56.10:root) : ravi</code>

<code>530 non-anonymous sessions must use encryption.</code>

<code>login failed.</code>

<code>421 service not available, remote server has closed connection</code>

<code>ftp&gt;</code>

如何在 CentOS 7 中使用 SSL/TLS 加固 FTP 服务器进行安全文件传输

验证 ftp ssl 安全连接

从上面的截图中,我们可以看到这里有个错误提示我们 vsftpd 只允许用户从支持加密服务的客户端登录。

命令行并不会提供加密服务因此产生了这个错误。因此,为了安全地连接到服务器,我们需要一个支持 ssl/tls 连接的 ftp 客户端,例如 filezilla。

11、 filezilla 是一个现代化、流行且重要的跨平台的 ftp 客户端,它默认支持 ssl/tls 连接。

要在 linux 上安装 filezilla,可以运行下面的命令:

<code>--------- on centos/rhel/fedora ---------</code>

<code># yum install epel-release filezilla</code>

<code>--------- on debian/ubuntu ---------</code>

<code>$ sudo apt-get install filezilla</code>

12、 当安装完成后(或者你已经安装了该软件),打开它,选择 file =&gt; sites manager 或者按 <code>ctrl + s</code> 打开 site manager 界面。

点击 new site 按钮添加一个新的站点/主机连接详细信息。

如何在 CentOS 7 中使用 SSL/TLS 加固 FTP 服务器进行安全文件传输

在 filezilla 中添加新 ftp 站点

下一步,像下面这样设置主机/站点名称、添加 ip 地址、定义使用的协议、加密和登录类型(使用你自己情况的值):

<code>host: 192.168.56.10</code>

<code>protocol: ftp – file transfer protocol</code>

<code>encryption: require explicit ftp over #recommended</code>

<code>logon type: ask for password #recommended</code>

<code>user: username</code>

如何在 CentOS 7 中使用 SSL/TLS 加固 FTP 服务器进行安全文件传输

在 filezilla 中添加 ftp 服务器详细信息

14、 然后点击 connect,再次输入密码,然后验证用于 ssl/tls 连接的证书,再一次点击 <code>ok</code> 连接到 ftp 服务器:

如何在 CentOS 7 中使用 SSL/TLS 加固 FTP 服务器进行安全文件传输

验证 ftp ssl 证书

到了这里,我们应该使用 tls 连接成功地登录到了 ftp 服务器,在下面的界面中检查连接状态部分获取更多信息。

如何在 CentOS 7 中使用 SSL/TLS 加固 FTP 服务器进行安全文件传输

通过 tls/ssl 连接到 ftp 服务器

如何在 CentOS 7 中使用 SSL/TLS 加固 FTP 服务器进行安全文件传输

使用 ftp 安全地传输文件

原文发布时间为:2017-05-13

本文来自云栖社区合作伙伴“linux中国”

继续阅读