隐藏在squid3的HTTP代理服务后面的主机IP地址为什么能检测到?

来源:互联网 发布:网络文明公益广告 编辑:程序博客网 时间:2024/06/09 22:52

前几天在自己的linode上装了个squid3,用来在个别情况下挂个代理进行测试。使用一切都正常,squid3的配置网上也有一大把,这里就不赘述了。但很快发现一个有趣的问题,就是访问一些IP检测网站时还是会看到我的原始IP,例如:

下面三个图为三处不同的网站检测出的结果,其中IP为106的是我配置了squid3的HTTP代理服务器,IP为159的是我的本机。

-------------------------------------------------------------------------------------------------------


图1,直接使用百度内置服务显示出了代理IP

-------------------------------------------------------------------------------------------------------



图2:,访问ip138则显示了内网IP;

-------------------------------------------------------------------------------------------------------



图3,访问ip.cn则同时显示了处于代理后的主机与代理本身;

-------------------------------------------------------------------------------------------------------


从最后一张图可以发现,外部服务器可以准确的识别出我的代理服务器和代理后面的主机的IP,显然很多情况下这不是我想要的结果,同时我也很奇怪为什么会这样。

于是用google开始一番搜索,首先找到这个帖子:代理工作原理 。 其中有人问到代理服务器的具体工作原理,这个原理我本身是了解的,但回答中透露了一个重要的信息:“The proxy, depending on the configuration, will often add a "X-Forwarded-For" header to the HTTP request. ” 这里算是接近真相了。

然后继续搜索X-Forwarded-For,自然找到其维基百科的介绍:里面说的更详细了,X-Forwarded-For是代理服务器在转发HTTP时加上的标识原始请求主机信息的字段,其格式为:

“ X-Forwarded-For: client, proxy1, proxy2 ”

该格式还可以支持多个代理串行使用,最左边的client表示最原始的主机,后面依次加上后续的代理。


到这里就清楚了,squid3在默认情况下转发我159主机的请求时附加了X-Forwarded-For字段,并填入了我的159的IP。这也就是为什么上图中后面两个检测网站成功识别出了所谓的内网IP(理论上透明的代理是可能识别出内网IP的)。


到这里问题基本解决。收获了一个HTTP头X-Forwarded-For的设置和含义。另外需要注意的是,这个字段显然是不可信的,毕竟最后一站的代理可以任意修改这些数据。因此服务器不可完全信赖该字段表示的IP,因为这里的IP完全可以任意伪造等。


一句话回答题目的问题:默认情况下squid3不是透明代理(或者说要搞清楚:不是所有的代理都是透明代理。虽然我们现实中用代理的大部分情况是希望透明代理,进而隐藏身份的)


0 0
原创粉丝点击