在stunnel上反向ssh隧道(或者只是反向回落stunnel连接)

我正在创build一个可以在NAT或任何防火墙后面部署的安全“保pipe箱”,呼叫一个受控制的可公开访问的服务器,然后从服务器启动控制。

我知道这很容易用ssh -R命令完成,但是,我正在寻找一些能够通过适当的SSL / TLS和端口443有效避开IDS / IPS的东西。

目前我的设置工作(只SSL)有我的Dropbox(我们将这个客户端)调用,并启动与服务器的stunnel连接。 然后我可以从客户端手动ssh到服务器。

这很好,但是,我需要能够通过build立的stunnel从服务器ssh到客户端。

问题:

  1. 我可以通过现有的stunnel连接(由客户端发起的stunnel)直接从服务器ssh。 这可能需要一个stunnelconfiguration更改,我只是有点失去了我应该改变。
  2. 我可以通过stunnel从客户端反向SSH隧道到服务器,以便服务器有一个本地端口ssh回到客户端? 如果是这样,我一直无法得到ssh -R命令正常工作,因为我想我最终创build一个循环。

以下是我的stunnelconfiguration:

服务器:

cert=/path/to/cert.pem pid=/tmp/stunnel.pid [ssh] accept = 443 connect = 127.0.0.1:22 

客户:

 cert=/path/to/cert.pem pid=/tmp/stunnel.pid client=yes [ssh] accept=2200 connect=<serverpubip>:443 

示例SSH命令尝试通过通道连接从客户端到服务器进行反向:

 ssh -i /path/to/cert -R 2200:localhost:2200 -p 2200 admin@localhost -f -N 

请记住,要求是只有客户端可以调用服务器来启动初始连接(stunnel),并且stream量必须通过格式良好的SSL / TLSencryption。 我还需要从服务器获得对客户端的shell访问权限。 提前致谢!

更新:

它最终是一个糟糕的SSH命令。 这对我工作的ssh命令是:

 ssh -i /path/to/cert -R 2201:localhost:22 -p 2200 admin@localhost -f -N 

我认为所有需要的是在您的ssh命令中将-R 2200:localhost:2200更改为-R 2200:localhost:22

现在,您将服务器上的端口2200连接到客户端上的端口2200。 是的,因为客户端:2200被传回到服务器,所以创build了一个转发循环。

假设客户端上的ssh运行在端口22上,那么-R 2200:localhost:22会将服务器上的端口2200连接到客户端上的ssh。

为了使这个更清楚一点,我build议select一个不同的端口号来反向来自服务器的隧道:比如-R 2201:localhost:22 。 这样你就不会在两个主机上使用2200端口,这将有助于避免让两个端口感到困惑。

您的实际工具目标无法达到,因为

  1. stunnel无法做到这个连接function,
  2. ssh不会作为守护进程工作,并且与https有一些不同的协议。 足够的智能IDS-es将能够检测到。

你必须做什么:

  1. 正如@NilsToedtmannbuild议,你应该使用一些棘手的东西,至less一个OpenVPN。 openvpn的客户端应该在里面运行。 注意超时/保持活动设置! 你必须做出可能的最小开销stream量。
  2. OpenVPNstream量与普通的https不同,但是有一个名为obfsproxy的工具,可以将OpenVPNstream量embedded到更友好的数据stream中。 这个工具是tor项目的一部分,但也可以独立使用(最初是针对大中华区防火墙开发的)。
  3. 如果图片中有某种types的公司防火墙,您可以使用cntlm来使它看起来像ie8, 并使其与Kerberosauthentication的公司代理兼容
  4. 在服务器端,有一个工具,它可能是非常有用的,它的名字是sslh 。 它允许你使用普通的https服务将你的openvpn / ssh 复用到 httpsstream量上。

所以,你的实际数据连接并不像你想的那么简单,但你可以达到你想要的。 如果使用所有这些技术,即使是智能networking安全检查也是如此。

为什么不在“dropbox”上安装持久的reverse_http(s)meterpreter? 我认为这是通过http(s)获取反向shell的最简单方法。