Ftp代理
正向代理和反向代理
1、正向代理的概念
正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。
结论:正向代理是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
2、反向代理的概念
举例:用户想访问:"http://ooxx.me/readme",但ooxx.me上并不存在readme页面,他是偷偷从另外一台服务器上取回来,然后作为自己的内容吐给用户,但用户并不知情,这很正常,用户一般都很笨。这里所提到的ooxx.me 这个域名对应的服务器就设置了反向代理功能。
结论:反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
3、正向代理和反向代理的区别
从用途上来讲:正向代理的典型用途是为在防火墙内的局域网客户端提供访问Internet的途径。正向代理还可以使用缓冲特性减少网络使用率。反向代理的典型用途是将防火墙后面的服务器提供给Internet用户访问。反向代理还可以为后端的多台服务器提供负载平衡,或为后端较慢的服务器提供缓冲服务。另外,反向代理还可以启用高级URL策略和管理技术,从而使处于不同web服务器系统的web页面同时存在于同一个URL空间下。
从安全性来讲:正向代理允许客户端通过它访问任意网站并且隐藏客户端自身,因此你必须采取安全措施以确保仅为经过授权的客户端提供服务。反向代理对外都是透明的,访问者并不知道自己访问的是一个代理。
打个比方,a,b,c三个人,正向代理是a通过b向C借钱,a知道c的存在。反向代理是a向b借钱,b又向C借,a不知道c的存在。
FTP反向代理
ref http://blog.csdn.net/francishe/article/details/72884427
与 HTTP 代理相比,FTP 代理要特殊很多,因为 FTP 要使用随机端口来传输数据,端口号在运行时确定并通过控制链路(控制链路传输 FTP 命令和响应,数据链路传输文件内容)传输,因此代理服务器必须要解析控制链路的响应或请求并替换。
HTTP 代理就要简单很多,客户端与 proxy 通信,并将 Host header 填成 real server 的地址,proxy 之间将整个 TCP message body 转发即可,也就是说,HTTP 代理即可使用四层代理,也可以使用三层代理(端口转发),但 FTP 只能使用四层代理,因为 FTP client 要解析 FTP server reply 取得数据链路地址,三层代理会导致 proxy 只代理控制链路,数据链路依然直连 real server.
FTP proxy 的局限性非常大,如果对客户端透明(即客户端连 proxy 或 real server 只需修改 ip:host),一组 FTP proxy 实例只能代理一个 FTP server, 因为 proxy 无法知晓客户端要连的 real server 的地址(HTTP proxy 能通过 Host header 知道 real server 地址是多少)。
ftp.proxy
在常用的开源代理软件中,Apache 和 Squid 都支持 FTP 代理,但都不是真正意义上的 FTP 代理。详细信息可以见官方文档:
Apache Module mod_proxy_ftp
squid-cache
wiki - Feature: Native FTP proxying
ftp.proxy 不太出名,应用也不广,但是功能满足 FTP 代理服务器的需求。
安装
yum install ctags
tar -xzf ftpproxy-1.2.3.tgz
cd ftpproxy-1.2.3
sed -i 's/\/usr\/local\/man\/man1/\/usr\/local\/share\/man\/man1/g' Makefile
make
make install
安装过程比较简洁,只安装了一个可执行文件和 man page:
cd src; strip ftp.proxy && cp ftp.proxy /usr/local/sbin
cd doc; cp *.1 /usr/local/share/man/man1
代理过程分析
1)环境准备
FTP client: 99.48.6.115
FTP proxy: 99.48.234.64:2121
FTP server:99.48.238.154:21
2)在FTP proxy启用ftp代理:
ftp.proxy -D 2121 99.48.238.154:21
starting ftp.proxy 1.2.3 in daemon mode ...
3)在FTP client上访问ftpproxy
4)在ftp server上查看客户端连接
下图看对于ftp server,客户端连接信息显示的是ftp proxy反向代理的IP地址
同时在ftp client、 ftp proxy、ftp server三台机器上使用netstat命令查看网络连接得出,ftp client只和ftp proxy有连接、与ftp server没有网络连接,ftp proxy与ftp proxy以及ftp server两者都有命令行和数据传输口的连接,且ftp proxy使用的是主动模式。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步