Azure 中快速搭建 FTPS 服务
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 服务的更多相关文章
- 快速搭建Kerberos服务端及入门使用
快速搭建Kerberos服务端及入门使用 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. Kerberos是一种网络身份验证协议.它旨在通过使用秘密密钥加密为客户端/服务器应用程序提 ...
- Go语言micro之快速搭建微服务
背景 go-micro给我们提供了一个非常便捷的方式来快速搭建微服务,而且并不需要提前系统了解micro,下面用一个简单的示例来快速实现一个服务. 创建Proto文件 因为我们要做微服务,那么就一定有 ...
- 后续来啦:Winform/WPF中快速搭建日志面板
后续来啦:Winform/WPF中快速搭建日志面板 继昨天发文ASP.NET Core 可视化日志组件使用(阅读文章,查看视频)后,视频下有朋友留言 "Winform客户端的程序能用它不?& ...
- 快速搭建FTP服务
Linux下ftp服务可以通过搭建vsftpd服务来实现,以CentOS为例,首先查看系统中是否安装了vsftpd,可以通过执行命令 rpm -qa | grep vsftpd 来查看是否安装相应的包 ...
- 使用 python -m SimpleHTTPServer 快速搭建http服务
摘要: 在 Linux 服务器上或安装了 Python 的机器上,可以使用 nohup python -m SimpleHTTPServer [port] & 快速搭建一个http服务. 在 ...
- 快速搭建http服务:共享文件--Java的我,不知Python你的好
在 Linux 服务器上或安装了 Python 的机器上, 我们可以在指定的文件目录下,使用 python -m SimpleHTTPServer 快速搭建一个http服务,提供一个文件浏览的web ...
- 使用 python快速搭建http服务
在 Linux 服务器上或安装了 Python 的机器上,Python自带了一个WEB服务器 SimpleHTTPServer. 我们可以很简单的使用 python -m SimpleHTTPSer ...
- python快速搭建http服务
在Windows 7/10或Ubuntu上可以通过python2.x或python3.x来快速搭建一个简单的HTTP服务器. 如果python为2.x,则可执行:$ python -m SimpleH ...
- Spring-boot:快速搭建微服务框架
前言: Spring Boot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置. 简单来说,它提供了一堆依赖打包,并 ...
随机推荐
- dotnet core webapi +vue 搭建前后端完全分离web架构(一)
架构 服务端采用 dotnet core webapi 前端采用: Vue + router +elementUI+axios 问题 使用前后端完全分离的架构,首先遇到的问题肯定是跨域访问.前后端可 ...
- html-css-js基本理解和简单总结
目录 一.对于网页的基本理解 1.网页是一种数据展示和信息交互的载体 2.网页组成部分 3.支撑一个网页的技术模块 二.html的理解和技术笔记 1.html理解 2.html技术笔记-html标签 ...
- (转)Oracle与DB2在数据库高可用技术上的相同与差异探讨
原文:http://www.talkwithtrend.com/Article/178339 数据库建设过程中,高可用是每一个企业数据中心数据库建设过程中至关重要的一个关注点,直接关系到业务连续性和稳 ...
- 菜单根据菜单ID向下递归
第一步:我们根据这个类定义数据库,并插入菜单数据 DROP TABLE IF EXISTS `jrbac_menu`; CREATE TABLE `jrbac_menu` ( `id` ) NOT N ...
- 【Eclipse】编译使用Makefile的C工程
创建MakeFile project新建src文件夹,将文件复制到里面.右击makefile,make targets->create->名称填上allmake targets->b ...
- jquery的animate关于background-position属性
jQuery 的 animate 虽然能直接使用 CSS 的方式来进行动画,但有些属性其实是不支持的,例如:background-position. 谷歌支持 background-position- ...
- 再学C/C++ 之 指针常量 和 常量指针
(1)指针常量,将指针的指向当成常量.即指针变量的值只能在定义的时候初始化,定义后不能修改,也就是说不能改变指针变量的指向.但是不影响所指对象的访问特征.其定义形式为: 类型 * const 指针 / ...
- JS中typeof和instanceof的用法和区别
typeof和instanceof的区别 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的 instanceof的用法 instanceof返回的是一个布尔值 ...
- 《LeetBook》leetcode题解(10): Regular Expression Matching——DP解决正则匹配
我现在在做一个叫<leetbook>的免费开源书项目,力求提供最易懂的中文思路,目前把解题思路都同步更新到gitbook上了,需要的同学可以去看看 书的地址:https://hk029.g ...
- HDU 5444 Elven Postman (2015 ACM/ICPC Asia Regional Changchun Online)
Elven Postman Elves are very peculiar creatures. As we all know, they can live for a very long time ...