仅限 SSH:通过 ssh SOCKS 代理进行反向隧道 Web 访问

仅限 SSH:通过 ssh SOCKS 代理进行反向隧道 Web 访问

有时候我必须连接到访问受到严格限制的服务器。DMZ
防火墙仅允许通过 VPN 进行入站 SSH。
出站 HTTP 连接被阻止。

我正在寻找一种通过 SSH 会话隧道传输 Web 访问的简单方法,以便我可以通过 yum / apt-get 安装更新和软件。理想情况下,我希望避免在受保护区域安装其他软件/服务。

在这种情况下你会怎么做?

SSH 有-D <port>SOCKS 代理选项。但不幸的是,它只是从客户端到服务器的单向连接,没有反向选项。

答案1

我最终只用以下方法就完成了这个任务ssh

  1. 在客户端计算机上启动本地 SOCKS 代理(使用ssh -D)编辑:SSH>7.6 不需要
  2. 连接到远程服务器并设置反向端口转发(ssh -R)到本地 SOCKS 代理
  3. 配置服务器软件以使用转发代理

1. 后台启动本地socks代理

编辑SSH>7.6 允许使用更简单的语法来启动代理。跳过此步骤并继续执行步骤 2!

通过 SSH 连接到本地主机并在端口 54321 上打开 SOCKS 代理。

$ ssh -f -N -D 54321 localhost

-f在后台运行 SSH。

笔记:如果您关闭启动命令的终端,代理进程将被终止。此外,请记住在完成后关闭终端窗口或自行终止进程,以进行清理!

2. 连接到远程服务器并设置反向端口转发

将远程端口 6666 绑定到本地端口 54321。这使得您的本地 socks 代理可用于端口 6666 上的远程站点。

$ ssh root@target -R6666:localhost:54321

编辑SSH>7.6 允许使用更简单的语法来启动代理!那么不需要步骤 1:

$ ssh root@target -R6666:localhost

3. 配置服务器软件以使用转发代理

只需配置 yum、apt、curl、wget 或任何其他支持 SOCKS 的工具即可使用代理127.0.0.1:6666

瞧!隧道挖得真好!


4.可选:安装代理链以使事情变得简单

proxychains安装在目标服务器上可以任何软件使用转发的 SOCKS 代理(甚至telnet)。它使用LD_PRELOAD技巧将任意命令的 TCP 和 DNS 请求重定向到代理,非常方便。

设置/etc/proxychains.conf使用转发的 socks 代理:

[ProxyList]
# SSH reverse proxy
socks5  127.0.0.1 6666

使用 TCP 隧道的任意工具proxychains

$ proxychains telnet google.com 80
$ proxychains yum update
$ proxychains apt-get update

答案2

较新版本的 SSH 允许使用非常简单的选项ssh -R <[bind_address:]port>。仅使用主机上的端口和可能的绑定地址,但不指定客户端端口将创建反向 SOCKS 代理。

新版 SSH 的手册页中也有说明:

[...] 如果没有指定明确的目的地,ssh 将充当 SOCKS 4/5 代理并将连接转发到远程 SOCKS 客户端请求的目的地。

你可以使用 curl 连接到一个简单的“给我我的 IP”API 来测试这一点,例如http://ifconfig.io

$ curl ifconfig.io

对比

$ curl --socks5 localhost:<PORT> ifconfig.io

相关内容