1.什么是代理
生活中我们常说的代理就是中介人/经纪人,在计算机领域,代理本质上是一台服务器。计算机A要和计算机B通信,经过计算机C进行转发,计算机C将A的消息转发给B, 将B的消息转发给A。
2.为什么需要正向代理和反向代理
代理按主要服务的角色分成2种,正向代理和反向代理,正向代理代理的是客户端,反向代理代理的是服务器。典型拓扑结构如下:
正向代理典型的应用是V**, 我们不能直接访问google网站,通过配置正向代理,正向代理与google服务器是连同的,我们访问网站请求发送到正向代理服务器,正向代理服务转发给google服务器,并将google服务器返回的内容转发给浏览器。
能够隐藏真实的客户端信息,对于google服务器来说,它只知道代理服务器,并不知道知晓客户端。总结下来,正向代理主要作用有:
• 1.访问原来无法访问的资源,像google, facebook• 2.可以做缓存,加速访问• 3.对客户端进行授权,进行上网认证• 4.上网行为管理,隐藏真实的IP地址, 例如深信服的上网行为管理AC
反向代理的主要应用是负载均衡,例如将Nginx作为反向代理服务器,提供负载均衡服务。我们访问百度网站,访问的是百度服务器www.baidu.com,反向代理服务器会将我们的访问请求转发到真实的服务器上。所以,方向代理隐藏了真实的服务器地址信息。从客户端角度看,并不知道自己访问的是一个代理服务器。客户端并不需要做什么配置。
反向代理的主要作用有:
•1.负载均衡
•2.保护内网安全
•3.缓存服务器信息,减少服务器的压力
3.怎么配置正向代理
下面的实验2台机器做验证,对应的网络拓扑结构如下,客户机的IP地址为192.168.43.69 代理服务器的IP地址为192.168.43.51。
首先在代理服务器上安装代理软件,代理服务器是一个ubuntu系统,本实验安装的是squid。这是一款非常有名的正向代理软件。安装步骤如下:
代码语言:javascript复制1. sudo apt-get update
2. sudo apt-get install squid3
3. 修改squid3配置文件
sudo vim /etc/squid/squid.conf
4. /http_access 按N一直往下查询,找到 http_access deny all 把 deny改成allow
5. sudo service squid restart
在客户机上访问百度首页,在代理服务器上抓包分析正向代理报文交互流程。
代码语言:javascript复制1.在客户机上配置代理服务信息
export http_proxy=“ubuntu:3128” //ubuntu是我代理服务器的名称,3128是代理服务器squid3监听的端口
2.在代理服务器上执行如下命令,清理掉arp缓存
sudo arp -d _gateway
3. 开启抓包,抓取接收和发送地址为51的报文和arp报文
sudo tcpdump -s 2000 -ntX ‘(src 192.168.43.51) or (dst 192.168.43.51) or (arp)’
4. 在客户机上执行 wget 抓取百度首页 wget —header=‘Connection:close’ http://www.baidu.com/index.html
代理服务器上抓取到的内容如下,前面的交互是发送arp信息,请求192.168.43.51机器的mac地址。然后代理客户端与百度服务器建立连接,请求首页内容,并将获取到的首页内容返回给客户端。
客户端上执行结果如下,可以看到,客户端成功解析出了代理服务器的地址,与代理服务器建立了连接。并成功抓取到首页index.html内容。
4.反向代理和正向代理区别
•1.代理的对象不同,正向代理代理的对象是客户端,反向代理代理的是服务器
•2.代理服务器部署的位置不同,正向代理部署在客户端一侧,一般跟客户端在一个局域网,反向代理部署在服务器一侧,一般跟服务器在一个局域网
•3.正向代理给局域网内部的机器提供访问互联网的功能,反向代理将防火墙后面服务器的服务提供给互联网。
•参考文献
[1]https://zhuanlan.zhihu.com/p/69072041
[2]https://www.cnblogs.com/wl889490/p/12612086.html
[3]https://zhuanlan.zhihu.com/p/25707362