在计算机网络中,代理或代理服务器是位于您和服务器之间的计算机。它充当本地网络和大型网络(例如互联网)之间的网关。
代理服务器通过拦截发送方和接收方之间的连接来工作。所有传入数据都通过一个端口进入,并通过另一个端口转发到网络的其余部分。
除了流量转发之外,代理服务器还通过隐藏服务器的实际 IP 地址来提供安全性。它们还具有缓存机制来存储请求的资源以提高性能。代理服务器可以加密您的数据,使其在传输过程中不可读,并根据 IP 地址阻止对某些网页的访问。
现在我们已经大致了解了代理的工作原理,让我们放大特定类型的代理 — SOCKS — 特别是 SOCKs5 变体。
什么是 SOCKS 代理?
SOCKS 代表 Socket Secure,是一种网络协议,它通过代表客户端将网络流量路由到实际服务器来促进通过防火墙与服务器的通信。SOCKS 旨在路由由任何协议或程序生成的任何类型的流量。
SOCKS 代理服务器代表客户端创建到防火墙后面的另一个服务器的传输控制协议 (TCP) 连接,然后在客户端和实际服务器之间交换网络数据包。
SOCKS 代理服务器不会以任何方式解释客户端和服务器之间的网络流量;之所以经常使用它,是因为客户端位于防火墙后面,并且不允许与外部服务器建立 TCP 连接,除非它们通过 SOCKS 代理服务器进行。
因此,SOCKS 代理通过防火墙中继用户的 TCP 和用户数据报协议 (UDP) 会话。
SOCKS 是第 5 层协议,它不关心开放系统互连 (OSI) 模型中该层以下的任何内容——这意味着您不能使用它来隧道运行在第 5 层以下的协议。
这包括诸如 ping、地址解析协议 (ARP) 等。从安全角度来看,如果攻击者基于半开连接进行扫描,它将不允许攻击者使用 Nmap 等工具执行扫描,因为它工作在第 5 层。
由于 SOCKS 位于第 5 层,介于 SSL(第 7 层)和 TCP/UDP(第 4 层)之间,它可以处理多种请求类型,包括 HTTP、HTTPS、POP3、SMTP 和 FTP。
因此,SOCKS 可用于电子邮件、网页浏览、点对点共享、文件传输等。
在第 7 层为特定协议构建的其他代理,例如用于解释和转发客户端和服务器之间的 HTTP 或 HTTPS 流量的 HTTP 代理,通常称为应用程序代理。
只有两个版本:SOCKS4 和 SOCKs5。SOCKs5 和 SOCKS4 的主要区别在于:
-
SOCKS4 不支持认证,而 SOCKs5 支持多种认证方式;和
-
SOCKS4 不支持 UDP 代理,而 SOCKs5 支持。
SOCKs5 代理更安全,因为它通过身份验证建立完整的 TCP 连接,并使用安全外壳 (SSH) 加密隧道方法来中继流量。
为什么你应该采用 SOCKs5
以下是使用带有 SSH 隧道的 SOCKs5 代理的四个主要好处。
1.访问防火墙后面的后端服务
通常,集群托管在防火墙后面的云中,以最大限度地减少潜在的安全漏洞。有两种方法可以访问集群内运行的任何后端服务,每种方法都有其局限性:
-
向公众公开后端服务(并接受相关的安全风险);或者
-
将客户端或用户的 IP 列入白名单以允许流量流向后端服务(但是,当用户的 IP 更改时,这不是正确的解决方案)。
使用 SSH 进行动态端口转发的 SOCKs5 代理可以替代上述两个不受欢迎的选项。管理员或开发人员可以访问托管在防火墙后面的云中的集群内的任何后端服务,以便从公共网络进行调试、监控和管理,而无需暴露后端服务端口或将特定 IP 列入白名单。
让我们看一个用例。出于安全原因,托管在云上时,用于监控 Hadoop 集群的管理或监控应用程序 API 或 Web 用户界面 (UI) 端口默认关闭。要访问这些 API 或 Web UI,您可以使用 SSH 动态端口转发来主节点或边缘节点集群,因为主节点将具有公共 IP 并默认运行 SSH 服务,这些服务是公开的,因此用户可以从外部连接。
再举一个例子,假设您正在使用虚拟私有云 (VPC)。您可以部署堡垒主机,通过限制对外部世界的访问来安全地访问 VPC 中的远程实例。您可以从外部访问堡垒主机,并且只开放 22 端口(SSH)。使用 SSH 动态端口转发(SOCKs5 代理),您可以访问在 VPC 中运行的远程实例。
2. 无需特殊设置
SOCKs5 不需要特殊设置,只要您对集群的边缘节点或网关具有 SSH 访问权限。因此,管理员和开发人员等用户可以使用 SSH 隧道访问防火墙后面的后端资源,而无需虚拟专用网络 (VPN)。
3.您的部署中没有第三方公共或免费代理服务器
由于 SOCKs5 代理通过 SSH 隧道将各种 TCP 和 UDP 流量路由到各自的服务,因此每个服务都不需要与第 7 层应用程序相关的特殊代理来路由应用程序请求。
4. 更少的错误,更好的性能
与其他应用程序代理不同,SOCKs5 不会重写数据包。它只是中继设备之间的流量。因此,它不太容易出错,并且性能会自动提高。
SOCKs5 在实践中是如何工作的?
任何 CISO 都不会抓住机会接受上面列出的好处。但是 SOCKs5 代理在企业安全策略的上下文中是什么样的呢?在他们的环境中实施 SOCK5 时,安全领导者从哪里开始?以下是帮助您入门的一些关键步骤。
设置 SOCKs5 代理连接
要对 IT 环境进行 SOCKS 化,客户端应用程序必须具有支持 SOCKs5 协议的能力。下面的语法基于 Linux 上的 SSH 客户端;它展示了如何创建在本地计算机上运行的 SOCKs5 代理服务器,然后向集群的边缘节点或托管在云上的网关进行身份验证,以将流量路由到集群内的服务器:
-
$ ssh -D 30001 root@EdgeNodeSSHserverIP -C -f -N (密码: xyz; 或
-
$ ssh -i /path/to/private_key -D 30001 root@EdgeNodeSSHserverIP -C -f -N
上述命令启动 SOCKs5 服务器并绑定到 30001 端口,然后通过托管在云端的 SSH 隧道连接到边缘节点、主节点或网关节点。
上述命令中使用的选项执行以下操作:
-
D 30001告诉 SSH 在客户端计算机的端口 30001 上创建一个 SOCKs5 服务器。
-
C在发送前压缩数据。
-
N表示“不执行远程命令”。这对于简单地转发端口很有用(仅限协议版本 2)。
-
F在命令执行之前请求 SSH 进入后台。
使用 SOCKs5 协议访问端点
创建 SOCKs5 代理后,配置您的客户端以访问集群的内部服务。为简单起见,我们使用支持 SOCKs5 协议的命令行 URL (cURL)。其他方法(例如使用 Web 浏览器)需要一些额外的设置和配置。
下面的 cURL 命令显示了如何通过上面创建的 SSH 隧道使用 SOCKs5 代理访问在防火墙后面侦听端口 8000 的 HTTPS 应用程序端点之一:
-
curl -x socks5h://localhost:30001 -v -k -X GET https://EdgeNodeSSHserverIP:8000
上面的 cURL 工具连接到 localhost 上的端口 30001。在从 cURL 接收到端口 30001 上的 HTTP GET 请求后,SSH 客户端通过 SSH 隧道将相同的请求发送到 SSH 服务器。
远程 SSH 服务器处理请求并将请求传递给在端口 8000 上侦听的后端服务。响应通过相同的 SSH 隧道发送回客户端,并发送到客户端的 SOCKs5 代理。代理将响应中继到 cURL,cURL 会显示响应。
使用 SSH 动态端口转发方法创建 SOCKs5 代理后,还可以使用 netcat 实用程序测试 TCP 连接。如下图,使用 SOCKs5 代理对 8443 端口监听的后端服务进行 TCP 连接测试:
-
ncat –proxy 127.0.0.1:30001 –proxy-type socks5 EdgeNodeSSHserverIP 8443 -nv
总之
SOCKs5 代理是一种轻量级的通用代理,位于 OSI 模型的第 5 层并使用隧道方法。它支持各种协议产生的流量,例如HTTP、SMTP和FTP。SOCKs5 比 VPN 更快且易于使用。由于代理使用隧道方法,公共云用户可以使用 SOCKs5 通过安全隧道(如 SSH)访问防火墙后面的资源。
本篇文章来源于微信公众号: 勤于奋