FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务

前言

最近的工作中,需要将手机上的文件发送到公司的 FTP 的服务器。按照从前的思路,自然是,先将文件传到电脑,再由电脑上传到 FTP 服务器上;经过一份搜索后找到了 质感文件 这个 Android 应用,这样就可以通过无线网直接连接 FTP 服务器了。

FTP 基础

  1. FTP 需要两个端口,一个是数据端口,一个是控制端口。在主动模式下,控制端口一般为21,数据端口一般为20(控制端口 - 1);在被动模式下,由服务器端和客户端协商决定
  2. FTP 地址为:ftp://用户名:密码@IP地址或域名:控制端口号
  3. FTP 的传输方式有两种:

    (1)ASCII传输方式,即假定用户正在拷贝的文件包含简单的ASCII码文本,通常传输时会自动调整格式

    (2)二进制传输模式,即逐位传输
  4. FTP 的工作模式有两种:

    (1)PORT主动模式,意为服务端主动从20端口连接客户端告知的端口

    (2)PASV被动模式,意为服务端 告知 客户端 地址和端口后,等待客户端连接

    (3)对比:主动模式需要客户端必须开放端口给服务器,服务器要可以连上客户端,这就要求客户端为公网 IP(经过 NAT 后地址就变化了)且防火墙打开。而实际情况下,公网 IP 比较少而且很多客户端都是在防火墙内,由路由器交换机进行着 NAT,还要协调开放端口。被动模式只需要服务器端开放端口给客户端连接就行了,而服务器为了便于访问,一般会放在公网,所以被动模式使用较多
  5. 主动被动模式选择权在客户端

此处比较奇怪,为什么服务器会告知客户端地址,直接让客户端使用访问服务器时的地址不可以吗?我的思考是,机器一般无法取得自己外网的地址,而且 FTP 协议中确有要求,要传输地址:

(图为 FileZilla 中被动模式传输文件)

这里可能就会好奇了,前面的地址好理解,后面的两个数字是什么意思。通过这篇文章得知,端口号为数字1 * 256 + 数字2,Wireshark 中的截图也印证了这一点:

(图为 Wireshark 中捕获的传输接口)

使用 Docker 搭建 Vsftpd 的 FTP 服务

我们使用的 Docker 镜像为 fauria/vsftpd

docker run -d -v /root/ftp:/home/vsftpd \
--p 60020:20 -p 60021:21 -p 61100-61105:61100-61105 \
-e FTP_USER=battor -e FTP_PASS=nihaonihao123123 \
-e PASV_ADDRESS=1.2.3.4 -e PASV_MIN_PORT=61100 -e PASV_MAX_PORT=61105 \
--name vsftpd --restart=always fauria/vsftpd

-v 意为将容器中的路径映射到本地文件系统(“冒号”前为 本地文件系统路径,“冒号”后为 容器中的文件系统路径)。

-p 意为将容器的端口号映射到本地,可以看到映射了一个范围的地址,这些端口是被动模式下开放给客户端的,要与后面的 PASV_MIN_PORT (被动模式最小端口)PASV_MAX_PORT (被动模式最大端口) 相对应。

--name 用于指定容器名称。

--restart 意为当 Docker 进程重启时,立刻启动该容器。

我们自己部署服务器时,应当尽量避免使用默认端口,以减少被黑客攻击的风险。故此处使用 60020 和 60021,以及 61100 至 61105 端口

此外需要注意的是,PASV_ADDRESS 需要配置为服务器对应的外网地址。否则无法连接:

(图为 质感文件 中连接时的情况)

然鹅在 FileZilla 客户端测试中发现,即使 配置为 127.0.0.1,某些客户端亦可以正常连接,猜测是因为客户端中存在类似的设置:

(图为 FileZilla 客户端的设置)

后记

由于 FTP 中的文件较为隐私,在这里就不展示配置成功后的效果了,实际使用起来还是很方便滴。

再次推荐下 质感文件 这个 APP 吧,界面 Material Design 风格,好看好用。支持 FTP 服务器,SFTP 服务器, SMB 服务器,还可作为 FTP 服务器使用。

参考

fauria/vsftpd

227 Entering Passive Mode 含义

FTP 基础 与 使用 Docker 搭建 Vsftpd 的 FTP 服务的更多相关文章

  1. Docker 搭建 ELK 读取微服务项目的日志文件

    思路: 在docker搭建elasticsearch与kibana来展示日志,在微服务部署的机子上部署logstash来收集日志传到elasticsearch中,通过kibana来展示,logstas ...

  2. 通过 docker 搭建自用的 gitlab 服务

    前言 git 是当下如日中天的版本管理系统.现在如果不是工作在 git 版本管理系统之下,几乎都不好意思和人打招呼了.有很多现成的互联网的 git 服务提供给大家使用,例如号称程序员社交网络的 Git ...

  3. 【docker构建】基于docker搭建redis数据库缓存服务

    搭建redis服务 首先拉取镜像==>运行镜像为容器 # 先搜索下redis镜像 [root@VM_0_10_centos wordpress]# docker search redis # 拉 ...

  4. 十一、Docker搭建部署SpringCloud微服务项目Demo

    环境介绍 技术选型:SpringCloud&SpringCloud Alibaba&Docker 微服务模块划分: 员工模块:ems-employees 部门模块:ems-depart ...

  5. 如何在CentOS 7上使用vsftpd设置ftp服务器

    一.前言介绍 FTP(文件传输协议)是一种标准的客户机-服务器网络协议,允许用户在远程网络之间传输文件. 有几个开源的FTP服务器可用于Linux.最受欢迎和广泛使用的是pureftpd.proftp ...

  6. docker 搭建 web 服务环境

    docker容器虽然早就听说过,但是本人还真的没去用过,刚好看到相关的文章,就分享了下,有机会可以实践下...... 做过开发的人对开发环境的安装.配置应该都不会太陌生,不管你做什么开发,对开发环境都 ...

  7. docker 部署vsftpd服务、验证及java ftp操作工具类

    docker部署vsftpd服务 新建ftp文件存储目录/home/ftp cd /home mkdir ftp 创建一个组,用于存放ftp用户 groupadd ftpgroups 创建ftp用户, ...

  8. ubuntu上搭建vsftpd且通过mysql来管理FTP账号

    参考文章:http://wiki.ubuntu.org.cn/Vsftpd%E5%92%8Cmysql%E9%85%8D%E7%BD%AE 请各位先按照这篇文章一步一步操作,我这里是记录一些其间遇到的 ...

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

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

随机推荐

  1. 揭秘华为云GaussDB(for Influx)最佳实践:hint查询

    摘要:GaussDB(for Influx)通过提供hint功能,在单时间线的查询场景下,性能有大幅度的提升,能有效满足客户某些特定场景的查询需求. 本文分享自华为云社区<华为云GaussDB( ...

  2. 《HALCON数字图像处理》第四章笔记

    目录 第四章 HALCON数据结构 HALCON Image图像 图像通道 HALCON Region区域 Region的初步介绍 Region的点与线 Region的行程 Region的区域特征 H ...

  3. 解决Mysql搭建成功后执行sql语句报错以及区分大小写问题

    刚搭建完mysql 8.0以后会: 一.表区分大小写, 二.执行正确的sql语句成功且会报:[Err] 1055 - Expression #1 of ORDER BY clause is not i ...

  4. Java创建数据库新建表及初始化表

    方法一 package com.crt.openapi; import java.sql.DriverManager;import java.sql.ResultSet;import java.io. ...

  5. BUUCTF-[BJDCTF2020]认真你就输了

    [BJDCTF2020]认真你就输了 下载通过16进制查看发现是压缩包,直接就binwalk分离查看. 分离直接得到几个文件,不过好像压缩包里的和外面的文件是一样的,所以直接翻一下目录 直接就找到了 ...

  6. NC20276 [SCOI2010]传送带

    NC20276 [SCOI2010]传送带 题目 题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD ...

  7. C语言动态输出等腰三角形

    C语言动态输出等腰三角形 题目要求:输入行数 打印出对应行数的等腰三角形,要求使用for循环嵌套. 思路 while语句写外层死循环 用于判断输出的数据: 分析: 最外层for,来控制最外层行数,存储 ...

  8. CF1042E Vasya and Magic Matrix 题解

    题目链接 思路分析 看到题目中 \(n,m \leq 1000\) ,故直接考虑 \(O(n^2)\) 级别做法. 我们先把所有的点按照 \(val\) 值从小到大排序,这样的话二维问题变成序列问题. ...

  9. 北京市行政村边界shp数据/北京市乡镇边界/北京市土地利用分类数据/北京市气象数据/降雨量分布数据/太阳辐射数据

     数据下载链接:数据下载链接​ 北京是一座有着三千多年历史的古都,在不同的朝代有着不同的称谓,大致算起来有二十多个别称.北京地势西北高.东南低.西部.北部和东北部三面环山,东南部是一片缓缓向渤海倾斜的 ...

  10. IO流原理及流的分类

    IO原理 I/O是Input/Output的缩写, I/O技术是非常实用的技术,用于 处理设备之间的数据传输.如读/写文件,网络通讯等. Java程序中,对于数据的输入/输出操作以"流(st ...