正向网络代理的实现原理
目前知道网络代理的人越来越多了,不管是单纯的换IP,还是进行大量的数据采集,或者是暴露内网服务,都是离不开网络代理这个工具。但是很少人会关注各种网络代理背后的原理。从代理方向来说,网络代理通常分为正向代理和反向代理两大类。正向代理是代理客户端,为客户端收发请求,使真实客户端对服务器不可见。
其网络模型,如下所示:
正向代理服务器位于client与server之间。当client向server发起交互请求的时候,client的链路首先通过中间代理服务器,然后由代理服务器将链接数据处理后发往server;当数据从server端返回时,也是先将数据交给中间代理服务器,然后再由代理服务器返回给请求客户端。今天我们先来详细了解一下常见的正向代理背后的原理。
一、代理类型
正向网络代理通常可以分成4种类型,分别是透明网络代理,匿名网络代理,高匿名网络代理,以及混淆网络代理。四种不同的网络代理,实现的原理不同,进而导致实现的难度,及对应的安全程度也有差异。从安全程度来看,他们的排列顺序应该是:高匿>混淆>匿名>透明。二、代理原理
代理类型主要取决于代理服务器端的配置,针对HTTP首部字段的不同设置,会形成不同的代理类型。未经过额外设置的首部,经wireshark抓包显示,通常如下所示:一旦经过代理服务器后,会在首部加入如下扩展字段:HTTP- VIA,HTTP -X- FORWARDED -FOR,并会改变server端对REMOTE-ADDR字段的采集。1.REMOTE-ADDR
REMOTE- ADDR表示客户端的IP,但是它的值不是由客户端提供的,而是服务器根据客户端的IP指定的。 如果使用浏览器直接访问某个网站,那么网站的web服务器(Nginx、Apache等)就会把REMOTE-ADDR设为客户端的IP地址。 如果我们给浏览器设置代理,我们访问目标网站的请求会先经过代理服务器,然后由代理服务器将请求转化到目标网站。那么网站的web代理服务器就会把REMOTE-ADDR设为代理服务器的IP。2.X-Forwarded-For(XFF)
X-Forwarded-For是一个HTTP扩展头部,用来表示HTTP请求端真实IP。当客户端使用了代理时,web代理服务器就不知道客户端的真实IP地址。为了避免这个情况,代理服务器通常会增加一个X-Forwarded-For的头信息,把客户端的IP添加到头信息里面。X-Forwarded-For请求头格式如下:X-Forwarded-For:client,proxy1,proxy2 client表示客户端的IP地址;proxy1是离服务端最远的设备IP;proxy2是次级代理设备的IP;从格式中,可以看出从client到server是可以有多层代理的。 例如:一个HTTP请求到达服务器之前,经过了三个代理Proxy1、Proxy2、Proxy3,IP分别为IP1、IP2、IP3,用户真实IP为IP0。那么按照XFF标准,服务端最终会收到以下信息:X-Forwarded-For:IP0,IP1,IP2;在列表中并没有IP3,IP3可以在服务端通过RemoteAddress字段获得。下图是经过两重代理后的抓包显示:
3.HTTP_VIA
via是HTTP协议里面的一个header,记录了一次HTTP请求所经过的代理和网关,经过1个代理服务器,就添加一个代理服务器的信息,经过2个就添加2个。基于NGI的构想,DSP Labs正在努力构建下一代分布式存储的生态体系。可以预见的,在这个生态中,将会有大量的局域网节点参与到生态建设中来。为了让这些节点流畅的参与到生态中,DSP Labs设计并提供了双向代理的能力。其中正向代理,主要参考了上述的基于HTTP的正向代理的思路,同时为了更好的配合数据合法性监管的诉求,我们在代理协议中,适当加入了数据流审核的能力。
本文来源:DSP原文标题:三分钟了解DSP(网络篇)—— Proxy
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。