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


15

偶尔我必须连接到访问受到严格限制的服务器。
DMZ防火墙仅允许入站SSH。
出站HTTP连接被阻止。

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

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

SSH具有-D <port>SOCKS代理选项。但是不幸的是,这是从客户端到服务器的唯一方式,并且没有反向选项。

Answers:


26

我最终ssh只用以下方法完成了此任务:

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

1.在后台启动本地袜子代理

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

$ ssh -f -N -D 54321 localhost

-f 在后台运行SSH。

注意:如果关闭在其上启动命令的终端,则代理进程将被终止。还记得在完成后关闭终端窗口或自己取消进程来清理自己!

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

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

$ ssh root@target -R6666:localhost:54321

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

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

瞧!隧道开心!


4.可选:配置服务器软件以使用转发的代理

我发现proxychains在目标服务器上安装使事情变得容易得多。

telnet通过使用LD_PRELOAD技巧将TCP和DNS请求从任意命令重定向到代理,它使任何软件都可以使用SOCKS代理(甚至是)。

设置/etc/proxychains.conf为使用转发的袜子代理:

[ProxyList]
# SSH reverse proxy
socks5  127.0.0.1 6666

使用以下命令隧道任意工具(使用TCP)proxychains

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

3

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

较新的SSH版本的手册页中也对此进行了说明:

[...]如果未指定显式目标,则ssh将充当SOCKS 4/5代理,并将连接转发到远程SOCKS客户端请求的目标。

您可以通过curl连接到简单的“给我IP”(如http://ifconfig.io) API进行测试。

$ curl ifconfig.io

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


2
提及该功能引入哪个版本号将很有用。
kasperd

比thanx简单得多!
Kaii

1
@kasperd:OpenSSH 7.6,于2017-10-03发行。检查“ 新功能”
MestreLion,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.