端口转发&&映射详解、代理&&反向代理深入认知
端口转发&映射详解、代理&&反向代理深入认知
端口转发&&端口映射
端口转发和端口映射都是为了解决内网主机的端口无法在外部直接访问而衍生出来的技术,通过中间服务器进行中转,将内部的端口映射到公网IP上或者将内部端口转发到外部服务器,供用户或者自己来使用;
端口转发
概念:端口转发(Port forwarding),有时被叫做隧道,是安全壳(SSH) 为网络安全通信使用的一种方法。
其他网域其他网域例子:在一个特定网域中,是没有办法直接访问其他网域的。但是我们可以通过路由器的NAT方式访问q。假如我们内网现在有100台主机,那么我们现在都是通过路由器的这一个公网IP和q通信的。那么,当互联网上的消息发送回来时,就要我们的ip地址和路由器的端口进行绑定,在路由器中就会有一个内网ip和路由器端口对应的一张表。当路由器的10000端口收到消息时,就知道把消息发送给他,而当20000端口收到消息时,就知道把消息发送给你。这就是端口转发,其转发一个端口收到的流量,给另一个主机。
比如我们拿到一台内网服务器A的权限,通过扫描发现了同内网的另一台服务器B且开了80端口,我们该如何使用浏览器访问它呢?分析如下
从上图中可以看到,我们已经与A建立了通道,我们可以在A上上传任意文件,执行任意的系统命令,我们如何能够访问B的80端口?假设A是在公网上,有公网IP,我们可以访问它的任意端口。
1、直接在A上执行curl命令访问B的80端口(但不方便测试B的80端口的漏洞和使用)
curl命令是一个利用URL规则工作的文件传输工具,支持文件的上传和下载。curl支持包括HTTP、HTTPS、ftp等众多协议,还支持POST、cookies等协议,小巧好用。
2、在A上开启一个 socks 5代理,我们使用浏览器设置好代理,将我们的浏览器代理到目标内网,然后访问B的80端口。
3、在A上执行端口转发,将B的80端口转发到A的8080,然后我们直接用浏览器访问A的8080端口即可,这个原理就是端口转发。
总结一下,端口转发就是将一个端口,这个端口可以本机的端口也可以是本机可以访问到的任意主机的端口都可以转发到任意一台可以访问到的IP上,通常这个IP是公网IP,方便我们使用。
端口映射
概念:端口映射就是将内网中的主机的一个端口映射到其他网域主机的一个端口,提供相应的服务。当用户访问其他网域IP的这个端口时,服务器自动将请求映射到对应局域网内部的机器上。
其他网域例子:我们在内网中有一台Web服务器,但是其他网域中的用户是没有办法直接访问该服务器。所以在路由器上设置一个端口映射,只要q用户访问路由器ip的80端口,那么路由器会把自动把流量转到内网Web服务器的80端口上。并且,在路由器上还存在一个Session,当内网服务器返回数据给路由器时,路由器能准确的将消息发送给外网请求用户的主机。在这过程中,路由器充当了一个反向代理的作用,他保护了内网中主机的安全。
端口映射就是映射端口,就是将一个内网端口映射到公网上的某个端口,我们来看一个实例,我自己的电脑是在内网中,没有公网IP,但是我想提供一个端口供其他人使用,怎么办呢?我们来看一个图:
A和B在不同的内网,各自有自己的内网IP,但是互相无法直接访问,这时就需要一个中间服务器,要A和B都可以访问然后作为中转服务器,实现上面的目标,这个中间服务器需要有一个公网IP,如图:
上图的C就是有公网IP的中间服务器,我们可以将A的80端口映射到C的80端口,这时,B就可以访问C的80端口,也就相当于访问A的80端口了,这里其实核心原理也是端口转发,只不过是将本机的端口转发到远程的某个端口。
有的路由器也有端口映射与端口转发功能。端口映射与端口转发实现的功能类似,但又不完全一样。端口映射是将外网域的一个端口完全映射给内网一个地址的指定端口,而端口转发是将发往外网的一个端口的通信完全转发给内网一个地址的指定端口
端口转发和端口映射区别:
端口转发:转发的重点在“转”上面。送快递的过来,把所有快递都交给门口保安,保安再根据每件快递上的收件人来分发。
端口映射:就是在大门口给每个人装个柜子,送快递的直接按收件人名字,把快递放到对应的柜子里面。(外网访问本地服务器)
代理和反向代理
概念:代理也被叫做网络代理,是一种比较特殊的网络服务,允许一个终端(通常指客户端)通过这个服务与另一个终端(通常指服务器端)进行非直接的连接。例如:一些网关、路由器等网络设备都具备网络代理的功能。代理服务有利于保障网络终端的隐私或者安全,可以在一定程度上阻止网络攻击(因为通过代理,可以隐藏真正的服务器端/客户端)
代理服务器
左边和右边的电脑在通讯时候,需要经过中间的电脑中转,而中间的那部电脑就是代理服务器。
代理请求过程
客户端首先根据代理服务器所使用的代理协议,与代理服务器创建连接,接着按照协议请求对目标服务器创建连接、或者获得目标服务器的指定资源(如:文件)。
代理协议
此处的协议指的是网络传输协议。
主要是两种:
- Socks
- HTTP
网络传输协议在本篇就不做过多介绍。
正向代理
通常我们说的代理,都是指的正向代理。
代理服务器可以由客户端提供,也可以由服务器端提供。当客户端主动使用代理服务器时,此时的代理叫正向代理。比如:一些网络代理工具(加速器/VPN…)
场景:我需要访问一个服务器C,但是由于某些原因我无法访问到它,可是我就是控制不住自己,这个时候,服务器B告诉我,来吧,你想要什么,我来帮你传话,于是,我把自己的请求给了B,B接收到之后,帮我转给了C,(因为B和C之间的线路是畅通的),C把返回结果给了B,B非常友好地把结果又还给了我,我觉得太好用了简直,于是我周围的小伙伴都开始将请求发给B,通过B的转发,来获取C的信息,这个时候对于服务器C,C只知道是B发了请求过来,不知道我们这群小伙伴的存在,所以这就是代理。
正向代理完整流程
正向代理时,由客户端发送对某一个目标服务器的请求,代理服务器在中间将请求转发给该目标服务器,目标服务器将结果返回给代理服务器,代理服务器再将结果返回给客户端。使用正向代理时,客户端是需要配置代理服务的地址、端口、账号密码(如有)等才可使用的。
通过上图可以看到,客户端并没有直接与服务器相连。正向代理隐藏了真实的客户端地址。可以很好地保护客户端的安全性。
正向代理的适用场景
- 访问被禁止的资源(让客户端访问原本不能访问的服务器。可能是由于路由的原因,或者策略配置的原因,客户端不能直接访问某些服务器。为了访问这些服务器,可通过代理服务器来访问)
-
- 再比如客户端IP被服务器封禁,可以绕过
- 也可以突破网站的区域限制
-
隐藏客户端的地址(对于被请求的服务器而言,代理服务器代表了客户端,所以在服务器或者网络拓扑上,看不到原始客户端)
-
进行客户访问控制
-
- 可以集中部署策略,控制客户端的访问行为(访问认证等)
- 记录用户访问记录(上网行为管理)
- 内部资源的控制(公司、教育网等)
-
加速访问资源
-
- 使用缓冲特性减少网络使用率(代理服务器设置一个较大的缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时, 则直接由缓冲区中取出信息,传给用户,以提高访问速度。)
-
过滤内容(可以通过代理服务器统一过滤一些危险的指令/统一加密一些内容、防御代理服务器两端的一些攻击性行为)
反向代理
场景:我向B发送了一个请求,B对我的请求进行分析,发现我请求的是文章详情,于是B将请求转发给处理文章详情的应用服务器C1,我又向B发了一个请求,B解析之后,发现请求的是我的声望值等个人信息,于是B将请求转发给专门处理个人信息的应用服务器C2,就这样,我不在乎我要请求的数据是在C1,C2,还是C3上,我只需要发送请求到B就可以了,B会对我的请求进行解析,决定转发请求给Cx来处理,并得到处理结果后返回给我。
概括一下就是,一个请求对于客户端是透明的,我不知道我的请求具体由谁处理,我将请求都发给B,至于B发给Cx,随便。
代理与反向代理在实际工程中应用很广泛,反向代理是许多大公司业务处理过程中的经典方式,前端由一个nignx负责根据用户的请求信息转发请求给后端相应的应用服务器(这个过程中也可以加入负载均衡)。
**反向代理:**服务器根据客户端的请求,从其关系的一组或多组后端服务器(如Web服务器)上获取资源,然后再将这些资源返回给客户端,客户端只会得知代理服务器的IP地址,而不知道在代理服务器后面的服务器集群的存在。
反向代理整个流程:由客户端发起对代理服务器的请求,代理服务器在中间将请求转发给某一个服务器,服务器将结果返回给代理服务器,代理服务器再将结果返回给客户端。
反向代理的适用场景
-
负载均衡
-
- 如果服务器集群中有负荷较高者,反向代理通过URL重写,根据连线请求从负荷较低者获取与所需相同的资源或备援。可以有效降低服务器压力,增加服务器稳定性
-
提升服务器安全性
-
- 可以对客户端隐藏服务器的IP地址
- 也可以作为应用层防火墙,为网站提供对基于Web的攻击行为(例如DoS/DDoS)的防护,更容易排查恶意软件等
-
**加密/SSL加速:**将SSL加密工作交由配备了SSL硬件加速器的反向代理来完成
-
提供缓存服务,加速客户端访问
-
- 对于静态内容及短时间内有大量访问请求的动态内容提供缓存服务
-
数据统一压缩
-
- 节约带宽
- 为网络带宽不好的网络提供服务
-
统一的访问权限控制
-
统一的访问控制
-
突破互联网的封锁
-
- 突破谷歌访问封锁
-
- 也就是说,不需要客户端进行代理,我们通过谷歌代理网站(该代理服务器可以访问谷歌,而我们可以访问该公开的代理服务器),也可以突破封锁。
-
为在私有网络下(如局域网)的服务器集群提供NAT穿透及外网发布服务
-
上传下载减速控制
正向代理与反向代理的区别
当前面的内容理解后,对于正向代理和反向代理的区别就很好理解了。最核心的不同在于代理的对象不同。
- 正向代理是代理客户端。
- 反向代理是代理服务器。
而根据这核心的区别,我们也可以记住:代理哪端便可以隐藏哪端。也就是说:
- 正向代理隐藏真实客户端
- 反向代理隐藏真实服务端
反向代理为什么叫反向代理
从我们用户的角度来看:
代理我们发出请求的客户端被称为正向代理。
而代理我们访问的服务器,则被称为反向代理。从代理结构的角度来看(代理服务器在两种代理中的作用均为收发请求与响应):
客户端与代理服务器属于一个局域网(上图),称为正向代理。
服务器端与代理服务器属于一个局域网时(上图),称为反向代理。
最后,请记住:
- 正向代理为客户端服务。
- 反向代理为服务器端服务。
后记
这是很早前学习时综合网上查阅的各类文章资料最后汇总的个人笔记,因为比较久远所以难以备注参考文章链接
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)