FTP,FTPS 与 SFTP 的区别

FTP (File Transfer Protocol)是一种常用的文件传输协议,在日常工作中被广泛应用。不过,FTP 协议使用明文传输。如果文件传输发生在公网,会将所有密码凭据、操作指令,以及传输的文件内容,都以明文的方式暴露出来,特别是在公有云广泛应用的今天,这种传输方式对数据安全有极大的隐患。

针对这种情况,FTPS 和 SFTP 应运而生。虽然这两种传输方式都基于 FTP,而且名字非常相近。即便它们的目的都是为了使文件传输更安全,它们的实现原理也有很大的差别。

FTPS 全称是 File Transfer Protocol over SSL。SSL 是一个用来在安全连接中对数据进行加密和解密的协议。FTPS 使用 SSL 来加密、解密所有的数据连接,所以它的安全性比明文传输的 FTP 协议要高很多。

SFTP 全称是 Secure File Transfer Protocol,是 SSH 内嵌的协议。它借助 Linux/Unix 的 SSH 协议来加密文件传输过程。使用 SFTP 时,不需要启动 FTP 服务,只要在 SSHD 中开启了 SFTP 的相关配置,并启动 SSHD 服务即可运行。

下文中,我将介绍如何在 Azure 中快速搭建 FTPS 服务。

搭建步骤

在 Azure 中部署 Windows Server 2016 Datacenter

本文的介绍中,我在 Azure 门户里使用 Windows Server 2016 Datacenter 来部署承载 FTPS 服务的虚拟机。如果您使用 Windows Server 2008 或者 2012,也可以参考本文来搭建 FTPS 服务。配置过程基本一致。

虚拟机创建的过程中需要注意的是,创建公共 IP 地址时,需要使用静态 IP。这样可以确保虚拟机重启后,IP 不会改变。在后面的步骤里,这个 IP 还需要配置到 FTPS 服务的防火墙中。如果因重启而改变了, 会导致 FTPS 服务无法访问。

配置服务器角色和功能

虚拟机部署好后,使用远程桌面连接登录到这台虚拟机。 在服务器角色配置中选择 Web Server ( IIS )。

在 IIS 的角色服务配置中选择 FTP Server,并确保选中了 FTP Service。

然后确认安装,并等待安装完成。

配置全局 FTP 防火墙规则

打开 Internet Information Services (IIS) Manager。

双击 FTP Firewall Support,打开全局 FTP 防火墙配置。在数据通道端口范围中,填入 55000-55004。这些端口将在 FTP 被动连接中用来传输数据。另外,将虚拟机的 公共 IP 地址填入外部 IP 地址框内。完成后,点击右侧的 Apply。弹出的对话中不用理会,直接点击 OK 即可。

创建自签名证书

还是在 Internet Information Services (IIS) Manager 窗口中,双击 Server Certificate。然后在打开的窗口右侧点击 Create Self-Signed Certificate…。

在弹出的创建证书窗口中,输入证书的名字,然后点击 OK。创建好后能在窗口中看到刚创建的自签名证书。

创建 FTP 站点

继续在 Internet Information Services (IIS) Manager 窗口中,选中 Site。然后在右键菜单中,点击 Add FTP Site…。

在 Add FTP Site 向导中,为 FTP 站点起个名字,并选择物理路径。 这里有两点需要注意。一是不要将 FTP 目录放置在 D 盘。因为 D 盘是临时盘,机器重启后,里面的文件会被全部移除。二是所选的路径需要对 FTP 账号开放读写权限。这里我使用登录虚拟机的管理员账号来访问 FTP。如果您使用新建的账号来登录 FTP,务必确认该账号对您配置的 FTP 目录有读写权限。

Binding and SSL Settings 步骤里,在 SSL Certificate 的下拉菜单中,选中刚才创建的自签名证书。其他配置保持不变。

Authentication and Authorization Information 步骤中,Authentication 选择 Basic,这样可以使用用户名和密码来登录。Authorization 中,Allow access to 选择 All users, Permissions 选择 Read 和 Write。完成后点击 Finish。

重启 FTP 服务

在左下角的 Windows 徽标点击右键,开启管理员模式的命令提示符窗口。

然后在命令提示符中,输入以下命令来重启 FTP 服务。重启的目的在于使之前的配置生效,特别是防火墙配置。

复制
    net stop ftpsvc
net start ftpsvc

配置网络安全组(NSG)

回到 Azure 门户页面,找到虚拟机对应的网络安全组,然后为 FTP 服务所需的端口添加对应的入站安全规则。这里需要添加的有两个规则。一是 FTP 控制命令所需的 TCP 21 端口,二是之前在虚拟机中,为 FTP 服务添加的数据通道端口,TCP 55000 至 55004。添加完成后,如下图所示。

FTP 客户端配置

以上步骤完成后,FTPS 服务器就搭建好了。下一步就可以使用客户端来实现对 FTPS 服务的访问了。 这里有一点需要注意,使用 IIS 管理器创建的自签名证书,与 FileZilla Client 3.24 不兼容。所以如果您要使用 FileZilla Client,可以使用低一点的版本,或者别的 FTP 客户端,例如 Flash FXP。下文中我以 FileZilla Client 3.21 版为例。 在客户端运行 FileZilla,新建一个 FTP 站点。其中主机填入之前创建的虚拟机的公共 IP。端口可以不填,因为在下面的协议中,默认选择了 FTP,所以这里端口会默认使用 TCP 21。 登录类型选择正常,并输入用户名和密码。这里用户名和密码就是我之前用来登录 FTPS 服务器的用户名和密码。当然,您也可以填入您在服务器中单独为 FTP 服务创建的账号和密码。

在传输设置标签下,选择被动传输模式。

设置完成后,点击连接。

FileZilla Client 第一次连接到 FTPS 服务器时,因为我们的证书为自签名证书,客户端无法确认其有效性,所以会弹出未知证书的警告。直接点击确定即可。

这样,客户端就连接到 FTPS 服务了。

小结

本文的配置步骤非常简单,不到 30 分钟就能完成包括虚拟机创建在内的所有步骤。整个 FTPS 服务的搭建有以下几个关键点,我为大家总结一下:

  • 虚拟机配置静态公共 IP;
  • FTP 服务防火墙中配置被动模式的数据端口;
  • 网络安全组(NSG)创建对应的入站规则;
  • FTP 客户端使用被动模式传输数据。

本文中使用的是 IIS 自带的 FTP 服务搭建的 FTPS 站点。如果您要在 Azure 的虚拟机中使用其他 FTP Server 软件来部署,也需要确保完成以上几个关键步骤。

立即访问http://market.azure.cn

Azure 中快速搭建 FTPS 服务的更多相关文章

  1. 快速搭建Kerberos服务端及入门使用

    快速搭建Kerberos服务端及入门使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Kerberos是一种网络身份验证协议.它旨在通过使用秘密密钥加密为客户端/服务器应用程序提 ...

  2. Go语言micro之快速搭建微服务

    背景 go-micro给我们提供了一个非常便捷的方式来快速搭建微服务,而且并不需要提前系统了解micro,下面用一个简单的示例来快速实现一个服务. 创建Proto文件 因为我们要做微服务,那么就一定有 ...

  3. 后续来啦:Winform/WPF中快速搭建日志面板

    后续来啦:Winform/WPF中快速搭建日志面板 继昨天发文ASP.NET Core 可视化日志组件使用(阅读文章,查看视频)后,视频下有朋友留言 "Winform客户端的程序能用它不?& ...

  4. 快速搭建FTP服务

    Linux下ftp服务可以通过搭建vsftpd服务来实现,以CentOS为例,首先查看系统中是否安装了vsftpd,可以通过执行命令 rpm -qa | grep vsftpd 来查看是否安装相应的包 ...

  5. 使用 python -m SimpleHTTPServer 快速搭建http服务

    摘要: 在 Linux 服务器上或安装了 Python 的机器上,可以使用 nohup python -m SimpleHTTPServer [port] & 快速搭建一个http服务. 在 ...

  6. 快速搭建http服务:共享文件--Java的我,不知Python你的好

    在 Linux 服务器上或安装了 Python 的机器上, 我们可以在指定的文件目录下,使用  python -m SimpleHTTPServer 快速搭建一个http服务,提供一个文件浏览的web ...

  7. 使用 python快速搭建http服务

    在 Linux 服务器上或安装了 Python 的机器上,Python自带了一个WEB服务器 SimpleHTTPServer. 我们可以很简单的使用  python -m SimpleHTTPSer ...

  8. python快速搭建http服务

    在Windows 7/10或Ubuntu上可以通过python2.x或python3.x来快速搭建一个简单的HTTP服务器. 如果python为2.x,则可执行:$ python -m SimpleH ...

  9. Spring-boot:快速搭建微服务框架

    前言: Spring Boot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包,并 ...

随机推荐

  1. Visual Studio 跨平台開發實戰(1) - Hello Xamarin! (转帖)

    前言 應用程式發展的腳步, 從來沒有停過. 從早期的Windows 應用程式, 到網路時代的web 應用程式, 再到近幾年相當盛行的行動裝置應用程式(Mobile Application), 身為C# ...

  2. javascript的JSON对象

    JSON包含用于解析JSON(javascript object notation)的方法,将值转换成JSON.JSON不可以被调用或者用作构造函数. JSON对象保存在大括号内,JSON数组保存在中 ...

  3. POJ 1577 Falling Leaves 二叉搜索树

    HDU 3791 Falling Leaves 二叉搜索树  Figure 1Figure 1 shows a graphical representation of a binary tree of ...

  4. height百分比失效

    heigh:100%失效 解决方案: 第一种 html, body { height: 100%; } 第二种 div { height: 100%; position: absolute; } 非定 ...

  5. windows 10安装gensim、nltk

    一.安装gensim 1.什么事gensim gensim是一个python的科学库,gensim包含了TF-IDF.随机投影.word2vec和document2vec算法的实现,分层Dirchle ...

  6. spring之validation校验

    对于任何一个应用而言在客户端做的数据有效性验证都不是安全有效的,这时候就要求我们在开发的时候在服务端也对数据的有效性进行验证.SpringMVC自身对数据在服务端的校验有一个比较好的支持,它能将我们提 ...

  7. vuex源码分析3.0.1(原创)

    前言 chapter1 store构造函数 1.constructor 2.get state和set state 3.commit 4.dispatch 5.subscribe和subscribeA ...

  8. JavaScript插入节点小结

    JS原生API插入节点的方式大致有innerHTML.outerHTML.appendChild.insertBefore.insertAdjacentHTML.applyElement这6种. 这里 ...

  9. AutoResetEvent和ManualResetEvent理解

    AutoResetEvent和ManualResetEvent用于多线程之间代码执行顺序的控制,它们继承自WaitHandle,API相同,但在使用中还是有区别的. 每次使用时虽然理解了,但由于没有去 ...

  10. c# 删除文件,清理删除文件

    c# 删除程序占用的文件,清理删除文件,彻底删除文件,解除文件占用 文件打开时,以共享读写模式打开 FileStream inputStream = new FileStream(name, File ...