| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 系统运维 -> ftp搭建发布到外网踩坑记 -> 正文阅读 |
|
[系统运维]ftp搭建发布到外网踩坑记 |
ftp搭建可以选择windows自带的也可以选择工具如:serv-u,xlight,filezilla server等还可以直接用python开启ftp服务,这个其实很简单。教程也比较多。但是发布外网可以访问有几个坑,ftp默认端口21,分为主动访问和被动访问,主动访问是走21端口,被动访问时走的端口断,可以自己设定。那么问题来了,如果只主动访问只开发ftp服务器的21端口就可以了,如果要支持被动访问那么就需要开发ftp服务器的被动访问的端口断。但是通常安全考虑我们要尽量少开放服务器端口,所以接下来重点讲解开发21端口。 一般工具默认是被动连接的,我在233这台机器上安装了ftp服务及filezilla client连接工具,本机连接采用默认模式即被动模式是可以连接,但是防火墙只开放了21端口,因此局域网内用工具连接233ftp服务是能选主动模式,否则无法连接。 以下是通过python开启ftp服务代码 from pyftpdlib.authorizers import DummyAuthorizer # 新建一个用户组 handler = FTPHandler ftp服务搭建开启后一定要记得开放防火墙访问端口,开发端口时只需开放你ftp开启的端口,以下windows开放防火墙端口 ? ? 端口开放后内网就可以通过主动模式连接ftp服务了,实际使用尽量不要还是把端口改下,不要用21 python? 客户端连接代码 from ftplib import FTP def ftpconnect(host, username, password): def downloadfile(ftp, remotepath, localpath):
if __name__ == "__main__": 上面是主动模式适合客户端端口完全开放不限制的情况,但是我的客户端机器是阿里云(阿里云严格限制了端口开放)因此被动模式开放服务器端口端跟符合现实 下面详细讲下主动与被动的区别,本质就是主动是客户端开发更多端口,ftp服务器只开放21端口(当然这个21可以自己修改为其它端口) 被动模式就是ftp服务器除了开发21端口外还要开个一个端口断给客户端使用,而客户端不需要开放端口 FTP是仅基于TCP的服务,不支持UDP。 与众不同的是FTP使用2个端口,一个数据端口和一个命令端口(也可叫做控制端口)。通常来说这两个端口是21(命令端口)和20(数据端口)。但FTP工作方式的不同,数据端口并不总是20。这就是主动与被动FTP的最大不同之处。 (一)主动FTP 主动方式的FTP是这样的:客户端从一个任意的非特权端口N(N>1024)连接到FTP服务器的命令端口,也就是21端口。然后客户端开始 监听端口N+1,并发送FTP命令“port N+1”到FTP服务器。接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。 针对FTP服务器前面的防火墙来说,必须允许以下通讯才能支持主动方式FTP: 1. 任何大于1024的端口到FTP服务器的21端口。(客户端初始化的连接) 2. FTP服务器的21端口到大于1024的端口。 (服务器响应客户端的控制端口) 3. FTP服务器的20端口到大于1024的端口。(服务器端初始化数据连接到客户端的数据端口) 4. 大于1024端口到FTP服务器的20端口(客户端发送ACK响应到服务器的数据端口) (二)被动FTP 为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于 被动模式时才启用。 在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。 当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。 对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP: 1. 从任何大于1024的端口到服务器的21端口 (客户端初始化的连接) 2. 服务器的21端口到任何大于1024的端口 (服务器响应到客户端的控制端口的连接) 3. 从任何大于1024端口到服务器的大于1024端口 (客户端初始化数据连接到服务器指定的任意端口) 4. 服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)
1、主动FTP: 命令连接:客户端 >1024端口 -> 服务器 21端口 数据连接:客户端 >1024端口 1024端口 -> 服务器 21端口 数据连接:客户端 >1024端口 -> 服务器 >1024端口 (三) 主动与被动FTP优缺点: 主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的 防火墙阻塞掉。被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这 个端口很有可能被服务器端的防火墙阻塞掉。 幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定 一个有 限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危 险。 简而言之: 主动模式(PORT)和被动模式(PASV)。主动模式是从服务器端向客户端发起连接;被动模式是客户端向服务器端发起连接。两者的共同点是都使用21端口进行用户验证及管理,差别在于传送数据的方式不同,PORT模式的FTP服务器数据端口固定在20,而PASV模式则在1025-65535之间 随机 FTP主动模式与被动模式的解决与原理 FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用 到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。 FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。 PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据 时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求, 建立一条数据链路来传送数据。 PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据 时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数 据链路来传送数据。 概括:? --------------------------------------------------------------------------------
常见的FTP客户端软件的PASV方式的关闭方法 大部分FTP客户端默认使用PASV方式,PASV模式的意式是被动模式。 在大部分FTP客户端的设置里,常见到的字眼都是“PASV”或“被动模式”。 IE: 工具 -> Internet选项 -> 高级 -> “使用被动FTP”(需要IE6.0以上才支持)。 CuteFTP: Edit -> Setting -> Connection -> Firewall -> “PASV Mode”? FlashGet: 工具 -> 选项 -> 代理服务器 -> 直接连接 -> 编辑 -> “PASV模式” FlashFXP: 选项 -> 参数选择 -> 代理/防火墙/标识 -> “使用被动模式”? LeapFTP: Option ->Preferences -> General->Proxy->Use Pasv Mode 从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。 FTP主动模式与被动模式的解决与原理 FTP是File Transfer Protocol(文件传输协议)的缩写,用来在两台计算机之间互相传送文件。相比于HTTP,FTP协议要复杂得多。复杂的原因,是因为FTP协议要用 到两个TCP连接,一个是命令链路,用来在FTP客户端与服务器之间传递命令;另一个是数据链路,用来上传或下载数据。 FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。 PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据 时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求, 建立一条数据链路来传送数据。 PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据 时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数 据链路来传送数据。 ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/15 19:31:48- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |