FTP和使用Docker搭建FTP服务

FTP

ftp即file transfer protocol文件传输协议,适用于文件传输的一个协议。

ftp有两个channel。

类型 作用 端口号
command channel 命令端口,用于接受要执行命令 21
data channel 数据端口,用于传输数据 20

FTP的主动模式和被动模式

ftp是cs结构,客户端连接服务端时可以选择以主动模式连接或者别动模式连接。

主动模式(active mode)

当客户端以主动模式连接客户端时,执行以下步骤,下述提到的随机端口N>1024:

  1. client随机选择一个端口N发送PORT(ip+N)指令给server的21端口。
  2. server发送ack给client端的N端口,连接建立。该连接用于命令传输。
  3. server端的20端口连接client的N+1端口。
  4. client发送ack给sever端的20端口,连接建立。该连接用于数据传输。

被动模式(passive mode)

当客户端以被动模式连接客户端时,执行以下步骤,下述提到的随机端口N>1024,R>1024:

  1. client随机选择一个端口N发送PASV(ip+N)指令给server的21端口。
  2. server选择一个随机端口R发送ack(ip+R)给client端的N端口,连接建立。该连接用于命令传输。
  3. client端的N+1端口连接sever的R端口。
  4. server发送ack给client端的N端口,连接建立。该连接用于数据传输。

区别和选择

可以看出来,主动模式下,server端使用20端口用于数据传输。被动模式下,server端使用随机端口进行数据传输。

模式 client数据端口 server数据端口 主动性
主动模式 随机 20 server端建立连接
被动模式 随机 随机 client端建立连接

安全问题

由于client端一般都防火墙或者NAT下面,所以在主动模式下server连接client给的一个随机端口很可能被block掉,所以在生产中一般使用passive模式。但是passive模式中server端需要提供一个随机端口给client用于数据传输,这有很大的安全隐患。所有最好指定一个port range。

端口范围的评估

passive模式中需要指定port range,一般来水一两个client使用一个端口。但是有些client会开多个session,例如客户端要上传100个文件,他可能会开5个session去上传文件,这样子就会占用5个server端的端口了,所以要评估用户数和业务场景得出一个port range。

FTPS 和 SFTP

由于ftp在传输文件是没有对传输的内容进行进行加密,内容是plain text,存在安全问题。FTPS和SFTP是安全的文件传输协议。

FTPS(FTP Secure)使用 Secure Sockets Layer (SSL) 或者 Transport Layer Security (TLS) protocols进行加密,除了使用用户密码登录外,还会进行证书校验,总之FTPS是基于FTP的,是FTP的安全版本。

SFTP (SSH File Transfer Protocol) 不同于FTP,是一个基于SSH全新的协议,端口号22。

使用docker部署ftp服务

上docker hub找一个靠谱点的镜像如下,配置一下。需要开启主动和被动模式。

环境变量 含义
FTP_USER 用户
FTP_PASS 密码
PASV_ADDRESS 被动模式中返回客户端的ip
PASV_MIN_PORT 被动模式中随机端口的下限
PASV_MAX_PORT 被动模式中随机端口的上限
docker run -d -v /ftp_data/:/home/vsftpd \
-p 20:20 -p 21:21 -p 21100-21110:21100-21110 \
-e FTP_USER=ftp -e FTP_PASS=metadoc \
-e PASV_ADDRESS=127.0.0.1 -e PASV_MIN_PORT=21100 -e PASV_MAX_PORT=21110 \
--name vsftpd --restart=always fauria/vsftpd

云部署注意事项

由于云部署存在端口映射,所以被动模式中端口范围要与暴露的端口一致。例如测试云分配给你的端口是30010到30050,那么你选择给ftp server的端口是30010到30020,那么配置上下限时也要对应。

另外主动模式,客户端连接服务端的20端口,但是这个端口又存在映射,所以这种模式不可行。

FTP和使用Docker搭建FTP服务相关推荐

  1. 使用 Docker 搭建 FTP 服务并设置用户的指定目录上传,下载,删除

    ** 使用 Docker 搭建 FTP 服务 ** 1.准备一个服务器,安装好docker并且是联网状态. 2.创建用户并有自己的家目录 adduser mqq #mqq是我的用户名称Enter th ...

  2. 【译文】用Spring Cloud和Docker搭建微服务平台

    by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...

  3. 用Spring Cloud和Docker搭建微服务平台

    This blog series will introduce you to some of the foundational concepts of building a microservice- ...

  4. 【收藏】使用Docker搭建MySQL服务

    使用Docker搭建MySQL服务 https://www.cnblogs.com/sablier/p/11605606.html

  5. docker搭建zabbix服务

    docker搭建zabbix服务 zabbix简介 1.本次安装zabbix的镜像版本 2.zabbix组件 2.1 创建子网 2.2 MySQL容器 2.3 zabbix-server-mysql容 ...

  6. windows系统使用Docker搭建MySQL服务

    windows系统使用Docker搭建MySQL服务 文章目录 windows系统使用Docker搭建MySQL服务 前题 一.安装docker 二.建立镜像 三.连接mysql 前题 请先在wind ...

  7. 15.1-15.3 FTP,使用vsftpd搭建FTP服务

    FTP介绍 FTP是File Transfer Protocol(文件传输协议,简称文传协议)的英文简称,用于在Internet上控制文件的双向传输. FTP的主要作用就是让用户连接一个远程计算机(这 ...

  8. win7局域网自建ftp服务器,win7系统搭建FTp服务器局域网内传输文件的解决教程

    win7系统使用久了,好多网友反馈说win7系统搭建FTp服务器局域网内传输文件的问题,非常不方便.有什么办法可以永久解决win7系统搭建FTp服务器局域网内传输文件的问题,面对win7系统搭建FTp ...

  9. suse系统搭建ftp服务器,linux suse 搭建ftp服务器

    linux suse 搭建ftp服务器 内容精选 换一换 设置HECS登录密码设置Windows云服务器登录密码设置Linux云服务器登录密码登录HECS了解Windows云服务器的登录方式了解Lin ...

最新文章

  1. MindSpore接口mindspore::api
  2. Java集合框架的知识总结(1)
  3. appium学习【二】:用try捕获异常后,用例的执行结果为pass
  4. 设计模式(二)__装饰设计模式
  5. python pexpect输出_关于多线程:如何使用pexpect获取python中子进程的自发输出
  6. 深度学习模型的前馈运算与反馈运算
  7. LeetCode 300最长递增子序列
  8. 百度地图JS API GPS坐标转换成百度地图坐标(修改版)
  9. 杭电多校HDU 6601 Keen On Everything But Triangle(主席树)题解
  10. 微信小程序 图片处理:压缩、上传、审核
  11. 十五. 项目沟通管理
  12. 自适应在线聊天室源码
  13. glew库安装和初始化
  14. 程序员转行一般是因为什么,会去哪些行业?
  15. 小米盒子刷arm linux,小米盒子刷成原生安卓系统操作步骤详解
  16. 图形和函数图像的绘制
  17. loadrunner入门教程(4) --loadrunner的下载
  18. 续写千倍币神话,PlusFo到底是何方神圣?
  19. 做人拿得起,做事放得下
  20. 数据结构课程设计—同学录管理系统(c语言)

热门文章

  1. MIT | 数据分析、信号处理和机器学习中的矩阵方法 笔记系列 Lecture 6 Singular Value Decomposition (SVD)
  2. 【刷题日记】笔试经典编程题目(三)
  3. 极客头条 | 5月13日科技要闻:人民日报调查“浏览器主页劫持”;CEO 回应小霸王游戏机团队解散;陌陌暂时关闭动态发布功能
  4. linux缺少.h文件解决办法
  5. 适合自己的书只能靠自己找
  6. 转载一篇软件工程师的职业规划,以此鞭笞自己
  7. wincc新建项目无法连接到服务器,wincc flexible 2008 SP2无法连接到SQL服务器
  8. 百度云盘免费下载postman
  9. 【CV面试】RGB2GRAY、贝叶斯问题、cv2.add和cv2.addWeighted
  10. MPlayer移植步骤