文/山东省德州市水利局 张卓
自从互联网成为通信领域的一支力量以来,其对数据存储和安全的需求不断增加。这一需求在过去二十年中呈指数增长,促生云计算的出现。与数据存储相关的问题已在很大程度上得到解决,但安全性仍然是研究人员面临的挑战。
虚拟机(有线或无线)之间或从一个云网络到另一个云网络之间的文件传输就会面临安全性问题,需要将其作为云安全的一部分加以解决。文件传输协议(FTP)通常用于传输文件,但FTP的原始形式存在许多安全漏洞。FTP的目的没有提到安全性,因此FTP受到多种威胁。所有的传输都是纯文本的,包括用户名和密码,因此任何具有正确配置的人都可以执行包嗅探以获取网络上的敏感信息。
为了解决FTP中的漏洞,开发人员提出了各种解决方案,包括将FTP与安全协议集成,或者简单地使用SCP(secure copy)在计算机之间复制文件。本文将描述几种考虑数据保密性和完整性的协议。此外,还将讨论这些协议的性能,其中包括加密开销如何影响延迟或资源使用方面的总体操作。
(一)安全外壳文件传输协议(SFTP)。SFTP负责使用SSH访问和管理远程系统上的文件。SFTP和FTP的主要区别在于前者对命令和数据进行加密,防止敏感信息以明文形式通过网络传输。SFTP可以在远程机器上执行许多操作,例如获取文件大小、遍历目录、计算目录中的文件数、删除文件、创建符号链接等等。由于SFTP能够重新利用SSH连接,加密期间产生的开销与SSH差别不大。SFTP还能够在具有不同操作系统的远程计算机之间传输文件。例如,为了将文件传输到Windows操作系统,需要在Windows上手动安装SSH服务器。由于Microsoft的IIS(Internet Information Services)只支持FTP,所以有WINSSHD、Freeshd、FREEFTPd、FILEZILLA等SSH服务器可用于支持SFTP。通过SFTP的认证可以通过两种方式执行:密码认证和公钥认证。这两种方法都同样安全,但后者将花费更少的时间。另一方面,如果密钥太多,则密钥管理可能成为一个问题,在这种情况下,基于密码的身份验证将优先。
(二)安全套接字层(FTPS)上的文件传输协议。FTPS还负责访问和管理远程系统上的文件。然而,与SFTP相比,主要的区别在于用于添加安全性的底层协议。对于FTPS,使用的底层协议是SSL/TLS。FTPS协议使用X.509证书进行身份验证,该证书依次包含公钥和证书所有者的信息。有两种不同形式的FTP over SSL:显式和隐式加密。在显式加密的情况下,连接以明文开始,并在发送auth命令后加密,而在隐式加密开始时加密。对于大多数平台提供的FTPS支持,默认设置为显式加密。
(三)SSH隧道。安全SHELL(SSH)隧道是一个基于SSH协议的加密隧道,可以通过数据连接进行传输。通过该通道的数据通常以未加密的格式传输。OPENSSH软件用于在两台远程机器之间建立隧道。SSH隧道可以用于安全传输文件,但通常建议克服防火墙设置。端口转发用于将所有流量定向到远程计算机。有两种类型的端口转发:本地端口转发和远程端口转发。在本地端口转发中,定义一个本地端口,然后使用它通过转发此端口将文件传输到远程计算机。在远程端口转发中,远程计算机上的应用程序可以访问本地主机上的服务。
(四)SCP和RSYNC协议。安全复制(SCP)是另一种网络协议,用于远程主机之间的文件传输。负责提供身份验证的底层协议是SSH。RSYNC是另一种用于在系统之间传输文件的协议。但是,SCP和RSYNC的主要区别在于前者覆盖目标主机上的每个文件,而后者更多的是同步算法,在主机之间执行增量传输。由于RSYNC只执行增量传输,因此与SCP相比,该协议消耗的网络资源要少得多。
(五)基于IPSEC的FTP协议。在IPSEC中,协议安全性在进行数据包处理的网络层实现。早期的协议是在TCP/IP模型的应用层实现的,在该层中,需要在个人的客户机中进行更改。但在IPSEC中,为了增强安全性,需要在网络层(特别是路由器)进行更改,以将其作为跨网络的标准安全措施来实现。IPSEC本身包含两个主要协议:身份验证头(AH)和封装安全负载(ESP)。ESP是首选,因为它既提供认证又提供机密性,而AH不提供机密性保护。由于所涉及的复杂性和实现过程中产生的成本,通常不使用IPSEC进行安全文件传输。然而,它对于大型企业设计自己的虚拟专用网络(VPN)非常有用。
“表1”提供了文件从一个Linux虚拟机传输到另一个虚拟机所用的秒数。当文件数为8、100和500时,在3种不同的情况下重复此场景,并在每个情况下记录文件传输的执行时间。在Linux操作系统中,使用名为“date”的内置实用程序以秒为单位记录时间,精确到小数点后2位。此外,在两台远程计算机都安装了CentOS并且位于同一子网中的环境中执行,以便将由于交换机和路由器而引起的延迟降到最低。
表1 虚拟机间传输文件时间对比
从表中可以看出,当底层协议为FTP时,文件传输所用的时间最少,因为连接未加密,文件以纯文本形式传输,因此不涉及加密头。另一方面,当文件数为8时,第一种情况下的SFTP文件传输所花费的时间几乎高出51%,而当文件数分别为100和500时,第二种情况下的SFTP文件传输所花费的时间减少到35%左右,第三种情况下的SFTP文件传输所花费的时间减少到31%。考虑到云计算所涉及的可伸缩性,我们可以安全地假设,假设线性回归,对于数千个文件,性能下降将降到20%左右。
当底层协议是FTPS时,两个主机之间的文件传输所花费的时间与SFTP几乎相似。因此,我们可以得出结论,就通过FTP实现FTPS或SFTP可能导致的文件传输延迟而言,这几乎是相似的。轻微差异可能是由于同一子网上的网络流量不同,在不同情况下可能会有所不同。
对于SCP,两个主机之间的文件传输所用的时间与观察到的SFTP和FTPS的时间相当。对于8个文件,SCP时间更长,但对于大量文件,执行时间小于SFTP或FTPS观察到的时间。这可能是因为在SCP的情况下使用了密码验证,因为与SFTP相比,观察到的时间略有不同。但由于SCP中的底层协议也是SSH,所以我们可以安全地假设,在公开密钥认证的情况下,SCP的性能将类似于SFTP。但是,在大多数情况下,都会优先考虑SFTP,因为SCP的功能仅限于在使用SFTP时传输文件,还可以在远程计算机上对文件执行许多操作。在RSYNC的情况下,文件传输所花费的时间比SCP文件传输所花费的时间稍短。这是因为RSYNC不会覆盖远程计算机上的现有文件,并执行增量操作,其中只传输那些不在远程计算机目标目录中的文件。
然而,基于上述观察结果,不能断言哪种协议最理想。这完全取决于云计算中的特定场景。它还取决于安装在客户机上的操作系统。例如,Windows不支持SSH,尽管更高版本的Microsoft IIS确实支持SSL,而SSL又与Windows具有更好的兼容性。因此,在这些情况下,建议在任何其他基于SSH的协议上使用FTPS。
选择安全文件传输协议时可能考虑的另一个因素是CPU使用率。虽然高端服务器在市场上有售,但由于成本高昂,许多小规模组织可能无法购买。在这种情况下,优化CPU使用率变得至关重要,如果需要传输数千个文件,CPU使用率可能会非常高。在这方面,隧道技术和端口转发技术可能会派上用场。在许多组织中,云本身将受到外部访问的保护,因此可能不需要保护每个文件传输。在这种情况下,最好使用延迟时间短、网络资源消耗少的协议。
尽管云计算继续主导信息技术领域的市场,但仍有许多安全漏洞需要解决。本文重点介绍了其中的一些解决方案,并对这些解决方案进行了简要的尝试,使读者能够理解这些解决方案的部署环境。此外,还对不同协议进行了比较,以提供延迟发生和网络资源使用的前景。