运行通过 SSH 建立隧道的本地 SOCKS 代理

运行通过 SSH 建立隧道的本地 SOCKS 代理

我正在经历发布并无法安静地理解其中暗示的内容。

我每天在工作中使用的一个很棒的“功能”:能够让 SSH 侦听端口 443,这样我就可以创建一个绕过工作防火墙的隧道,从而允许我运行本地 SOCKS 代理,通过 SSH 隧道连接到面向互联网的 Linux 服务器。

我可以完全忽略我的公司防火墙。

据我了解,端口22办公室机器上的 SSH 访问被阻止。我将如何从我的家庭计算机连接到远程办公室计算机?

在我的家用机器上,我会使用类似的命令吗?

ssh -D 1337 -f -C -q -N user@office -p 443

然后更改我家用计算机的 Firefox 中的代理设置以从我的家用计算机访问办公室网络?

答案1

就是这样,但你把家庭和办公室颠倒了。关键是办公室防火墙拒绝 Web 流量以外的传出连接。但由于 HTTPS 流量和 SSH 流量都是加密的,因此无法轻松区分它们,因此防火墙只是阻止到 443(标准 HTTPS 端口)以外的端口的传出连接,并且可能有一个 HTTP 代理,只允许 HTTP 流量通过端口 80 和可能的其他端口。

因此,我们的想法是在家里运行一个 SSH 服务器,监听端口 443,并将数据中继到任何地方。袜子是中继 TCP 连接的通用协议。它可以中继 Web 流量、SSH 连接和许多其他协议。

您可以将 Web 浏览器配置为使用 SOCKS 代理,而不是 HTTP 代理。主要的网络浏览器都支持 SOCKS。如果您想使用不支持 SOCKS 代理的应用程序,您可以在tsocks

实际上可以区分 SSH 和 HTTPS,因为前几个字节(在流量可以加密之前,同时两个端点仍在协商选项和会话密钥)是可以区分的。并非所有企业防火墙都这样做。您可以使用隧道将 SSH 会话嵌入 HTTPS。

答案2

我不太清楚这篇文章谈论的内容,但我一直在使用类似的东西通过 ssh 从不支持 X 转发的远程服务器重定向 http 流量。我这样做:

ssh -L23000:localhost:23000 user@remotehost
[remotehost] $ python -m SimpleHTTPServer 23000

在本地主机上打开浏览器并将其指向http://localhost:23000在浏览器中浏览远程主机上的文件。这是一个示例,但我们有一个基于 Web 的门户,我们需要在远程节点上运行它并执行我们以这种方式执行的操作。

我想这篇文章讨论的是通过 ssh 重定向来自 SOCKS 代理的所有流量,从而能够访问受防火墙保护的网络。

相关内容